我正在不同的机器上工作,我的家安装了 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_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 $1 -t 'bash -l'
即可。
警告
printenv
的输出包含一些与机器相关的变量,例如 GNOME_KEYRING_CONTROL
、SESSION_MANAGER
、DBUS_SESSION_BUS_ADDRESS
...(这些变量来自 Ubuntu 12.04)。应从 ~/.env-dump.txt
文件中删除这些变量。
关于linux - 在获取 .bashrc 后,如何在使用 ssh 登录时在远程执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191806/