tl; dr:需要一种方法来处理(使用grep)subshell内的输出并同时将所有原始输出重定向到主stdout / stderr。我正在寻找与shell无关(!)的方式。
详细
有一个专有二进制文件,我想grep一些值
不时有专有二进制文件可能是交互式的,要求输入密码(取决于内部逻辑)
我想grep二进制文件的输出并希望能够输入进一步继续所需的密码
因此,应该实现我的任务的脚本可能如下所示:
#!/bin/sh
user_id=... # some calculated value
list_actions_cmd="./proprietary-binary --actions ${user_id}"
action_item=$(${list_actions_cmd} | grep '^Main:')
此处proprietary-binary
可能会通过stdin
要求输入密码。由于$()
内的子shell捕获了所有输出,因此最终用户不会理解list_actions_cmd
等待输入。我想要的是显示list_action_cmd
的所有输出并同时进行grepping或者至少捕获了关键字,现在将要求用户输入密码并告诉他。
目前我想到的是tee
输出和grep:
#!/bin/sh
user_id=... # some calculated value
list_actions_cmd="./proprietary-binary --actions ${user_id}"
$list_actions_cmd 2>&1 | tee /tmp/.proprietary-binary.log
action_item=$(grep "^Main" /tmp/.proprietary-binary.log)
但是我想知道是否有任何优雅的shell独立(不限于强大的bash)解决方案没有任何中间临时文件?感谢。
答案 0 :(得分:2)
如果在终端中执行,则将输出复制到stderr:
item=$(your_command | tee /dev/stderr | grep 'regexp')