将参数从csh传递给程序,就像它们一样

ugo*_*ren 9 linux csh

我有一个csh脚本,使用"source"执行,并将其所有参数传递给程序:

% alias foo source foo.csh
% cat foo.csh
./bar $*
# Some uninteresting stuff
Run Code Online (Sandbox Code Playgroud)

如果我跑source foo.csh a b c,一切都好.但不总是:

  1. foo "a b" "c d":
    我希望bar得到两个论点 - a b和c d.相反,它得到4.

  2. foo a "*" b:它*被扩展为文件列表.我只想要这个角色*.
    额外的功劳 - foo a * b应该以同样的方式工作.我知道这更有问题,我愿意没有它.

有一件事我试着在改变./bar $*到./bar "$*".这有助于星号,但现在bar总是在一个参数中获取所有内容.

笔记:

  1. 我们公司使用csh作为登录shell,所以我必须在使用时使用它source.知道csh编程被认为是有害的,我实现了所有逻辑bar并在脚本中保留了最低限度.

  2. 如果你建议重新定义别名,重要的是看到重定向仍然有效(foo | grep hello),并且如果ctrl-C破坏了脚本,那么正确清理.

谢谢.

ugo*_*ren 18

同时,我自己找到了答案:

./bar $argv:q

该:q修改需要照顾的事情.它传递给bar完全相同的参数foo.

资料来源:http://www.staff.tugraz.at/reinfried.o.peter/unix/cshell.html