neofetch
OpenSSHを介してリモートサーバーにログインするたびに(バナーを表示する小さなユーティリティ)を起動したいと思います。だから私/usr/bin/neofetch
はファイルに追加しただけで~/.ssh/rc
正常に動作します。問題は、サーバーに行っても~/.ssh/rc
構文解析されることです。完全scp
なコマンドscp
はうまく機能しますが、オートコンプリート機能を使用しようとすると問題が発生します。scp
入力すると、<Tab><Tab>
リモートサーバーで利用可能なファイル/フォルダが表示されます。たとえば、次のようになります。
$ scp remote-host:/t <TAB><TAB>
\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\"\\\"\\\"\\\
\\\ \\\$\\\$\\\:\\\ \\\ \\\ \\\ \\\ \\\ \\\$\\\$.\\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m-^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\,d\\\$\\\$\\\'\\\
\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b.\\\
\\\ \\\,\\\$\\\$P\\\'\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$\\\$.\\\
\\\ \\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ d\\\$\\\'\\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\,^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\$\\\$P\\\
\\\'\\\,\\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\,ggs.\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b\\\:\\\
\\\ \\\$\\\$\\\;\\\ \\\ \\\ \\\ \\\ \\\ Y\\\$b._\\\ \\\ \\\ _\\\,d\\\$P\\\'\\\
^[\\\[0m^[\\\[1m\\\ \\\`\\\$\\\$b\\\ \\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\"-.__\\\
^[\\\[0m^[\\\[1m\\\ \\\ \\\`Y\\\$\\\$\\\
(...)
通常は(たとえば)で始まるファイル/フォルダを表示します$ scp remote-host:/t <TAB><TAB>
が、今ではバナーを表示します。/t
/tmp
neofetch
区別する方法はありますか$ ssh
(サーバーに入るときだけ起動し、サーバーに入るときは起動しません$ scp
)?~/.ssh/rc
neofetch
ssh
scp
注:私はbashを起動するたびにneofetchを起動したくないので、ログインシェルを起動するたびにneofetchを起動したくないので、それを入れたり減算する/etc/bash.bashrc
こと/etc/profile
はオプションではありません。 SSH接続後に始めたいです。
私はいくつかの調査をしていくつかを試しました。
からインスピレーションを受けるこの投稿、私は以下を試しました。
if [ -t 0 ]; then /usr/bin/neofetch; fi
そして
if tty > /dev/null; then /usr/bin/neofetch; fi
しかし、うまくいきません(
neofetch
一度も起動せず、それ以降も起動しません$ ssh
)。促すその投稿を通して
$-
また、対話型セッションと非対話型セッションを区別するために環境変数を使用してみましたが、~/.ssh/rc
bashではなくダッシュで解析したため、機能しませんでした(そして$-
bash変数でした)。
しかし、私はうまくいく解決策を見つけました(まあ、一種の…)。優れたこの記事を通して:
サーバーに
~/.ssh/rc
次のように入力します。if [ ! "$LC_SCP" = "yes" ]; then /usr/bin/neofetch; fi
クライアントでは、
LC_SCP
次のように環境変数を設定する必要があります$ scp
。
$ export LC_SCP=yes
$ scp -o SendEnv=LC_SCP remote-host:/t<TAB><TAB>
(works, doesn't launch neofetch)
うまくいきますが面倒です。とのセッションssh
を区別するためのより良い方法はありませんか?scp
~/.ssh/rc
ベストアンサー1
環境変数はing時SSH_TTY
のみに設定され、ing時には設定されないようです。したがって、次のもので十分です(少なくとも私のテストでは)。ssh
scp
if [ -n "$SSH_TTY" ]; then /usr/bin/neofetch; fi
(価値が何であるかは出力を見て推測しましたenv | grep -i ssh
。)