Você tem duas opções: pode passar um programa para executar com alguns argumentos ou pode passar um script de shell. Ambos os conceitos podem ser chamados de "um comando".
Um programa com alguns argumentos assume a forma de uma lista de strings, a primeira das quais é o caminho para um arquivo executável (ou um nome que não contenha nenhuma barra, para ser consultado no lista de diretórios indicados pela variável de ambiente PATH
). Isso tem a vantagem de que o usuário pode passar argumentos para esse comando sem se preocupar em citar; o usuário pode invocar um shell explicitamente ( sh -c …
se quiser). Se você escolher isto, passe cada string (o programa e seu argumento) como um argumento separado para o seu script. Estes seriam tipicamente os últimos argumentos para o seu script (se você quer ser capaz de passar mais argumentos, você precisa designar uma string especial como um marcador de argumentos de fim de programa, o qual você não pode passar para o programa a menos que você torne a sintaxe ainda mais complicada).
0 11 * * * my_wrapper.sh "task_name" command arg1 arg2 arg3 ...
e no seu script:
#!/bin/zsh
task_name=$1
shift
"$@"
Um script de shell é uma string que você passa para o programa sh
para execução. Isso permite ao usuário escrever qualquer fragmento de shell sem ter que invocar explicitamente um shell, e é mais simples de analisar, já que é uma única string, portanto, um único argumento para o seu programa. Em um script sh
, você poderia chamar eval
, mas não faça isso em zsh, porque os usuários não esperariam ter que escrever a sintaxe zsh que é um pouco diferente da sintaxe sh.
0 11 * * * my_wrapper.sh "task_name" "command arg1 arg2 arg3 ..."
e no seu script:
#!/bin/zsh
task_name=$1
sh -c "$2"