
如何在一個輸入上執行兩個命令,而無需輸入兩次該輸入?
例如,stat 命令講述了有關文件的許多信息,但不指示其文件類型:
stat fileName
file 指令告訴文件是什麼類型:
file fileName
您可以透過以下方式在一行中執行此操作:
stat fileName ; file fileName
但是,您必須輸入檔案名稱兩次。
如何在同一輸入上執行這兩個命令(無需輸入兩次輸入或輸入的變數)?
在 Linux 中,我知道如何透過管道傳輸輸出,但是如何透過管道傳輸輸入呢?
答案1
可能會為此感到緊張,這是 bash 大括號擴展和 eval 的巧妙組合,似乎可以解決問題
eval {stat,file}" fileName;"
答案2
通過zsh
,您可以使用匿名函數:
(){stat $1; file $1} filename
使用es
lambda:
@{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
和dash
但僅在互動時有效。在 AT&T ksh 中,僅當file "$_"
與 位於不同線路時才有效stat
。
答案4
這個答案與其他幾個答案類似:
統計數據檔案名稱 && 文件!
與其他答案不同,其他答案會自動重複最後的來自上一個指令的參數,這個指令需要您計算:
LS-LD檔案名稱 && 文件!
與其他一些答案不同,這不需要引號:
stat "useless cat" && file !#:1
或者
echo Sometimes a '$cigar' is just a !#:3.