Bash

在標準輸出中的輸出之前插入命令行文本(用於管道/重定向)

  • April 6, 2019

考慮以下bash結構:

ls /usr/include/asm > list-redir.txt
ls /usr/include/asm | tee list-tee.txt

在這種情況下,list-redir.txtlist-tee.txt將是相同的,並且將包含預期的文件列表;例如

$ head -5 list-redir.txt
a.out.h
auxvec.h
bitsperlong.h
boot.h
bootparam.h [...]

我的問題是 - 我如何編寫這樣的命令,並將命令行文本作為標準輸出中的第一件事插入 - 這樣文件最終以命令行開頭?例如,list-redir.txt在這種情況下,該文件將如下所示:

$ head -5 list-redir.txt
# ls /usr/include/asm
a.out.h
auxvec.h
bitsperlong.h
boot.h [...]

…這也意味著字元 # 可以添加到插入的命令行之前。

有什麼我可以用來做這個的ls /usr/include/asm > list-redir.txt嗎?

一個簡單(和醜陋)的黑客將其添加到您的~/.bashrc

echorun(){
   echo "# $@";
   "$@"
}

然後你會執行你的命令

echorun ls /usr > list-redir.txt

這不會讓你區分ls /usr >fools /usr | tee foo但它會附加# ls /usrfoo.

你可以這樣做:

{   cmd="ls /usr/include/asm"
   echo "$cmd" ; $cmd
} >./list-redir.txt

至少我認為這是你想要做的。這將產生如下結果:

$ cat <./list-redir.txt

###OUTPUT###

  ls /usr/include/asm
#output of above command#
  ...

引用自:https://unix.stackexchange.com/questions/138762