如果从给定程序调用,则防止脚本生成标准输出

如果从给定程序调用,则防止脚本生成标准输出

我希望我的 gnome 终端在其标题栏中显示我当前的用户和主机,以及当我使用 ssh 时远程的用户和主机。

为此,我创建了一个脚本~/bin/ssh~/bin在我的PATH之前/usr/bin

#!/bin/bash
echo -ne "\033]0;${1}\007"
/usr/bin/ssh $@

这工作得很好(可以说,对于意外的参数顺序来说并不稳健)。即使退出 ssh 会话后,窗口标题也会很好地恢复。

我的问题是尝试使用的其他程序ssh会受到此生成的干扰stdoutgit fetch例如,呕吐\033]0;

我的问题是:如何改进脚本,使其保留其名称ssh,但stdout仅在相关情况下给出?

必须有某种变量来告诉是否有任何窗口标题需要更改?我想TERM在运行 via 时仍然定义了git,所以这是行不通的。

我可以将字符串发送到另一个流吗?

我应该解析选项并且在某些条件下ssh不输出吗?stdout

答案1

您希望您的脚本检查其标准输出是否将连接至 tty。

参考这个stackoverflow问题,在 bash 中检查 isatty

#!/bin/bash

# set the terminal title, if I'm running in a terminal
if [[ -t 1 ]]; then echo -ne "\033]0;${1}\007"; fi

/usr/bin/ssh "$@"

请注意,您始终要引用"$@"

相关内容