~./bashrc 执行后通过 ssh 更改远程计算机的目录

~./bashrc 执行后通过 ssh 更改远程计算机的目录

我正在尝试通过 ssh 在远程计算机上运行脚本。为此,我想更改目录并从那里运行脚本。我发现执行此操作的标准方法是:

ssh -Y -t user@server 'cd dir; exec bash'

然而,问题是,在运行我的脚本之前,我需要设置一些进一步的 scipts,我在 ~./bashrc 中执行这些操作。我的问题是,命令的编写方式是在执行 ~./bashrc 之前发生目录更改,即搞乱了我之前需要设置的代码。注意:将命令更改为

ssh -Y -t user@server 'exec bash; cd dir'

正常执行 bash,但之后不会更改目录。提前致谢。

答案1

我的问题是,命令的编写方式是在执行 ~./bashrc 之前发生目录更改

更有可能的是~/.bashrc根本没有人阅读。 Bash 仅~/.bashrc在被调用时才读取交互的(非登录)外壳。当您在命令行上发出要运行的命令时ssh,它会使用该选项执行 shell -c,这使其成为非交互式。

但您可以通过手动采购来解决这个问题.bashrc

ssh -t user@server '. ~/.bashrc; cd dir; exec bash'

某些bashrc文件会检查 shell 是否是交互式的,并且仅在是交互式的情况下才进行更改。(这听起来没有必要,因为bashrc只能从交互式 shell 中读取,但由于 Bash 的启动文件的工作方式,bashrc通常也来源于.bash_profile或等效文件。)

要解决这个问题,您需要强制交互调用 Bash,如下所示:

ssh -t user@server 'bash -ic "cd /tmp; exec bash"'

.bashrc现在不需要手动采购,因为-iBash 可以自己完成。这第二Bash(来自exec bash)也可以这样做,所以如果这是一个问题,请将最后一部分替换为exec bash --norc.

...

将相关设置拆分到不同的文件(例如,)可能是个好主意.thingy.rc。然后从.bashrc(如果需要)和 SSH 命令而不是.bashrc.

答案2

怎么样一个这里文档,如下所示:

ssh user@server << EOF exec bash       
cd dir
EOF

相关内容