在bash中检查isatty

时间:2012-04-05 03:32:02

标签: bash shell

我希望我的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

3 个答案:

答案 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的一部分。