Como passar um argumento de um script bash para 'x-terminal-emulator -e bash -c'?

1

Digamos que eu tenha este script:

x-terminal-emulator -e bash -c 'echo hello > ~/text'

Eu chamo isso de foo.sh e faço isso ser executável.

Se eu executar este script, terei um arquivo de texto na minha pasta pessoal contendo a palavra 'olá'.

Agora, se eu modificá-lo para isso:

x-terminal-emulator -e bash -c 'echo $1 > ~/text'

... e eu executo em um terminal assim:

./foo.sh hello

Eu recebo um arquivo de texto na minha pasta pessoal que não contém nada.

foo.sh recebe 'olá' como o primeiro e único argumento ($ 1). Então por que o bash não recebe? Existe uma maneira de passar um ou vários argumentos de foo.sh para bash?

Eu tentei armazenar o argumento dentro de um nome de variável e depois exportá-lo, mas ele não alterou o resultado.

    
por saginaw 30.07.2015 / 17:39

2 respostas

2

De man bash


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

Então você pode fazer

x-terminal-emulator -e bash -c 'echo $0 > ~/text' "$1"

ou (se você preferir preservar a numeração "usual" de parâmetros)

x-terminal-emulator -e bash -c 'echo $1 > ~/text' _ "$1"

onde _ pode ser substituído por qualquer variável fictícia de sua escolha.

    
por 30.07.2015 / 17:50
1

Em bash -c 'echo $1 > ~/text' , $1 foi expandido em bash -c process, não no seu script. Você precisa passar o original $1 para bash -c :

x-terminal-emulator -e "bash -c 'echo \ > ~/text' bash $1"
    
por 30.07.2015 / 17:48