我想从终端运行一个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输出不能工作。即使进程写入标准输出或标准错误,我最终也没有任何输出。
任何想法?
好了,谢谢大家来看。原来这个脚本已经包含了一个工作方法。它只是包含一个错别字,导致它失败了。我在问题中纠正了它,以便将来参考。