我想运行远程 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) Sun 的 snoop 命令提供了 -a 选项,因此您可以“侦听”音频设备上的数据包。是否有任何 Linux 数据包嗅探工具提供等效功能?