通过for循环在ssh连接中转义命令

时间:2019-02-19 12:45:40

标签: bash ssh

#!/bin/bash
for x in ontwikkelkaart
do
    echo "***";
    echo ${x};

    ssh ${x}@localhost "
        find ~/public_html/wp-content/themes/ -type f -name "*.webp" | awk '{ gsub(".webp$", "") ; print $0 }' | xargs -i sh -c 'if [ ! -f "{}" ]; then echo {}.webp; fi' \;
    "
done

我有上面的脚本通过SSH连接到服务器,它检查是否有没有jpg / png的webp文件作为源文件;并回显rm的“文件名”。

命令:

find ~/public_html/wp-content/themes/ -type f -name "*.webp" | awk '{ gsub(".webp$", "") ; print $0 }' | xargs -i sh -c 'if [ ! -f "{}" ]; then echo {}.webp; fi' \;

当我在服务器的命令行上(通过SSH)运行它时,它可以工作,但是当我尝试在for循环中运行它时,由于“”而无法正常工作。

有人(试图)解释为什么上面的代码不起作用吗?

1 个答案:

答案 0 :(得分:1)

尝试使用heredoc:

ssh -q -T ${x}@localhost 2> /dev/null <<'EOF'
find ~/public_html/wp-content/themes/ -type f -name "*.webp" | awk '{ gsub(".webp$", "") ; print $0 }' | xargs -i sh -c 'if [ ! -f "{}" ]; then echo {}.webp; fi' \;
EOF