如何创建远程焦油(bash)



我的脚本正在执行以下行:

ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "gtar -zcvf $TAR_FILE `find $LOCAL_PATH -name *$DATE*`

现在,问题是find命令正在本地计算机上执行,我需要在远程计算机上执行它。

请帮忙,谢谢

使用

$() 而不是反引号 ' 并另外使用反斜杠对其进行转义以避免在本地机器上执行命令:

ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "gtar -zcvf $TAR_FILE $(find $LOCAL_PATH -name *$DATE*)"

制作一个脚本,将其复制到服务器并运行它。对于这么简单的事情,现在似乎毫无意义,但你以后可能会感谢我。

通过 SSH 执行命令时,需要转义任何不应在本地计算的特殊字符。转义反引号以在远程服务器上对其进行评估:

ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "gtar -zcvf $TAR_FILE `find $LOCAL_PATH -name *$DATE*`

假设$TAR_FILE$LOCAL_PATH$DATE是局部变量,否则也会转义它们。(它们需要作为环境变量存在于远程服务器上)

另类

正如@RobinGreen指出的那样:通常最好在远程服务器上制作脚本并通过SSH执行。

#!/bin/sh
# This is the remote script
# Use positional arguments $1 - $3 and make a tarball
gtar -zcvf $1 $(find $2) -name "*$3*"

这样称呼它

ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "/path/to/remote/script $TAR_FILE $LOCAL_PATH $DATE"

最新更新