每次我通过neofetch登录到远程服务器时,我都想启动OpenSSH (一个显示横幅的小型实用程序)。因此,我刚刚将/usr/bin/neofetch添加到我的~/.ssh/rc文件中,它运行得很好。问题是,当我将~/.ssh/rc放到服务器上时,scp也会被解析。一个完整的scp命令工作得很好,但是当我尝试使用scp的自动完成功能时,当我输入以便它显示远程服务器上可用的文件/文件夹时,会出现一个问题,例如:
$ scp remote-host:/t
\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\"\\\"\\\"\\\
\\\ \\\$\\\$\\\:\\\ \\\ \\\ \\\ \\\ \\\ \\\$\\\$.\\\ \\\ \\\ ^[\\\[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 向我展示以/t开头的文件/文件夹(例如/tmp),但现在它执行neofetch横幅。
是否有一种方法来区分$ ssh和$ scp in ~/.ssh/rc (只有当我将ssh放入服务器时才启动neofetch,而不是当我将D17放入服务器时才启动D16)?
注意:我不希望每次启动bash或每次启动登录shell时都启动新获取,因此将其放在/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; fiLC_SCP之前设置一个$ scp环境变量:$ export LC_SCP=yes
$ scp -o SendEnv=LC_SCP remote-host:/t
(works, doesn't launch neofetch)起作用了,但它是坎伯曼。难道没有更好的方法来区分ssh和scp会话在~/.ssh/rc中吗?
发布于 2021-07-06 19:42:36
环境变量SSH_TTY似乎只在sshing时设置,而不是在scping时设置。因此,以下几点就足够了(至少在我的测试中):
if [ -n "$SSH_TTY" ]; then /usr/bin/neofetch; fi(关于它的价值,我通过查看env | grep -i ssh的输出猜到了这一点。)
https://unix.stackexchange.com/questions/657250
复制相似问题