如何在Unix中同时写入文件并打印到终端?

bia*_*ias 2 unix bash terminal file-io macports

我有一个小的bash函数来将我的Macports输出记录到一个文件中(因为安装经常会发出一些很容易在终端噪音中丢失的花絮),然后我只是把文件传到终端:

function porti {
    command sudo port install $@ >> $1.log 2>&1; cat $1.log
}
Run Code Online (Sandbox Code Playgroud)

有没有办法同时做到这一点?

顺便说一句,我传递$ @来安装,但文件名只需1美元,这样我就可以这样做:

porti git-gore +bash_completion
Run Code Online (Sandbox Code Playgroud)

并且只获取文件git-core.log但是其他人可能更喜欢在文件名中包含变体...

Chr*_*odd 8

通常的解决方案是使用tee(1):

sudo port install $@ 2>&1 | tee -a $1.log
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事