linux - 在获取 .bashrc 后,如何在使用 ssh 登录时在远程执行命令?

标签 linux bash ssh environment-variables

我正在不同的机器上工作,我的家安装了 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_CONTROLSESSION_MANAGERDBUS_SESSION_BUS_ADDRESS ...(这些变量来自 Ubuntu 12.04)。应从 ~/.env-dump.txt 文件中删除这些变量。

关于linux - 在获取 .bashrc 后,如何在使用 ssh 登录时在远程执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191806/

相关文章:

java - 甘力美 API : SFTP using

linux - 在 jenkins gerrit 触发器中添加 ssh key 文件 : "/...../.ssh/id_rsa" does not exist

linux - fanotify获取文件名,为什么是/proc/self/fd/"data->fd"?

c - 如何设置 cron 作业以每小时运行一次可执行文件?

linux - 在bash中将数字分成等份

bash - 如何使用 Bash "read"命令进行安全读取?

java - 连接被拒绝,如何解决?

c++ - Bash 自动完成选项而不运行应用程序

bash - 为什么我的 shell 脚本在第二次尝试时失败?

ssh - ufw防火墙意外激活后如何恢复对亚马逊EC2实例的ssh访问