這個指令是錯的. 解釋如下:
在who前面的單引號和冒號前的單引號是一對嗎?如果是, 就很奇怪了, 如果是命令引號, 則字串中的一串命令將形成一個命令.
首先, who -m 將所找出誰由stdin登入的資訊為一字串.
交給awk去處理, 但這裏的awk '{print $b}'是很奇怪的, $b是啥東西
呢?
接下來的cut -f2 -d '('是要把該字串以左括號分隔為不同的欄位, 取出第二個欄位.
再下來的cot -fl -d ')'':0中應該不是cot, f後應該是1, 不是l, 而最後的':0並不對.
應該是cut -f1 -d ')'把上一字串以右括號分隔為不同的欄位, 取出第一個欄位.
這一題的確需要「訂正題目」。
以我的執行狀況為例:
<pre class="c" name="code">who -m
xxx pts/5 2010-02-05 09:24 (winxp:S.4)
$ who -m| awk '{print $5}' | cut -f2 -d'(' | cut -f1 -d')'
winxp:S.4
我想,這一題應是想解出目前虛擬終端機,是從哪邊登入進來資訊,
所以可能是想要排除掉「:0」的字樣。
但我實際 who 出來的情況是:
<pre class="c" name="code">
xxx pts/1 2010-02-05 07:54 (winxp:S.0)
xxx pts/2 2010-02-05 07:54 (winxp:S.1)
xxx pts/3 2010-02-05 08:04 (winxp:S.2)
xxx pts/4 2010-02-05 08:07 (winxp:S.3)
xxx pts/5 2010-02-05 09:24 (winxp:S.4)
xxx pts/6 2010-02-05 11:37 (winxp)
xxx pts/7 2010-02-05 11:37 (:1.0)
除了pts/6,7之外的情況可這樣執行:
<pre class="c" name="code">
who -m| awk '{print $5}' | sed -e 's/(\(.*\):.*)/\1/'
winxp
…
還需要再考慮能夠 match 各種從哪些登入 who 的 pattern,
才能順利抓到正確資訊。
twtw大, 您真是聰明, 那個$b應該是$5, 所以是awk '{print $5}'
如果是這樣, 根本不需要awk了, 因為cut -f2 -d '('就已經將左括號本身及其左側的東西全移掉了.
感謝兩位高手大大的回答,謝謝