2015-11-17 70 views
1

命令失敗通過bash -c命令失敗,但工程直接

bash -c 'sudo lspci -vvv | awk \'/System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}\'' 

-bash:語法錯誤附近意外的標記'(」

同樣的命令工作得很好,如果運行直接在控制檯sudo lspci -vvv | awk '/System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}'

如何覆蓋「(」在bash的命令字符串-c?

回答

3

你無法逃避單屈內單引號otes那樣。這是行不通的。

你的命令被視爲

sudo lspci -vvv | awk /System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]} 

其失敗。

要在單引號字符串中放置單引號,您需要使用'\''

所以你的命令變爲:

bash -c 'sudo lspci -vvv | awk '\''/System peripheral/ {portn=$1} /Status:/ {split($3,a,"M");printf "%s\n",a[1]}'\'