Comando Bash e ordem das opções

0

Quando eu emito:

bash -l -c "./test"

a subshell é de fato executada como um shell de login, mas em um caso:

bash -c "./test1" -l

o shell pai (o shell que estou executando o comando) parece ignorar a opção -l e o subshell não é executado como um shell de login.

Se eu estiver certo, o motivo é que a ordem das opções para o comando bash é relevante e, nesse caso, a opção -l deve estar antes de -c . Estou certo?

    
por Mulligan 06.07.2017 / 12:20

2 respostas

0

Sim, você está certo. De man bash :

-c string
If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.

Isso significa que bash -c 'echo $0' -l retorna -l .

    
por 06.07.2017 / 13:08
0

A convenção nos comandos Unix é que os nomes dos arquivos vêm por último (porque muitos comandos podem ter um número quase ilimitado de nomes de arquivos). Em outras palavras, a primeira coisa que não se parece com uma flag / opção é interpretada como um nome de arquivo [1] e assim é tudo o que se segue.

[1] Se você usar um arquivo que comece com um traço, poderá desambiguá-lo de duas maneiras:

  • usando ./-foo em vez de -foo : rm ./-foobar
  • usando um '-' no final das opções true, pois muitos comandos interpretam isso como o fim das opções e o início dos nomes dos arquivos: rm -- -foobar . Boas práticas de codificação de script recomendam o uso do -- "fence" em comandos em que os nomes dos arquivos não são predeterminados.
por 06.07.2017 / 13:32