检查isatty在bash(check isatty in bash)

2019-06-23 09:39发布

我想我的壳来检测,如果人的行为,然后显示提示。

因此,假设文件名是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

Answer 1:

阐述,我会尝试

 if [ -t 0 ] ; then
    # this shell has a std-input, so we're not in batch mode 
   .....
 else
    # we're in batch mode

    ....
 fi

我希望这有帮助。



Answer 2:

help test

 -t FD          True if FD is opened on a terminal. 


Answer 3:

你可以利用的/usr/bin/tty程序:

if tty -s
then
    # ...
fi

我承认,我不知道它是多么便携,但它是GNU的coreutils的至少一部分。



Answer 4:

请注意,这是没有必要使用仡&&|| 外壳运营商两个独立的游程相结合[命令,因为[命令有它自己的内置 -a -o运营商,让您撰写一些简单的测试到一个单一的结果。

所以,这里是你如何实现你要求的测试-在那里你翻车进入批处理模式下,如果输入输出已经重定向从TTY了-使用单一调用[

if [ -t 0 -a -t 1 ]
then
    echo Interactive mode
else
    echo Batch mode
fi


文章来源: check isatty in bash
标签: bash shell