Como passar um comando de terminal como um argumento para outro comando

-1

Eu quero executar este comando:

ls -arth Test*log | tail -1

... e passa sua saída como um argumento para:

open /Applications/Utilities/Console.app <previous output>

Eu gostaria de fazer isso tudo em uma linha.

    
por Andrew Hoos 02.08.2013 / 23:33

2 respostas

4

Isso é conhecido como substituição de comando :

open /Applications/Utilities/Console.app "$(ls -arth Test*log | tail -1)"

Se tiver certeza de que a saída do comando que você está substituindo não conterá espaços ou novas linhas (ou se você quiser fornecer saída separada por espaço / nova linha como vários argumentos), poderá omitir as aspas:

open /Applications/Utilities/Console.app $(ls -arth Test*log | tail -1)
    
por 02.08.2013 / 23:43
1

Isso é simples o suficiente

open /Applications/Utilities/Console.app 'ls -arth Test*log | tail -1'

Qualquer comando incluído entre os acentos graves será executado em um novo ambiente bash, sairá após a execução e se substituirá pelo resultado

Se eu executar um comando "ls" simples com sotaques graves em minha pasta inicial, recebo um erro desse tipo:

john@ship:~$ 'ls'
Desktop: command not found

O que significa que o bash tenta executar o valor de retorno até o delimitador adequado como um comando

Aqui está mais um exemplo para esclarecer esta técnica hacky:

john@ship:~$ 'echo "ls -l"'
total 36
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Desktop
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Documents
drwxr-xr-x 2 john john 4096 Aug  2 22:04 Downloads
drwxr-xr-x 7 john john 4096 Aug  2 19:28 Music
drwxr-xr-x 2 john john 4096 Aug  2 10:49 Pictures
drwxrwxr-x 3 john john 4096 Jul 28 22:21 Projects
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Public
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Templates
drwxr-xr-x 2 john john 4096 Jul 27 19:43 Videos
    
por 03.08.2013 / 00:36