我想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,也不想每次启动登录 shell 时都启动 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
环境变量SSH_TTY
好像只有在ssh
ing时设置,而不是在scp
ing时设置。所以以下内容就足够了(至少在我的测试中):
if [ -n "$SSH_TTY" ]; then /usr/bin/neofetch; fi
(对于它的价值,我通过查看 的输出来猜测这一点env | grep -i ssh
。)