我正在尝试编写一个脚本来:
- 将文件复制到服务器(我已经有一个
copy.sh
执行此任务的脚本) - ssh 到该服务器
- cd 到我刚刚复制的文件所在目录
- 跑步
make
- 将生成的二进制文件复制
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_profile
source