我的脚本正在执行以下行:
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*`
现在,问题是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"