我認為下面的兩個命令應該是相同的,但是給定 heredoc,shell 會產生錯誤。是否可以將heredoc 傳遞給sh 的-c 引數?
heredoc 示例
/bin/sh -c <<EOF
echo 'hello'
EOF
# ERROR: /bin/sh: -c: option requires an argument
簡單的字串示例
/bin/sh -c "echo 'hello'"
# prints hello
uj5u.com熱心網友回復:
這些命令不等效。
/bin/sh -c <<EOF
echo 'hello'
EOF
相當于
echo "echo 'hello'" | /bin/sh -c
或者,使用這里的字串:
/bin/sh -c <<< "echo 'hello'"
但sh -c需要一個論據。它可以與
echo "echo 'hello'" | /bin/sh
uj5u.com熱心網友回復:
我試圖將此作為評論發布,但格式化代碼在評論中效果不佳。使用@Benjamin W. 接受的答案作為指導,我能夠讓它與這個片段一起作業
( cat <<EOF
echo 'hello'
EOF
) | /bin/sh
神奇之處在于如何cat處理輸入。從手冊頁:
如果 file 是單個破折號 (`-') 或不存在,則 cat 從標準輸入讀取。
所以 cat 可以重定向stdin到stdout并且可以通過管道傳輸到/bin/sh
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485035.html
上一篇:洗掉特定字符和長度后的所有內容
