Bash - 仅当输出为终端时

Bash - Only When Output Is Terminal

我想在我的代码中有一个部分只在终端中打印输出时执行,而不是通过管道传输或重定向到文本文件或其他程序中。

我试过这个:

#!/bin/bash

if [[ $(tty "-s") ]]; then
  printf "You are using a terminal.\n"
else
  printf "You are not using a terminal.\n"
fi

tty -s && printf "Guten Tag.\n"

./tty.sh 命令后的输出:

You are not using a terminal.
Guten Tag.

`./tty.sh > test.txt` 后 test.txt 中的输出:
``` 您没有使用终端。 古腾标签。 ```

请记住 bash 中的 if 语句检查所提供命令的退出状态:

if command; then
  # then block
else
  # else block
fi

[[只是一个特殊的内置命令。

只需使用:

if tty -s; then

tty -s 退出状态为 0 时,运行 一些代码,(成功)

并且不要使用 tty 检查输入是否是终端,而是使用 [ -t 0 ]

if [ -t 0 ]; then

参见 man 1 ttyman 1 test

如果man 1 test不清楚,那么你可以分别测试标准输出和标准错误输出是否是一个终端:

[ -t 1 ] # stdout is a terminal
[ -t 2 ] # stderr is a terminal