這裏是我的file.sh bash腳本:獲得在bash第一行參數分叉過程後
#!/bin/bash
$(awk '/[ \t]+'$1'\/'$2'/' /etc/servicies) | awk '{print '$1'}';
如果我運行:
file.sh 21 tcp
它應該打印FTP。但我得到那個錯誤:
./file.sh: line 2: ftp: command not found
有人可以解釋我爲什麼那個錯誤,以及如何解決它?
謝謝。
這裏是我的file.sh bash腳本:獲得在bash第一行參數分叉過程後
#!/bin/bash
$(awk '/[ \t]+'$1'\/'$2'/' /etc/servicies) | awk '{print '$1'}';
如果我運行:
file.sh 21 tcp
它應該打印FTP。但我得到那個錯誤:
./file.sh: line 2: ftp: command not found
有人可以解釋我爲什麼那個錯誤,以及如何解決它?
謝謝。
awk '/[ \t]+'$1'\/'$2'/ { print $1 }' /etc/services
爲什麼使用$(...)
構造?它被bash所包含命令的輸出所取代,所以你的管道變得類似於
ftp 21/tcp xxx_master # ftp/XXX
它會觸發上述錯誤。
解決方案:只要刪除$(
和)
,一切都應按預期工作。
awk '$2==A && $3=B, NF=1' FPAT='[^ /]+' A=$1 B=$2 /etc/services
我不明白你的命令是什麼意思...我是一個新手awk – artaxerxe 2013-05-13 07:48:20
有點費解,但... $(無論)執行它的輸出... 因此,假設
$(awk '/[ \t]+'$1'\/'$2'/' /etc/services)
的$內的部分()讓你的輸出
ftp blahblahblah
它將首先嚐試執行它,並且僅在將執行輸出傳遞到第二個awk管道後執行。
只需刪除$()語法,這樣第一個awk的輸出將被髮送到後面的步驟。
順便說一句,請的,而不是做
cat xxxx | dosomething
嘗試做
dosomething xxxxx
這是行不通的。它打印出我21.當執行腳本時我傳遞的第一個參數。我需要從印刷的行中拿出拳頭的論點。 – artaxerxe 2013-05-13 07:46:51
@artaxerxe:如果你不想讓shell解釋'$ 1',不要使用它不加引號:'awk'{print $ 1}'' – choroba 2013-05-13 09:19:28