私のサーバー上の.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
非対話型シェルでは何も印刷しないでください。一般的なコードスニペットは次の.bashrc
とおりです。
[[ $- != *i* ]] && return
最初は、非対話型シェルのすべてのファイルをスキップします。
たとえば、次のように事前に確認する必要がありますecho
。
[ -t 0 ] && return
echo Checking for tmux
echo
テキストを編集するとscp
契約が壊れる可能性があるためです。