Comando em uma variável [duplicada]

0

Estou tentando executar uma instrução em que o nome do comando está em uma variável. Por exemplo:

my_command='/path/to/some/command'

$my_command -f foo -b bar -s something else 

Mas o acima não funciona. Eu recebo erros que sugerem que o shell está tentando interpretar meus argumentos como comandos.

Como posso fazer isso no Bash e no Zsh?

    
por Amelio Vazquez-Reina 09.04.2013 / 02:09

2 respostas

2

Para armazenar um comando, você pode usar uma função:

Em qualquer shell parecido com o Bourne, mas bash :

mycommand() /path/to/some/command some fixed args "$@"
mycommand other args

Em bash , você precisa de chaves:

mycommand() { /path/to/some/command some fixed args "$@";}

(essas chaves não doem em outras camadas, então é melhor usá-las quando precisar ser portável)

Se você é um viciado em csh , também pode usar um alias .

Você pode usar uma variável como em:

mycommand=/path/to/some/command

mas lembre-se de que em cada shell, mas zsh , é necessário citar a expansão:

"$mycommand" its args

Se você quiser armazenar o comando e mais do que o 0º argumento, poderá usar arrays em shells que os suportam ( bash e zsh do)

mycommand=(/path/to/some/command some fixed args)
"${mycommand[@]}" some other args

Em zsh você pode se safar com

$mycommand some other args

contanto que nenhum dos fixos args estejam vazios.

    
por 09.04.2013 / 08:51
2

Estas linhas abaixo funcionaram para mim sob o bash:

mycommand=/usr/bin/find
$mycommand -type d

seu problema pode ser originado de "/ path / to / some / command" e o que ele faz ou tenta fazer. Sem ver a coisa real, é difícil dizer.

    
por 09.04.2013 / 02:56

Tags