我想我的壳来检测,如果人的行为,然后显示提示。
因此,假设文件名是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
阐述,我会尝试
if [ -t 0 ] ; then
# this shell has a std-input, so we're not in batch mode
.....
else
# we're in batch mode
....
fi
我希望这有帮助。
从help test
:
-t FD True if FD is opened on a terminal.
你可以利用的/usr/bin/tty
程序:
if tty -s
then
# ...
fi
我承认,我不知道它是多么便携,但它是GNU的coreutils的至少一部分。
请注意,这是没有必要使用仡&&
和||
外壳运营商两个独立的游程相结合[
命令,因为[
命令有它自己的内置和 -a
和或 -o
运营商,让您撰写一些简单的测试到一个单一的结果。
所以,这里是你如何实现你要求的测试-在那里你翻车进入批处理模式下,如果输入或输出已经重定向从TTY了-使用单一调用[
:
if [ -t 0 -a -t 1 ]
then
echo Interactive mode
else
echo Batch mode
fi