Execute o comando na substituição do comando:
output=$( find -name '*.wsdl' )
echo "$output"
A saída agora é armazenada na variável output
, que você pode usar quantas vezes quiser.
Cenário simples: estou procurando por um arquivo wsdl
perdido no meio de um projeto.
$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl
Agora que eu sei onde está, quero fazer algo com esse arquivo, por exemplo, edite-o. Em vez de copiar / colar o caminho por trás do meu comando, é possível usar o caminho retornado por find
anterior? Assim como é possível acessar o último argumento que você digitou com !$
ou seu último comando com !!
.
Eu li que era possível com $?
, mas só me retorna um erro: 0: command not found
$ echo $?
0: command not found
Execute o comando na substituição do comando:
output=$( find -name '*.wsdl' )
echo "$output"
A saída agora é armazenada na variável output
, que você pode usar quantas vezes quiser.
Não há uma variável especial para isso.
$?
contém o código de saída do último comando (0 = sucesso, > 0 = código de erro)
Você pode usar a saída de find
com o sinalizador -exec
, desta forma:
find -name '*.wsdl' -exec emacs {} \;
O {}
é substituído pelo nome do arquivo encontrado por find
. Isso executaria o comando para cada arquivo encontrado. Se você quiser executar um comando com todos os arquivos encontrados como argumentos, use um +
no final como este:
find -name '*.wsdl' -exec emacs {} +
Isso abriria uma instância do emacs com todos os arquivos .wsdl encontrados nela abertos.
Uma solução mais geral é armazenar a saída em uma variável:
result=$(find -name '*.wsdl')
emacs $result
Isso funciona com todos os comandos, não apenas com o find. Embora você também possa usar xargs
:
find -name '*.wsdl' | xargs emacs {}
Aqui está um hack rápido que deve fazer o que você quiser com o mínimo de pressionamentos de tecla, se você não se importa que o último comando seja executado duas vezes.
Use o backtick, ala:
'!!'
por exemplo,
$ find . -name HardToFind.txt some/crazy/path/to/HardToFind.txt $ vim '!!'
* edit: Eu vejo que a pergunta "possivelmente enganada" acima também contém esta resposta. ainda relevante diretamente para este, então deixando-o, mas desculpe pelo dupe.
Tags bash