Bash脚本将参数传递给tcsh解释器

时间:2012-08-25 18:15:58

标签: bash csh tcsh

这个需要一些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,而不是两个参数。我该如何解决这个问题?

2 个答案:

答案 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' "${@}"