2013-06-09 14 views
8

Tôi có một kịch bản csh, được thực hiện sử dụng "nguồn", và vượt qua tất cả đối số của nó cho một chương trình:luận đèo từ csh chương trình, chính xác như họ

% alias foo source foo.csh 
% cat foo.csh 
./bar $* 
# Some uninteresting stuff 

Nếu tôi chạy source foo.csh a b c, tất cả OK. Nhưng không phải lúc nào:

  1. foo "a b" "c d":
    Tôi hy vọng bar để có được hai đối số - a bc d. Thay vào đó, nó được 4.

  2. foo a "*" b: * được mở rộng thành danh sách tệp. Tôi chỉ muốn nhân vật *.
    Tín dụng bổ sung - foo a * b cũng hoạt động tương tự. Tôi biết nó có vấn đề hơn và tôi sẵn sàng sống mà không có nó.

Một điều tôi đã thử đang thay đổi ./bar $* thành ./bar "$*". Điều này giúp với dấu hoa thị, nhưng bây giờ bar luôn nhận mọi thứ trong một tham số.

Ghi chú:

  1. Công ty chúng tôi sử dụng csh như vỏ đăng nhập, vì vậy tôi phải sử dụng nó khi sử dụng source. Biết rằng csh programming is considered harmful, tôi đã triển khai tất cả logic trong bar và để trống tối thiểu trong tập lệnh.

  2. Nếu bạn đề xuất xác định lại bí danh, điều quan trọng là thấy chuyển hướng đó vẫn hoạt động (foo | grep hello) và có cách dọn dẹp thích hợp nếu ctrl-C vi phạm tập lệnh.

Cảm ơn.

Trả lời