Como usar meus aliases no meu crontab?

13

Eu tenho alguns comandos no meu .profile que eu quero invocar do meu crontab .

Por exemplo, se eu tiver,

alias notify-me="~/bin/notify.pl -u user1"
alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...."

Gostaria de invocar o alias

0 11 * * * notify-team

, portanto, se a lista no meu .profile for atualizada, não preciso atualizar também o crontab . No entanto, parece que não consigo usar aliases no meu crontab . Existe algum trabalho?

Eu tentei as sugestões aqui para configurar o ambiente (por exemplo, / bin / bash -lc e o script script -wrapper). Parece que funciona para scripts, mas não para aliases.

Alguma idéia?

    
por Keith Bentrup 04.03.2010 / 19:31

6 respostas

8

A partir da página de manual sobre aliases:

Note aliases are not expanded by default in  non-interactive  shell,
and  it  can  be  enabled  by  setting  the 'expand_aliases'
shell option using shopt.

Portanto, tente usar shopt -s expand_aliases no início de seu script de sourcing. Isso deve permitir que você use a sugestão da Warner.

    
por 04.03.2010 / 21:39
6

bash -c com "source" deve funcionar:

0 11 * * * bash -c "source .profile && notify-team"

isso também pode funcionar. o período significa "fonte"

0 11 * * * . .profile && notify-team
    
por 03.06.2013 / 20:47
2

Como Chris identificou, a opção de shell padrão para shells não interativos é não expandir os aliases. Aqui está uma solução que encontrei para trabalhar.

Escreva um script, ative a opção shell e forneça seus aliases. Esteja particularmente ciente de que .bashrc é originado na execução, e é por isso que ele precisa ser originado novamente depois de ativar o expand_aliases.

Minhas desculpas pela recomendação inicialmente incorreta. Isso foi mais obscuro do que eu inicialmente esperava que fosse.

Script:

#!/bin/bash
shopt -s expand_aliases
source /home/wmoore/.bashrc
notify-team
    
por 04.03.2010 / 19:44
1

Eu gosto da idéia do artifex de pegar o alias do arquivo e reutilizá-lo, já que não consegui encontrar uma maneira de expandir / reutilizar aliases diretamente. (Outras soluções ainda exigiam outro script).

Então escrevi essa função e a coloquei no meu .profile:

grab-alias () { sed -n '/alias\s*'$1'\s*=/ {s/[^'\'']*.//;s/'\''\s*$//p}' /home/bentrupk/.profile; }

Então eu pude usá-lo no meu crontab para vários apelidos como este:

0 11 * * * /bin/bash -lc 'x='grab-alias notify-team'; $x'
0 7 * * * /bin/bash -lc 'x='grab-alias notify-me'; $x'

etc.

Yay, reutilização de código! Obrigado, tudo.

    
por 06.03.2010 / 05:20
1

Realmente, a coisa mais simples que você poderia fazer seria criar

~ / bin / notify-me com

#!/bin/sh
~/bin/notify.pl -u user1

~ / bin / notify-team com

#!/bin/sh
~/bin/notify.pl -u user1 user2 user3 user4 ....

aliases de shell são complicados de manter e de integrar em outros sistemas, como você viu. A melhor coisa a fazer é transformá-los em comandos completos que não tenham problemas com o ambiente engraçado.

    
por 06.03.2010 / 06:43
-2
0 11 * * * bash -ic "notify-team" > /log/file

funciona para mim

    
por 04.11.2016 / 10:31