.png)
Como posso executar dois comandos em uma entrada, sem digitar essa entrada duas vezes?
Por exemplo, o comando stat diz muito sobre um arquivo, mas não indica seu tipo:
stat fileName
O comando file informa que tipo de arquivo é:
file fileName
Você pode fazer isso em uma linha desta maneira:
stat fileName ; file fileName
No entanto, você deve digitar o fileName duas vezes.
Como você pode executar os dois comandos na mesma entrada (sem digitar a entrada ou uma variável da entrada duas vezes)?
No Linux, eu sei como canalizar saídas, mas como canalizar entradas?
Responder1
Provavelmente vou levar uma pancada nos nós dos dedos por isso, aqui está uma combinação hackeada de expansão e avaliação do bash brace que parece funcionar
eval {stat,file}" fileName;"
Responder2
Com zsh
, você pode usar funções anônimas:
(){stat $1; file $1} filename
Com es
lambdas:
@{stat $1; file $1} filename
Você também pode fazer:
{ stat -; file -;} < filename
(fazer o stat
primeiro file
irá atualizar o tempo de acesso).
Eu faria:
f=filename; stat "$f"; file "$f"
porém, é para isso que servem as variáveis.
Responder3
Aqui está outra maneira:
$ stat filename && file "$_"
Exemplo:
$ stat /usr/bin/yum && file "$_"
File: ‘/usr/bin/yum’
Size: 801 Blocks: 8 IO Block: 4096 regular file
Device: 804h/2052d Inode: 1189124 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:rpm_exec_t:s0
Access: 2014-06-11 22:55:53.783586098 +0700
Modify: 2014-05-22 16:49:35.000000000 +0700
Change: 2014-06-11 19:15:30.047017844 +0700
Birth: -
/usr/bin/yum: Python script, ASCII text executable
Isso funciona em bash
e zsh
. Isso também funciona mksh
e dash
apenas quando interativo. Na AT&T ksh, isso só funciona quando file "$_"
está em uma linha diferente daquela stat
.
Responder4
Esta resposta é semelhante a algumas outras:
Estadonome do arquivo && arquivo !#:1
Ao contrário das outras respostas, que repetem automaticamente odurarargumento do comando anterior, este requer que você conte:
ls -ldnome do arquivo && arquivo !#:2
Ao contrário de algumas das outras respostas, isso não requer aspas:
stat "useless cat" && file !#:1
ou
echo Sometimes a '$cigar' is just a !#:3.