相关背景:
重定向标准输出
command > file
command 1> file
重定向标准错误
command 2> file
将标准输出和标准错误重定向到单独的文件
command 2> error.txt 1> output.txt
将标准输出和标准错误重定向到同一文件
command > file 2>&1
command &> file # bash only?
# For all I know, all the examples are bash-only, but the article called it out explicitly on this line
警告:以下示例重定向仅有的标准输出到文件。发生这种情况是因为在 stdout 重定向到文件之前 stderr 被重定向到 stdout
command 2>&1 > file # incorrect!
问题:
在我看来,这些符号完全是任意的,因此很难记住。我知道如何别名命令,但是有没有办法给这些符号起别名,让它们更容易记住呢?像这样的东西:
将标准输出和标准错误重定向到同一文件
command redirectStandardOutputAndError file
甚至更好:
command >outerr file
如果这适用于 zsh 和 bash,那就加分了,但我 bash 是唯一的要求。
答案1
您不能在 bash 中使用别名来执行此操作,它们不够强大。但是您可以使用函数,这可能会对您有所帮助。
这种方法确实需要您以不同的方式考虑重定向。您首先声明重定向,然后声明命令,因此如果您想保存ls -l
in的输出,/tmp/dir_listing
您可以键入save_in /tmp/dir_listing ls -l
save_in(){ # save stdout in file
"${@:2}" > "$1"
}
save_all(){ # save both stdout and stderr in file
"${@:2}" > "$1" 2>&1
}
save_each(){ # save stdout and stderr in different files
"${@:3}" > "$1" 2>"$2"
}
save_base(){ # save stdout and stderr into different file, just give base
"${@:2}" > "$1.out" 2>"$1.err"
}
困难在于想出令人难忘的合理名称。