2013-05-04 67 views
1

我測試過這個命令如何創建一個別名正確

$ nmap -sP 192.168.1.* | grep 192 | awk '{print $5}' 

產生這種輸出

192.168.1.1 
192.168.1.33 
192.168.1.34 
192.168.1.36 
192.168.1.41 

然後把它添加到我的.bash_alias文件,然後採購它。

# This alias shows IPs on the local network 
alias list-ip="nmap -sP 192.168.1.* | grep 192 | awk '{print $5}'" 

但隨後產生這樣的輸出

Nmap scan report for 192.168.1.1 
Nmap scan report for 192.168.1.33 
Nmap scan report for 192.168.1.34 
Nmap scan report for 192.168.1.36 
Nmap scan report for 192.168.1.41 

我已經有了我在做什麼whrong毫無頭緒。我只是想讓輸出像在命令行上運行一樣,而且應該是。

+0

我不覺得這個名字'列表ip'是好的,你可以嘗試避免'-'喜歡的東西'list_ip'? – fedorqui 2013-05-04 17:53:59

+1

@fedorqui不,在'bash'破折號在函數/別名中沒有問題。 – 2013-05-04 17:56:28

+0

Uhms,很高興知道,@AdrianFrühwirth,我不想。謝謝! – fedorqui 2013-05-04 17:57:31

回答

6

您使用雙引號,因此$5在您設置別名時被展開。嘗試

alias list-ip="nmap -sP 192.168.1.* | grep 192 | awk '{print \$5}'" 

注意

alias list-ip='nmap -sP 192.168.1.* | grep 192 | awk "{print $5}"' 

的工作,因爲擴張仍然發生,當您運行別名這個時候。

您也可以擺脫awk的,例如:

alias list-ip='nmap -sP 192.168.1.* | grep -o "192[0-9.]*"' 
+1

正則表達式選項聽起來很棒! – dinigo 2013-05-04 18:37:40

+0

或刪除grep,然後即使沒有可用的GNU grep,您的解決方案也可以工作,而且更重要的是,如果nmap輸出中的其他地方出現「192」,則不會發現錯誤匹配:「別名列表 - ip =「nmap -sP 192.168.1。* | awk'\ $ 5〜/^192 \ ./ {print \ $ 5}'」。 – 2013-05-05 13:08:35

+0

@EdMorton我完全同意最好不要依賴於GNU'grep',但我不同意有關誤報,因爲如果'nmap'能夠反向解析IP,它的輸出看起來不同(例如'Nmap scan report for mybox(192.168.xy)'),在這種情況下,第五列不是你想要的。你可以改變'awk'來說明這一點,但我認爲如果它的輸出是另一種語言(我相信它支持),它更具可讀性並且更加健壯。 – 2013-05-05 13:19:05