shell 如何将命令的输出通过管道传输到程序并保持其标准输入打开

juzqafwq  于 2023-06-30  发布在  Shell
关注(0)|答案(2)|浏览(156)

例如,我想发送`print(32)到python,它应该打印32并保持打开状态,直到我按下ctrl+d
我做了跟踪

echo 'print(32)' | python

但它只是打印32并关闭python。
我想让Python的交互式shell保持打开状态,以便从我的键盘发送进一步的命令。
编辑:这只是一个例子。它可以是noderubydocker exec -it命令,而不是python。
基本上,我想通过管道输出,就像我通过键盘输入一样

eufgjt7s

eufgjt7s1#

使用-i标志要求python在运行脚本后进行交互式检查,合并bash中的进程替换<(..)构造。这将使python命令假定命令来自文件,即使它不是

python -i <(echo 'print(32)')
32
>>>

或将PYTHONINSPECT变量设置为非空字符串以模拟-i行为

PYTHONINSPECT=x python <(echo 'print(32)')

请注意,POSIX模式不支持进程替换,但仅在bash/zsh或ksh 93上支持。

syqv5f0l

syqv5f0l2#

如果您在xwindow中安装了xdotool,则可以使用以下命令模拟该行为:

#!/bin/bash
        
feed_initial_input(){
    local initial_input="$1"; shift
    { sleep 0.3; xdotool type "$initial_input"$'\n'; } &
    "$@"
}

feed_initial_input "print(32)" python
feed_initial_input "console.log('Hello world!')" node

相关问题