繁体   English   中英

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

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

我正在家里安装了NFS的不同机器上工作。 如果我正在处理的计算机负载过多,我想轻松切换到另一台计算机。

我经常在工作的外壳中修改环境,而当我切换到另一台机器时,我想找到相同的修改过的环境(相对于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添加到您的~/.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_CONTROLSESSION_MANAGERDBUS_SESSION_BUS_ADDRESS ...(这些变量来自Ubuntu 12.04)。 这些变量应从~/.env-dump.txt文件中删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM