在 .bashrc 采购之后,如何在使用 ssh 登录时在远程执行命令?

How to execute a command on the remote at login with ssh, after .bashrc sourcing?

我在家里安装了 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 =""/' > $HOME/.env-dump.txt
ssh  -t 'source $HOME/.env-dump.txt; bash -l'

将以下行添加到您的 ~/.bash_profile

[ -f "$HOME/.bashrc" ] && . $HOME/bashrc
[ -f "$HOME/.env-dump.txt" ] && source $HOME/.env-dump.txt

并使用行

创建一个~/.bash_logout文件
[ -f "$HOME/.env-dump.txt" ] && rm  $HOME/.env-dump.txt

现在您只需在脚本的最后一行调用 ssh -t 'bash -l'

警告

printenv 的输出包含一些依赖于机器的变量,如 GNOME_KEYRING_CONTROLSESSION_MANAGERDBUS_SESSION_BUS_ADDRESS ...(这些变量形成 Ubuntu 12.04)。这些变量应该从 ~/.env-dump.txt 文件中删除。