對一個參數執行兩個命令(無需腳本)

對一個參數執行兩個命令(無需腳本)

如何在一個輸入上執行兩個命令,而無需輸入兩次該輸入?

例如,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

使用eslambda:

@{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

這適用於bashzsh。這也適用於mkshdash但僅在互動時有效。在 AT&T ksh 中,僅當file "$_"與 位於不同線路時才有效stat

答案4

這個答案與其他幾個答案類似:

統計數據檔案名稱  && 文件!

與其他答案不同,其他答案會自動重複最後的來自上一個指令的參數,這個指令需要您計算:

LS-LD檔案名稱  && 文件!

與其他一些答案不同,這不需要引號:

stat "useless cat"  &&  file !#:1

或者

echo Sometimes a '$cigar' is just a !#:3.

相關內容