![在 iterm2 中 ssh 后触发 echo 命令](https://linux22.com/image/1475247/%E5%9C%A8%20iterm2%20%E4%B8%AD%20ssh%20%E5%90%8E%E8%A7%A6%E5%8F%91%20echo%20%E5%91%BD%E4%BB%A4.png)
我尝试在“ssh somehost”之后触发以下命令:
export PROMPT_COMMAND='echo -ne "\033]0;$HOSTNAME\007"'
好像没有什么作用,有什么建议吗?
答案1
我认为这是不可能的。
首先,我必须重写你的命令;尽管由于你希望获得的东西无法实现这一事实(见下文)而导致这一点无效,但这样做的方法很有趣且具有普遍性,因此我将对其进行讨论。我不得不将你的命令更改为
ssh me@remote 'COLOR=("echo" "-ne" "\"\\033[48;5;95;38;5;214m\$HOSTNAME\033[0m\""); export PROMPT_COMMAND=${COLOR[@]}'
原因是需要防止本地 shell 替换$HOSTANME
其local
值,因此我们传递给远程服务器的内容必须用单引号括起来'。要使此方法有效,必须有不传递的命令中不能出现单引号,因此我必须重写它,使得远程执行的命令中不出现单引号。我设法用数组做到这一点。COLOR
命令
COLOR=("echo" "-ne" "\"\\033[48;5;95;38;5;214m\$HOSTNAME\033[0m\"") export PROMPT_COMMAND=${COLOR[@]}
在本地运行良好(颜色由我选择)。
有两种方法可以通过 ssh 导出环境变量。第一种方法是更改AcceptEnv
服务器/etc/ssh/sshd_config
文件中的变量:但是手册状态
接受环境
指定客户端发送的哪些环境变量将被复制到会话的环境。
这里的重点是会议:没有全局变化。
第二种方法是通过PermitUserEnvironment
变量:
许可证用户环境
Specifies whether ~/.ssh/environment and environment= options in ~/.ssh/authorized_keys are processed by sshd. The default is "no". Enabling environment processing may enable users to bypass access restrictions in some configurations using mechanisms such as LD_PRELOAD.
ssh
正如你所看到的,不是允许远程用户更改全局环境变量。