如果通过 `ssh user@server myscript` 调用,执行 shell init stuff

Execute shell init stuff if called via `ssh user@server myscript`

我想在通过 ssh user@server myscript

调用 myscript 之前执行 shell init stuff

我试过了:

# .bash_profile
echo DDDDDDDDDDDDDDDDDDDDDdddd

这可以交互工作:

ssh user@server
DDDDDDDDDDDDDD

user@host> 

但不是这样的(DDDDD...不见了)

ssh user@server date
Thu 01 Jul 2021 09:01:11 AM CEST

如何在通过 ssh 调用 myscript 之前执行初始化操作?

如果您想在 运行 date 命令之前获取初始化脚本,您可以执行

ssh user@server 'bash -c ". /path/to/init.sh; date"'

其中 /path/to/init.sh 是所需初始化脚本的路径。

例如,如果您想获取 user.bash_profile,您可以执行

ssh user@server 'bash -c ". ~/.bash_profile; date"'

如果你想在 server 上作为登录名 shell 执行 bash 你可以

ssh user@server 'bash -l -c "date"'

我找到了解决办法。

首先它不起作用,因为我在 .bashrc.

end 添加了“echo DDDDDDDDD”

如果我将它添加到 .bashrctop 处,它会起作用。

现在我的 shell 行得到执行:

ssh user@server date
DDDDDDDDD
Fri 02 Jul 2021 08:40:38 AM CEST

.bashrc 中的这些行(在 Ubuntu 中似乎是默认的)是造成混淆的原因:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac