Есть ли инструмент или хитрость, чтобы помочь с цитированием безумия?

При выполнении обслуживания сервера я часто пишу многоуровневые вложенные команды, например:

for server in A B C; do sh -c "ssh $server 'mysql db -e \"select where line like \\\"%abc%\\\"\"'&"; done

Это может быть надуманным примером, но на самом деле это то, что мне иногда приходится делать для какой-то странной, специальной задачи.

Проблема в кавычках. По мере того, как вы переходите на более глубокие уровни, вы должны начать избегать кавычек, избегать знаков доллара и избегать выхода. Использование одинарных кавычек помогает избежать одного уровня, но это все.

Я начал работать над решением для себя, вдохновленный функцией qq () в perl, но я решил сначала спросить: есть ли инструмент, метод или инфраструктура, которые облегчат написание этих вложенных команд не увязнув в обратном слэше?

0
задан 2 January 2014 в 10:23

2 ответа

Вы можете избежать большинства уровней цитирования, передавая команды mysql через stdin вместо argv:

for server in A B C; do
    ssh "$server" 'mysql db' <<< "select * from foo where line like '%abc%';" &
done
wait

Более общий ответ см. В http://mywiki.wooledge.org. / BashFAQ / 096

0
ответ дан 2 January 2014 в 10:23

Попробуйте это:

echo "ssh $server 'mysql db....'" | sh

Это снижает уровень вложенности, а также делает его намного проще для вас, потому что вы можете просто запустить команду echo, пока не получите точную команду, которую вы хотите запустить после всех побегов.

0
ответ дан 2 January 2014 в 10:23

Другие вопросы по тегам:

Похожие вопросы: