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 tty
和 man 1 test
。
如果man 1 test
不清楚,那么你可以分别测试标准输出和标准错误输出是否是一个终端:
[ -t 1 ] # stdout is a terminal
[ -t 2 ] # stderr is a 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 tty
和 man 1 test
。
如果man 1 test
不清楚,那么你可以分别测试标准输出和标准错误输出是否是一个终端:
[ -t 1 ] # stdout is a terminal
[ -t 2 ] # stderr is a terminal