2013-04-01 64 views
-2

這是到目前爲止我的代碼:猛砸我不同意管道,拒絕做完整的命令

#! /bin/bash 

Options=("1" "2" "3") 
select opt in "${Options[@]}" 
do 
    case "$REPLY" in 
    1) 
     who=$(whoami) 
     echo -e "you are: $who" 
     ;; 
    2) 
     var=$(uptime | awk '{print $3}' | cut -d, -f 1) 
     echo $var 
     ;; 
    3) break;; 
    *) echo "Invalid input";; 
    esac 
done 

它不工作。第一個選項工作得很好。然而第二個不是。

進一步的測試表明慶典不喜歡管道多,輸出是簡單的「#」,暗示這只是實際被執行的命令的AWK一部分。該命令可以在shell中正常工作(它只報告它在線的時間)。

+0

爲什麼你在'$回聲'$' '?反正整個線路有什麼問題? –

+0

這將是一個打字錯誤,根本就不應該有任何迴音。將更新。 – Deviatore

+0

你的意思是這樣的:var ='echo uptime | awk'{print 3}'| cut -d,-f 1'? 不工作說「切:無效的字節或字段列表」 – Deviatore

回答

2

此行沒有任何意義:

var=$(uptime | awk '{print 3}' | -d, -f 1) 

awk的說法應該是

awk '{print $3}' 

cut的說法應該是

cut -d ',' -f 1 

說實話,你可能不需要awk聲明完全看起來你想要做什麼。只需管uptime到上面的cut聲明即可。

var=$(uptime | cut -d ',' -f 1) 
+0

這將返回第一次,其次是實際正常運行時間。我只想看看正常運行時間,沒有逗號。這是令人驚訝的困難。 – Deviatore

+0

@ user2230627如果我在我的系統上運行'uptime',我得到'23:40,22天21:01,2個用戶,平均負載:0.37 0.41 0.45'。 **你想從中看到什麼?** – chrisaycock

+0

** NB **自這個答案發布以來,問題已被修改。對編輯歷史的回顧顯示原始代碼在此答案中被引用。 –

0

當您使用Windows/DOS中的文本文件並在unix中重新使用它時,會發生這種情況。

在每個相應的OS中的行結束是不同的。 HTH

附:當您在vi/vim中打開文本文件時,您會在行尾註意到^ M。

不行的說 「切:無效字節或字段列表」 - user2230627 4月1日3:34