簡體   English   中英

如何使用管道將參數傳遞給bash腳本?

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

我想通過管道或其他方法將參數傳遞給此腳本中的read命令。

我在腳本中的命令是

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

如果有任何用處,read命令將顯示在腳本的第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被回顯。

如果您不想遵循echo方法(將某些東西回顯並將其通過管道傳遞到腳本中),則只需更改命令即可:

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

./script argument1 argument2 <<<"n"

要么

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM