Eu uso o ambiente de servidor compartilhado CentOS com Bash.
ll "$HOME"/public_html/cron_daily/
traz:
./
../
-rwxr-xr-x 1 user group 181 Jul 11 11:32 wp_cli.sh*
Não sei por que o nome do arquivo tem um asterisco no final. Não me lembro de adicioná-lo e, quando tentei alterá-lo, obtive esta saída:
[~/public_html]# mv cron_daily/wp_cli.sh* cron_daily/wp_cli.sh
+ mv cron_daily/wp_cli.sh cron_daily/wp_cli.sh
mv: `cron_daily/wp_cli.sh' and `cron_daily/wp_cli.sh' are the same file
Este erro pode indicar por que meu cronjob do Cpanel falhou:
Fiz algo errado ao alterar o arquivo ou ao executar o comando Cpanel cron? Porque ambas as operações parecem falhar.
O asterisco não faz parte do nome do arquivo. Você está vendo porque o arquivo é executável e seu alias para
ll
inclui o-F
sinalizador:Como Kusalananda mencionou, você não pode glob todos os scripts em um diretório com cron assim. Com run-parts, você pode chamar
"$HOME"/public_html/cron_daily/
para executar todos os scripts no diretório (não apenas .sh) ou percorrê-los conforme mencionado neste post .Jesse_b já respondeu a pergunta, mas acho que vale a pena abordar alguns equívocos em potencial.
O shell possui caracteres que possuem significado especial sob algumas condições específicas. Por exemplo:
|
é usado em pipelines,>
em redirecionamentos,\
para caracteres de escape, etc. Esses caracteres não são interpretados literalmente pelo shell, por isso, quando você fizer issoecho foo>bar
,foo>bar
não será impresso no seu terminal, masfoo
será redirecionado para obar
arquivo .Felizmente, o shell também possui um mecanismo que faz com que esses caracteres percam seu significado especial: aspas. Em shells POSIX, existem 3 mecanismos de cotação :
\
: preserva o valor literal do caractere a seguir, com exceção de um<newline>
."..."
: preserva o valor literal de todos os caracteres entre aspas duplas, com exceção dos caracteres`
,$
e\
.'...'
: preserva o valor literal de cada caractere entre aspas simples, sem exceções.Então, seguindo o exemplo anterior, se quiséssemos imprimir
foo>bar
literalmente, poderíamos ter feito:echo foo\>bar
echo "foo>bar"
echo 'foo>bar'
O asterisco
*
é um desses caracteres especiais, faz parte da notação de correspondência de padrões e é usado para expansão de nome de arquivo . Em outras palavras, comandos comoecho *.txt
substituirão o padrão pelos arquivos aos quais o padrão corresponde.No seu caso,
cron_daily/wp_cli.sh*
apenas correspondecron_daily/wp_cli.sh
, entãomv
vê 2 argumentos idênticos e reclama disso. Isso é bom porque não há nenhumcron_daily/wp_cli.sh*
arquivo. Mas se você tivesse umcron_daily/wp_cli.sh*
arquivo real e mais arquivos que pudessem ser correspondidos pelo padrão,mv
teria falhado.Considere o seguinte cenário:
Se eu tentar renomear
file*
sem usar aspas:Isso porque esses são os argumentos que
mv
recebe, portantonew_file
espera-se que seja um diretório:Para renomear com sucesso
file*
, preciso citar esse argumento: