Linux 如何在使用ssh登录时,在.bashrc之后在远程服务器上执行命令?

Linux 如何在使用ssh登录时,在.bashrc之后在远程服务器上执行命令?,linux,bash,ssh,environment-variables,Linux,Bash,Ssh,Environment Variables,我在安装NFS的不同机器上工作。如果我正在使用的机器负载过大,我想轻松地切换到另一台机器 我经常在我正在使用的shell中修改我的环境,并且我希望在切换到另一台机器时,能够找到与bashrc环境相同的修改。我尝试了以下脚本,但它不起作用,因为.bashrc源代码在source$HOME/.env-dump.txt之后 在使用ssh登录到计算机时,是否有一种干净的方法来执行某些命令,就像您在登录后在提示符下键入命令一样 #!/usr/bin/env sh if [[ $# != 1 ]];

我在安装NFS的不同机器上工作。如果我正在使用的机器负载过大,我想轻松地切换到另一台机器

我经常在我正在使用的shell中修改我的环境,并且我希望在切换到另一台机器时,能够找到与bashrc环境相同的修改。我尝试了以下脚本,但它不起作用,因为.bashrc源代码在source$HOME/.env-dump.txt之后

在使用ssh登录到计算机时,是否有一种干净的方法来执行某些命令,就像您在登录后在提示符下键入命令一样

#!/usr/bin/env sh

if [[ $# != 1 ]]; 
    echo 'sssh USAGE:'
    echo '  sssh remotename'
    exit 1
fi

printenv | sed -e '/_=.*/ d;s/\([^=]\+\)=\(.*\)/export \1="\2"/' > $HOME/.env-dump.txt
ssh $1 -t 'source $HOME/.env-dump.txt; bash -l'

将以下行添加到~/.bash_配置文件中

并创建一个~/.bash_注销文件

[ -f "$HOME/.env-dump.txt" ] && rm  $HOME/.env-dump.txt
现在,您只需在脚本的最后一行调用ssh$1-t'bash-l'

警告


printenv的输出包含一些依赖于机器的变量,如GNOME\u KEYRING\u CONTROL、SESSION\u MANAGER、DBUS\u SESSION\u BUS\u ADDRESS。。。这些变量构成了Ubuntu 12.04。这些变量应该从~/.env-dump.txt文件中删除。

答案是使用正确的初始化文件来执行您试图执行的操作。对于非交互式登录shell中需要的内容,请不要使用.bashrc,而是使用.bash\u配置文件。
[ -f "$HOME/.env-dump.txt" ] && rm  $HOME/.env-dump.txt