我有一个使用“源”执行的 csh 脚本,并将其所有参数传递给程序:
% alias foo source foo.csh
% cat foo.csh
./bar $*
# Some uninteresting stuff
如果我运行source foo.csh a b c
,一切正常。但不总是:
foo "a b" "c d"
:
我希望bar
得到两个参数 -a b
和c d
. 相反,它得到 4。foo a "*" b
:*
扩展为文件列表。我只想要角色*
。
额外的信用 -foo a * b
应该以同样的方式工作。我知道这更成问题,我愿意没有它而生活。
我尝试过的一件事是更改./bar $*
为./bar "$*"
. 这有助于使用星号,但现在bar
总是在一个参数中获取所有内容。
笔记:
我们公司使用csh作为登录shell,所以在使用的时候一定要用
source
。知道csh 编程被认为是有害的,我在脚本中实现了所有逻辑,bar
并在脚本中保留了最低限度。如果您建议重新定义别名,重要的是要看到重定向仍然有效 (
foo | grep hello
),并且如果 ctrl-C 破坏脚本,则进行适当的清理。