我正在通过SSH在远程计算机上运行bash脚本。
ssh -T $DBHOST2 'bash -s' < $DIR/script.sh <arguments>
在脚本中,我使用源文件来定义脚本script.sh
中使用的函数。
DIR=`dirname $0` # to get the location where the script is located
echo "Directory is $DIR"
. $DIR/source.bashrc # source file
但由于远程计算机中不存在源文件,因此会导致错误。
Directory is .
./source.bashrc: No such file or directory
我总是可以定义函数和主脚本,而不是使用源文件,但我想知道有没有办法使用单独的源文件。
编辑:源文件和脚本都不在远程计算机中。
答案 0 :(得分:1)
以下是这方面的方法 - 两者都只需要一个ssh
会话。
tar
将脚本复制到服务器tar cf - $DIR/script.sh $DIR/source.bashrc | ssh $DBHOST2 "tar xf -; bash $DIR/script.sh <arguments>"
将您的脚本“复制”到$DBHOST2
并在那里执行。
bashpp
将所有代码包含在一个脚本中如果无法将文件复制到$DBHOST2
,请使用bashpp
。
将.
来电替换为#include
,然后通过bashpp
运行:
bashpp $DIR/script.sh | ssh $DBHOST2 bash -s
答案 1 :(得分:0)
ssh -T $DBHOST2 'bash -s' <<< $(cat source_file $DIR/script.sh)
答案 2 :(得分:0)
以下是我想要做的事情。
1.将源文件复制到远程计算机。
scp $DIR/source.bashrc $DBHOST2:./
2。Execute the local script with arguments on the remote machine via SSH
ssh $DBHOST2 "bash -s" -- < $DIR/script.sh <arguments>
3。将远程日志文件logfile.log
复制到本地文件dbhost2.log
并从远程计算机中删除源文件和日志文件
ssh $DBHOST2 "cat logfile.log; rm -f source.bashrc logfile.log" > dbhost.log