我使用 debootstrap 安装了 debian(debootstrap --arch=amd64 stretch /targethttp://httpredir.debian.org/debian)。当我检查我的 PATH 变量时,我得到:
ssh git@srv 'echo $PATH'
/usr/bin:/bin
我如何扩展它并包括例如 /usr/local/bin?
/etc/密码:
git:x:108:112:git version control,,,:/home/git:/bin/sh
我已经尝试了以下方法,但没有成功,因为这些文件只能由交互式 shell 读取。谢谢您的建议。
echo 'export PATH="/usr/a1:$PATH"' >> /etc/profile
echo 'PATH="/usr/a2:$PATH"' >> /etc/environment
echo 'export PATH="/usr/a3:$PATH"' >> /home/git/.profile
chown git:git /home/git/.profile
echo 'export PATH="/usr/a4:$PATH"' >> /home/git/.bashrc
chown git:git /home/git/.bashrc
echo 'PATH="/usr/a5:$PATH"' >> /home/git/.ssh/rc
chown git:git /home/git/.ssh/rc
echo 'export PATH="/usr/a6:$PATH"' >> /home/git/.ssh/environment
chown git:git /home/git/.ssh/environment
答案1
像这样的 SSH 命令不受登录或交互环境变量的影响。
这个问题与这里提出的问题类似: https://unix.stackexchange.com/questions/332532/how-to-set-path-when-running-a-ssh-command
尝试这样做:
echo "export PATH=$PATH:/usr/local/bin" >> ~/.ssh/environment
答案2
您可以在远程主机上的登录 shell 中执行命令,这将处理您的 shell 配置文件(例如~/.profile
等):
ssh user@host 'exec $SHELL -l -c "echo $PATH; commmand; another-command"'
根据您要执行的操作,可能需要告知ssh
创建一个伪tty:
ssh user@host -t 'exec $SHELL -l -c "command-that-needs-tty"'