Quero que o crontab root
seja agnóstico, ou seja, não quero especificar literalmente nele que o usuário administrador é jim
. É por isso que no meu crontab root
introduzi a variável au
.
SHELL=/bin/bash
PATH=/usr/bin:/bin:/usr/sbin:/sbin
au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')
5 */4 * * * /home/"${au}"/sync-w-oumaima.sh
* * * * * echo "$au">"/home/${au}/${au}.log"
Infelizmente, não funciona - /home/jim/jim.log
não é criado pelo crontab. Como declaro e uso uma variável no crontab que conterá o nome da conta do usuário administrador?
O
crontab
formato permite definir variáveis de ambiente, mas não realiza nenhuma substituição. No seu exemplo, aau
variável é definida como string$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')
.A solução mais simples é definir explicitamente o usuário no seu crontab:
Outra solução seria escrever um script simples que defina a
au
variável e executar o comando “real” e executar esse script no seu crontab:Uma terceira solução seria usar o
eval
shell embutido para fazer seu shell reinterpretar o conteúdo daau
variável, com algo como:Mas você teria que ter muito cuidado com a fuga necessária (certamente não tomei cuidado).
Primeiro, melhore o comando para localizar o
au
(usuário administrador).Você pode usá-lo em seu crontab
Quando você precisa rolar para ver seu comando, ele é muito longo. Quando você tiver mais linhas semelhantes, tudo ficará uma bagunça. Por que não criar
/usr/local/bin/get_admin_user
:Em seguida, coloque este arquivo em seu crontab