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

How do I pass arguments to a bash script using a pipe?

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

我在脚本中的命令是

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 传递给此命令,以便脚本继续执行到最后。

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

echo "n" | ./script argument1 argument2

另一个例子:

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

输出:

abcd

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

如果您不想遵循回显方式(回显某些内容并将其通过管道传输到您的脚本),您只需更改您的命令:

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

./script argument1 argument2 <<<"n"

或者

./script argument1 argument2 <<<"$var"