我希望我的shell检测人类的行为,然后显示提示。
因此,假设文件名是test.bash
#!/bin/bash
if [ "x" != "${PS1:-x}" ] ;then
read -p "remove test.log Yes/No" x
[ "$x" = "n" ] && exit 1
fi
rm -f test.log
但是,如果我没有设置PS1,我发现它无法工作。有更好的方法吗?
我的测试方法:
./test.bash # human interactive
./test.bash > /tmp/test.log # stdout in batch mode
ls | ./test.bash # stdin in batch mode
答案 0 :(得分:33)
详细说明,我会尝试
if [ -t 0 ] ; then
# this shell has a std-input, so we're not in batch mode
.....
else
# we're in batch mode
....
fi
我希望这会有所帮助。
答案 1 :(得分:9)
来自help test
:
-t FD True if FD is opened on a terminal.
答案 2 :(得分:6)
您可以使用/usr/bin/tty
程序:
if tty -s
then
# ...
fi
我承认我不确定它是多么便携,但它至少是GNU coreutils的一部分。