我将我的环境设置为.profile. 我的.profile是幂等的,,,.bash_profile所有的源码。这样,无论我使用哪种 bourne 兼容 shell,也无论 shell 是交互式 shell 还是登录 shell,我总是获得相同的环境。.bashrc.kshrc.zshrc.profile
这也适用于非交互式ssh(1)使用,尽管我不确定到底为什么。
iridium:aram$ ssh sunos.mgk.ro 'env|grep ^PATH'
PATH=.:/home/aram/bin:/home/aram/bin/sunos:/home/aram/bin/sunos/amd64:/home/aram/bin/sunos/386:/home/aram/go/bin:/opt/local/bin:/opt/local/sbin:/usr/gnu/bin:/usr/bin:/sbin:/usr/sbin:/usr/sfw/bin:/usr/local/bin:/usr/local/sbin:/home/aram/plan9/bin
iridium:aram$ ssh iridium 'env|grep ^PATH'
PATH=.:/Users/aram/bin:/Users/aram/bin/darwin:/Users/aram/bin/darwin/amd64:/Users/aram/bin/darwin/386:/Users/aram/go/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/pkg/bin:/usr/pkg/sbin:/usr/local/plan9/bin
iridium:aram$ ssh crimson 'env|grep ^PATH'
PATH=.:/home/aram/bin:/home/aram/bin/linux:/home/aram/bin/linux/amd64:/home/aram/bin/linux/386:/bin:/usr/bin:/sbin:/usr/sbin:/usr/games:/usr/local/bin:/usr/local/sbin
Run Code Online (Sandbox Code Playgroud)
然而,在少数系统上,这不起作用。
iridium:aram$ ssh ci20 'env|grep ^PATH'
PATH=/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)
我一直在努力使这项工作成功,但没有成功。我努力了:
这些没有任何效果,无论 PAM 设置如何,似乎 /etc/environment 都根本不会被读取。
请不要建议我应该强制 bash 在 ssh 调用中进行交互,或者我应该在 ssh 调用中手动获取环境,我正在尝试解决这里的根本问题。
在尝试调试这个问题时,我学到了一些关于 bash 的知识。如果标准输入是套接字,那么 bash 似乎总是会获取 …