Bash
在標準輸出中的輸出之前插入命令行文本(用於管道/重定向)
考慮以下
bash
結構:ls /usr/include/asm > list-redir.txt ls /usr/include/asm | tee list-tee.txt
在這種情況下,
list-redir.txt
和list-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 >foo
和ls /usr | tee foo
但它會附加# ls /usr
到foo
.
你可以這樣做:
{ cmd="ls /usr/include/asm" echo "$cmd" ; $cmd } >./list-redir.txt
至少我認為這是你想要做的。這將產生如下結果:
$ cat <./list-redir.txt ###OUTPUT### ls /usr/include/asm #output of above command# ...