在 .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_CONTROL
、SESSION_MANAGER
、DBUS_SESSION_BUS_ADDRESS
...(这些变量形成 Ubuntu 12.04)。这些变量应该从 ~/.env-dump.txt
文件中删除。
我在家里安装了 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_CONTROL
、SESSION_MANAGER
、DBUS_SESSION_BUS_ADDRESS
...(这些变量形成 Ubuntu 12.04)。这些变量应该从 ~/.env-dump.txt
文件中删除。