我怎么知道(in ~/.bashrc
)我是否在交互模式下运行,或者说,通过 ssh 执行命令。.bashrc
如果是后者,我想避免打印 ANSI 转义序列。
Den*_*son 69
根据man bash
:
如果 bash 是交互式的,则设置 PS1 并且 $- 包括 i,允许 shell 脚本或启动文件测试此状态。
所以你可以使用:
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
Run Code Online (Sandbox Code Playgroud)
还:
当一个不是登录 shell 的交互式 shell 启动时,bash 会从 /etc/bash.bashrc 和 ~/.bashrc 读取并执行命令,如果这些文件存在的话。
So~/.bashrc
仅用于交互式 shell。有时,人们从~/.bash_profile
或~/.profile
不正确的来源获取它,因为它干扰了预期的行为。如果您想简化公共代码的维护,您应该使用一个单独的文件来包含公共代码,并从两个 rc 文件中独立获取它。
如果登录rc
文件没有输出到 stdout 是最好的,例如~/.bash_profile
或~/.profile
因为它会干扰rsync
例如的正确操作。
无论如何,测试交互性仍然是一个好主意,因为可能存在不正确的配置。
小智 20
该test
工具可以检查这一点(来自手册页):
Run Code Online (Sandbox Code Playgroud)-t FD True if FD is opened on a terminal.
所以你可以使用例如:
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
Run Code Online (Sandbox Code Playgroud)
或者
if [ -t 1 ] ; then
echo stdout is a terminal
fi
Run Code Online (Sandbox Code Playgroud)
我通常查看程序 tty 的输出。
如果您使用 tty,它会告诉您您使用的是哪个 tty。如果您未处于交互模式,它通常会告诉您诸如“not a tty”之类的信息。