В настоящее время я пытаюсь написать сценарий bash из другого сценария bash. Я делаю следующее:

touch /home/file.sh
echo "#!/bin/bash" >> /home/file.sh
echo "for line in $(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser $line; done >> /home/file.sh

Проблема в том, что echo не только записывает в файл, но и выполняет часть цикла for. Таким образом, содержимое файла становится примерно таким:

#!/bin/bash
for line in guest-rbrars; do sudo deluser ; done

Вместо:

#!/bin/bash
for line in $(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser $line; done >> /var/log/cron 2>&1

Как получить цикл for в файл, не выполняя его часть?

Спасибо!

С наилучшими пожеланиями

1 ответ1

1

Вам нужно убежать от всех специальных символов. Символ $ является особенным, потому что он представляет имя переменной или блок кода внутри скобок. Поэтому, если вы запустите его, bash попытается запустить его сначала в сценарии, который содержит код записи, а затем записать результат в ваш файл (/home/file.sh).

Чтобы выйти из символа, используйте символ \ . Например:

echo "for line in \$(grep -o 'guest-......' /etc/passwd | sort -u); do sudo deluser \$line; done" >> /home/file.sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .