.png)
入力を 2 回入力せずに、1 つの入力で 2 つのコマンドを実行するにはどうすればよいですか?
たとえば、stat コマンドはファイルについて多くの情報を提供しますが、ファイルの種類は示しません。
stat fileName
file コマンドは、ファイルの種類を示します。
file fileName
これを 1 行で実行するには、次のようにします。
stat fileName ; file fileName
ただし、fileName を 2 回入力する必要があります。
両方のコマンドを同じ入力で実行するにはどうすればよいですか (入力または入力の変数を 2 回入力せずに)?
Linux では、出力をパイプする方法はわかっていますが、入力をパイプするにはどうすればよいでしょうか?
答え1
おそらくこれでは叱られることになるだろうが、bash の括弧展開と eval を組み合わせたハッキーな方法がうまくいくようだ。
eval {stat,file}" fileName;"
答え2
を使用するとzsh
、匿名関数を使用できます。
(){stat $1; file $1} filename
ラムダを使用する場合es
:
@{stat $1; file $1} filename
次のようなこともできます:
{ stat -; file -;} < filename
(stat
最初に実行するとfile
アクセス時間が更新されます)。
私ならこうします:
f=filename; stat "$f"; file "$f"
ただし、変数はそのためにあるのです。
答え3
別の方法は次のとおりです。
$ stat filename && file "$_"
例:
$ 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
bash
これはおよびで動作しますzsh
。これは および でも動作しますがmksh
、対話型の場合のみです。AT&T ksh では、 がとは異なる行にあるdash
場合にのみ動作します。file "$_"
stat
答え4
この回答は他のいくつかの回答と似ています:
統計ファイル名 && ファイル !#:1
他の回答では自動的に同じ答えが繰り返されるが、最後前のコマンドの引数とは異なり、このコマンドでは次の数を数える必要があります。
ls -ldファイル名 && ファイル !#:2
他の回答とは異なり、引用符は必要ありません。
stat "useless cat" && file !#:1
または
echo Sometimes a '$cigar' is just a !#:3.