在任何 sh shell 启动之前,我需要执行一些重要的命令。这是在 SSH 命令 ( ssh host somecommand) 和其他运行命令的程序中传递 SSH 命令所必需的。
在我的.profile我有这个:
ihammerhands@wreckcreations:~> cat .profile
#specific environment and startup programs
export PS1="\u@wreckcreations:\w> "
export PYTHONPATH=~/python/lib/python2.4/site-packages
export PATH=$PATH:~/bin:~/python/bin
Run Code Online (Sandbox Code Playgroud)
但是,这失败了:
W:\programming\wreckcreations-site\test-hg>ssh name@host echo $PATH
Enter passphrase for key '/home/Owner/.ssh/id_rsa':
/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
注意缺少的 PATH 选项
sh 配置文件的正确名称是什么?注意:我没有 root 访问权限,也不希望将其应用于其他用户。有没有另一种方法可以做到这一点?
编辑:它似乎/bin/sh链接到bash,这并不奇怪。令人惊讶的是,我的个人资料仍然被忽略。有什么建议?
我想通过 ssh 使用命令:
ssh myuser@myhost mycommand
Run Code Online (Sandbox Code Playgroud)
但这样做我总是得到:
sh: mycommand: command not found
Run Code Online (Sandbox Code Playgroud)
使用以下显然有效:
ssh myuser@myhost /usr/local/bin/mycommand
Run Code Online (Sandbox Code Playgroud)
我明白为什么:这是因为该命令以某种方式在非登录 shell 上执行。
在我的 ssh 命令中使用完整命令或任何其他参数在我的场景中不是一个选项。我的命令是由我无法触及的脚本执行的,并且除了这个之外,还可以在每个主机上运行。
给我带来问题的主机是 Synology NAS,该myuser的 /etc/passwd 设置是:
myuser:x:1048:100::/var/services/homes/myuser:/bin/sh
Run Code Online (Sandbox Code Playgroud)
再次:
我可以:
我不能不想要:
我知道如何将 GNOME 终端(或 xterms!)关于最后一个退出代码的提示设置为绿色/红色:
vi .bashrc
export PROMPT_COMMAND='PS1="`
if [[ \$? = "0" ]];
then echo "\\[\\033[0;32m\\]";
else echo "\\[\\033[0;31m\\]";
fi`[\u@\h \w]\[\e[m\] "'
export PS1
Run Code Online (Sandbox Code Playgroud)
图片中:

但是如果我登录到远程服务器,那么这些颜色设置就不起作用了!
我怎样才能将它设置为在远程终端上工作?不幸的是,我无法将上述行附加到远程服务器.bashrc。
我想运行远程 ssh 命令并让它们默认加载服务器端启动文件。我要寻找一个解决方案不要求:
我不希望将本地环境变量传输到远程 shell。我想使用 vanillassh <host> <command>语法运行远程命令,并让它使用与远程登录会话相同的环境运行。
以下假设bash用于简单起见
默认情况下,远程 ssh 命令启动一个非交互式、非登录的 shell。引用手册页:
如果指定了命令,它将在远程主机上执行,而不是在登录 shell 上执行。
您可以通过运行在 shell 上更明确地看到这一点:
# the lack of 'i' indicates non-interactive
$ ssh localhost 'echo $-'
hBc
$ ssh localhost 'shopt login_shell'
login_shell off
Run Code Online (Sandbox Code Playgroud)
但是如果您的远程命令需要设置某些环境变量怎么办?作为一个非交互式、非登录的 shell 意味着既 .bash_profile不会也.bashrc不会被采购。
这是有问题的,例如,如果您使用perlbrew或virtualenv等工具并希望在远程命令中使用自定义解释器:
$ which perl
/home/calid/perl5/perlbrew/perls/perl-5.20.1/bin/perl
$ ssh localhost 'which perl'
/usr/bin/perl …Run Code Online (Sandbox Code Playgroud)