如何使用管道将参数传递给bash脚本?

时间:2017-03-11 21:09:49

标签: bash unix stdin pipeline

我想通过管道或其他方法将参数传递给此脚本中的读取命令。

脚本中的命令是

read -p "Change Parameters?
while [ $REPLY != "n" ]
do
        if  [ $REPLY == "a" ]
        then
..
..
        if [ $REPLY =="j" ]
..
done

如果有任何用途

,我的脚本第48行会显示读取命令

我已经尝试了

./script argument1 argument2 | bash /dev/stdin "n"

导致

Change Parameters? /dev/stdin: line 1: Default: command not found
/dev/stdin: line 2: a: command not found
/dev/stdin: line 3: b: command not found
/dev/stdin: line 4: c: command not found
/dev/stdin: line 5: d: command not found
/dev/stdin: line 6: e: command not found
/dev/stdin: line 7: f: command not found
/dev/stdin: line 8: g: command not found
/dev/stdin: line 9: h: command not found
/dev/stdin: line 10: i: command not found
/dev/stdin: line 11: j: command not found
/dev/stdin: line 12: n: command not found

然后停止

我只想将字母n传递给此命令,并让脚本一直持续到最后。

2 个答案:

答案 0 :(得分:2)

您的管道是错误的方法,将n传递给您需要编写的脚本

echo "n" | ./script argument1 argument2

另一个例子:

echo "abcd" | { read -p "Change Parameters?" b; echo $b; }

输出:

abcd

在第二个示例中,{ ... }部分是您的脚本,echo "abcd"通过管道传输到脚本,read获取" abcd" (未显示提示Change parameters?),将其保存在变量$b中,然后回显$b

答案 1 :(得分:2)

如果您不想按照回音方式(回显并将其传递给您的脚本),您只需要更改命令:

./script argument1 argument2 | bash /dev/stdin "n"

./script argument1 argument2 <<<"n"

或者

./script argument1 argument2 <<<"$var"
相关问题