这个需要一些bash和tcsh的知识。我想在bash脚本中添加一行,该脚本使用一些参数调用命令,但使用tcsh解释器。假设我要调用的命令是ls
(这很愚蠢,但它证明了问题)。因此,如果my_script
包含:
#!/bin/bash
/bin/tcsh -c "ls"' "$*"' "${@}"
然后我将其称为:
my_script "first file" "second file"
我明白了:
ls: first file second file: No such file or directory
问题是tcsh只接收一个参数first file second file
,而不是两个参数。我该如何解决这个问题?
答案 0 :(得分:2)
您的tcsh脚本错误。当心,我不知道tcsh,但这是我从几个测试中可以看出来的。
将其更改为
#!/bin/bash
/bin/tcsh -c 'ls "$1" "$2"' "$@"
你需要在tcsh方面使用"$@"
而不是"$*"
,就像在bash方面一样。在bash中,"$*"
扩展为单个单词(所有位置参数的串联,由第一个IFS字符(默认空格)分隔),而"$@"
扩展为每个位置参数的一个单词。
在tcsh中,"$*"
似乎也是如此,但我发现没有"$@"
的等价物。在这种情况下,您知道参数的数量,并可以使用"$1" "$2"
。请注意,很多人都诅咒了tcsh,所以很可能没有更好的解决方案......
所以,为了纠正你的假设,在原始脚本中,不是tcsh只接收来自bash的一个参数,但是它只接收来自tcsh的一个参数。
答案 1 :(得分:0)
回答我自己的问题......这是解决方案:
/bin/tcsh -c "ls "'$argv:q' "${@}"