我想在bash脚本中执行的操作是,如果我的本地计算机中不存在给定文件,则从远程计算机scp它并相应地打印消息。我看过很多相关的帖子都找不到解决方案。
这很方便,我试过但它似乎不适用于&&。
cmd=(echo "hello world")
这是我的命令:
RESULTS_FILE="$TESTCASE_DIR"/"$FILENAME"_"$i".csv
SCP_CMD="scp -2 ${HOST}:${REMOTE_TESTCASE_DIR}/${FILENAME}.csv ${RESULTS_FILE} 2>&1"
if [ ! -f ${RESULTS_FILE} ] && [ eval $SCP_CMD ] ; then
echo "Successfully scped the file";
else
echo "SCP failed"
fi
此操作失败,错误为[: eval: unary operator expected
。
反引号也不起作用。
答案 0 :(得分:1)
[ ]
用于测试条件。在您的情况下,您不需要在eval
方面测试条件,您只需要在eval
的左半部分的真实返回时执行&&
(文件没有不存在。。
因此,这就像从[]
表达式中删除eval
一样简单。
RESULTS_FILE="$TESTCASE_DIR"/"$FILENAME"_"$i".csv
SCP_CMD="scp -2 ${HOST}:${REMOTE_TESTCASE_DIR}/${FILENAME}.csv ${RESULTS_FILE} 2>&1"
if [ ! -f ${RESULTS_FILE} ] && eval $SCP_CMD; then
echo "Successfully scped the file";
else
echo "SCP failed"
fi
你应该能够在没有eval
的情况下做到这一点。只需直接插入命令即可在相同条件下执行(非现有文件)。
RESULTS_FILE="$TESTCASE_DIR"/"$FILENAME"_"$i".csv
if [ ! -f ${RESULTS_FILE} ] && scp -2 "${HOST}:${REMOTE_TESTCASE_DIR}/${FILENAME}.csv" ${RESULTS_FILE} 2>&1; then
echo "Successfully scped the file";
else
echo "SCP failed"
fi
答案 1 :(得分:1)
您可以使用rsync实用程序
将本地计算机上的文件与远程同步rsync -avz ${HOST}:${REMOTE_TESTCASE_DIR} ${TESTCASE_DIR}
rsync执行的示例
$ rsync -avz Directory1/ Directory2/
sending incremental file list
./
file1.txt
file2.txt
sent 264 bytes received 53 bytes 634.00 bytes/sec
total size is 94 speedup is 0.30