2014-01-15 42 views
0

仍在學習shell腳本。任何人都可以解釋下面的代碼嗎?外殼重定向到一個整數?

obtainAllVersions() 
{ 
     IFS="|" 
     while read pkg pkgfiles mac <&9 
     do 
       rcmd -n $mac hostname 2> /dev/null 
     done 9< "$1" 
} 

這是一個修改爲僅顯示幾臺機器的主機名的例子。

9< "$1"是做什麼用的?另外,<&9

我知道<用於重定向,而$1是傳遞給函數的第一個參數。我不明白爲什麼9或者其他數字有效,但是一個字母或者字母串沒有。

此外,它似乎像9&(stnd out和stnd err)正在被重定向到read。是對的嗎?這樣做有意義嗎?

+0

這是[文件描述符](http://en.wikipedia.org/wiki/File_descriptor),您可以將其視爲匿名文件。 [This](http://www.tldp.org/LDP/abs/html/io-redirection.html)向你展示了你可以用bash做些什麼。 – phs

回答

2
  1. 閱讀 「REDIRECTION」 該 「的bash」 手冊部分

  2. 的 「< & 9」 語法會導致STDIN從文件描述符上當9

  3. 的 「9 < $ 1」語法導致文件描述符9從第一個參數打開到函數。

+1

'read'命令可以使用'read -u 9'來代替重定向(在'bash'中)。這樣做的原因是,正常的標準輸入可用於循環體內的'rcmd',因此循環體中的'rcmd'不會通過讀取所有循環來控制循環控制來自文件的數據等 –