bash在管道输入后读取stdin

时间:2015-07-19 14:33:03

标签: bash

我无法让bash放弃对stdin的管道控制。我想将用户名和密码传递给程序,然后从stdin而不是管道读取相同的程序!这就是我的尝试:

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

那是我的.bashrc。首先,它是用户名/密码文件,然后将其输入pianobar(终端中的pandora)。用户名和密码进入那里,然而,pianobar期待更多的输入。 Pianobar要求一个数字(例如,可以播放 12 ),但是当我输入并按下回车时,没有任何反应,因为出于某种原因,它没有预料到它会来从那里。

如何让管道“放弃”控制?

注意:我也试过

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

2 个答案:

答案 0 :(得分:1)

您可以尝试两种选择:

简单方法:(可能不适用于所有类型的命令(例如本例中的pianobar)

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 :(得分:0)

这是配置pianobar自动登录的正确方法:

    mkdir ~/.config/pianobar/ && cd ~/.config/pianobar/ && touch config

在命令行中运行^^^,然后将以下内容放入新的配置文件

    # User
    user = (Your Pandora email)
    password = (Your Pandora password)

https://github.com/PromyLOPh/pianobar/blob/e945578ab22912049f1e547ce7b25b01089f7590/contrib/config-example