Outra questão de escape da string Bash (usando echo)

0

Estou tentando usar essa linha em um script bash para atualizar meus trabalhos do cron:

(sudo crontab -l ; echo "0 6 1-7 * * [ $(/usr/bin/date +\%u) == 7 ] && sh $script_path > $log_path") | sort - | uniq - | sudo crontab -

Antes disso, $script_path e $log_path foram definidos. Eu sei que isso funciona em geral. Eu só tenho um desligar. $(/usr/bin/date +\%u) resolve uma string vazia quando o arquivo crontab é gravado. Eu preciso que o texto literal permaneça no lugar.

(Isso não importa, mas o objetivo é verificar o dia da semana. Este trabalho deve ser realizado no primeiro sábado do mês).

Como faço para "escapar" toda essa substring?

    
por BuvinJ 14.09.2017 / 18:37

2 respostas

1

Você pode escapar de cada caractere problemático com \ (veja a resposta de Hunter.S.Thompson) ou apenas usar aspas simples, sendo a string anexada escrita assim:

(sudo crontab -l ; echo '0 6 1-7 * * [ $(/usr/bin/date +\%u) == 7 ] && sh '"$script_path > $log_path") | sort -u | sudo crontab -

Eu pessoalmente tento evitar fugir de personagens, pois acho que isso prejudica a legibilidade.

    
por 14.09.2017 / 19:05
2

Você pode usar \ antes do cifrão para obter seu valor literal.

(sudo crontab -l ; echo "0 6 1-7 * * [ \$(/usr/bin/date +\%u) == 7 ] && sh $script_path > $log_path") | sort - | uniq - | sudo crontab -
    
por 14.09.2017 / 18:54