通过 ssh 包含 .bash_profile

通过 ssh 包含 .bash_profile

我正在尝试编写一个脚本来:

  1. 将文件复制到服务器(我已经有一个copy.sh执行此任务的脚本)
  2. ssh 到该服务器
  3. cd 到我刚刚复制的文件所在目录
  4. 跑步make
  5. 将生成的二进制文件复制make到另一个位置。

我的脚本如下所示:

#!/usr/bin/bash
BUILDSERV=me@server
BUILDDIR=/me/directory

#run my script that copies the files
./copy.sh

#TARGET is also a var in copy.sh so I make sure it's set properly here
TARGET=root@final_dest:/usr/bin/my_bin

ssh $BUILDSERV "cd $BUILDDIR && make && scp ./my_bin $TARGET"

问题是我想要运行的程序不在make我的PATH.我的.bash_profile有一行export PATH=$PATH:/my/bin/,但当我 ssh 登录时似乎bash_profile没有被读取。

有没有办法改变我的 ssh 调用或脚本以使其读取我的.bash_profile

答案1

以下应该有效:

ssh $BUILDSERV "source ~/.bash_profile && cd $BUILDDIR && make && scp ./my_bin $TARGET"

shellsource内置函数读取文件并在同一 shell 中执行命令(与简单地调用脚本不同,脚本会调用单独的 shell)。

当作为登录 shell 调用时,如果存在,则以与执行完全相同的方式bash执行,因此效果将相同。.bash_profilesource

相关内容