如何使用管道将参数传递给 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"
我想通过管道或其他方法将参数传递给此脚本中的读取命令。
我在脚本中的命令是
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"