【发布时间】:2021-03-10 13:53:16
【问题描述】:
我想从终端运行一个 linux 控制台命令,以防止它自己访问 TTY(例如,当控制台命令尝试向用户请求密码时,这种情况经常发生 - 这应该只是失败)。我最接近解决方案的是使用这个包装器:
temp=`mktemp -d`
echo "$@" > $temp/run.sh
mkfifo $temp/out $temp/err
setsid sh -c "sh $temp/run.sh > $temp/out 2> $temp/err" &
cat $temp/err 1>&2 &
cat $temp/out
rm -f $temp/out $temp/err $temp/run.sh
rmdir $temp
这会在没有 TTY 访问的情况下按预期运行命令,但由于某种原因无法通过 FIFO 管道传递 stdout/stderr 输出。即使进程写入标准输出或标准错误,我最终也没有任何输出。
有什么想法吗?
【问题讨论】:
-
为什么不
my_script </dev/null >/dev/null? -
@Roadowl 如果 my_script 显式打开
/dev/tty,重定向将无济于事。试试head -n1 /dev/tty < /dev/null > /dev/null。它阻止了我。