2015-07-19 119 views
0

我無法讓bash將管道的控制權交給標準輸入。我想將用戶名和密碼傳遞給一個程序,然後從stdin而不是管道讀取相同的程序!這是我曾試過的:bash讀取管道輸入後的標準輸入

alias pandora='echo -e "$(cat ~/.musik/name)\n$(cat ~/.musik/pass | base64 --decode)" | pianobar' 

這是在我的.bashrc。首先,它是貓的用戶名/密碼文件,然後管道到pianobar(終端中的潘多拉)。用戶名和密碼進入,但是,pianobar期待更多的輸入。 Pianobar要求輸入一個數字(例如,可以播放,例如,電臺),但是當我鍵入並按Enter鍵時,由於某種原因,沒有發生任何事情,因此它並不期望它來自那裏。

如何讓管道「放棄」控制?

注:我也曾嘗試

echo "$(cat ~/.musik/name) 
$(cat ~/.musik/pass | base64 --decode) 
" >>> pianobar 

回答

1

有2個選項,你可以嘗試:

簡單的方法:(可能不適用於各種命令的使用(就像在這種情況下,鋼琴吧)

alias pandora='{ echo -e "$(cat ~/.musik/name)\n$(cat ~/.musik/pass | base64 --decode)"; cat; } | pianobar' 

還是帶着幾分清理&去除UUOC

alias pandora='{ cat ~/.musik/name; base64 --decode < ~/.musik/pass; cat; } | pianobar' 

更好的方法:使用expect腳本。我可以編寫腳本,但我不知道應用程序提供的登錄提示。

+1

我會用'貓;回聲;貓| BASE64;貓; } | pianobar'而不是這個來避免不必要的'echo -e'等。 –

+0

^^同意。我也有同樣的意見。我只是希望對OP的腳本進行微小的更改。但編輯也給了這個解決方案。 – anishsane

+0

使用'expect'腳本實際上更確定地以與真實TTY輸入相同的方式工作 - 如果程序在isatty(stdin)的返回值上改變其行爲,則'cat'黑客可能無法工作。 –