Экранирование команд в ssh-соединении через цикл for - PullRequest
0 голосов
/ 19 февраля 2019
#!/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, он проверяет, есть ли файлы webp без jpg / png в качестве исходного файла;и echo rm "filename".

Команда:

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 голосов
/ 19 февраля 2019

Попробуйте использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...