A página de manual do bash indica o seguinte para a -c
opção:
-c Se a opção -c estiver presente, os comandos serão lidos a partir do primeiro argumento sem opção command_string. Se houver argumentos após command_string, o primeiro argumento será atribuído a $0 e quaisquer argumentos restantes serão atribuídos aos parâmetros posicionais. A atribuição para $0 define o nome do shell, que é usado em mensagens de aviso e erro.
Do exposto, eu esperaria que o código abaixo fosse equivalente em sua saída:
# or possibly (`bash -c date date +%z`)
$ bash -c date +%z
Wed Oct 18 10:02:47 PM UTC 2023
$ date +%z
+0000
# The first command gives the output of `date` without the format specifier.
No entanto, meu bash (GNU bash, versão 5.2.15) nunca parece avaliar parâmetros posicionais adicionais da linha de comando. Tudo após o primeiro argumento após a -c
opção é descartado silenciosamente. Talvez eu esteja entendendo mal a página de manual.
Como eu passaria vários argumentos para um bash -c
comando como palavras (vetor arg nos bastidores) em vez de uma string ( bash -c "date +%z"
)? Isso é possível?
Contexto
Meu objetivo ao fazer esta pergunta é entender como o bash espera que os parâmetros de comando sejam passados para alimentá-los corretamente no bash por meio de uma execve()
família de funções de outro programa (um shell wrapper).