Como fazer o eco de uma linha de bash para arquivo sem executar?

0

Atualmente, estou tentando escrever um script bash de outro script bash. Eu faço o seguinte:

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

O problema é que o echo não apenas grava no arquivo, mas executa parte do loop for. Então, o conteúdo do arquivo se torna algo como o seguinte.

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

Em vez de:

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

Como faço para empurrar esse loop para um arquivo sem executar parte dele?

Obrigado!

Atenciosamente

    
por expired 05.01.2017 / 11:51

1 resposta

1

Você precisa escapar de todos os símbolos especiais. O símbolo $ é especial porque representa um nome de variável ou um bloco de código dentro dos parênteses. Então, se você executá-lo, o bash tentará executá-lo primeiro no script que contém o código de escrita e, em seguida, escrever o resultado em seu arquivo ( /home/file.sh ).

Para escapar de um símbolo, use o símbolo \ . Por exemplo:

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