我的服务器上的 .bashrc 文件相对简单,但它有这个块以确保它在登录时自动连接到 tmux:
echo Checking for tmux
if [ -z ${TMUX} ]
then
/usr/bin/tmux attach || /usr/bin/tmux
fi
这通常工作正常,但当我尝试 scp 到该服务器时,它不起作用。当我 scp 后跟“没有会话;不是终端”时,我在本地终端上看到“正在检查 tmux”消息。为了解决这个问题,我尝试将上面的测试更改为
if [ -z ${TMUX} ] && [ -t 0 ]
这消除了“没有会话;不是终端”错误,但文件只是默默地不复制。如果我完全注释掉上面的内容,副本就可以正常工作,所以显然问题出在于此,但我不确定如果它未能通过上述测试,为什么它会影响任何事情。怎么了?
答案1
您不应该在非交互式 shell 中打印任何内容。典型的代码片段.bashrc
是:
[[ $- != *i* ]] && return
在开始时,它会跳过非交互式 shell 的所有文件。
您应该在 前面使用此检查echo
,例如:
[ -t 0 ] && return
echo Checking for tmux
因为echo
编辑文本会破坏scp
协议。