次のスクリプトを作成しようとしています。
copy.sh
サーバーにファイルをコピーする(これを実行するスクリプトはすでにあります)- サーバーへのSSH接続
- コピーしたばかりのファイルがあるディレクトリに移動します。
- 走る
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"
シェルsource
組み込み機能は、同じシェルからファイルを読み取り、コマンドを実行します(単に別々のシェルを呼び出すスクリプトを呼び出すのとは対照的です)。
ログインシェルで呼び出されると、実行されたのとbash
まったく同じ方法で実行されるため(存在する場合)、効果は同じです。.bash_profile
source