【发布时间】:2021-08-12 22:47:08
【问题描述】:
我正在尝试将我输入的命令及其各自的输出保存在一个文件中。
我目前在做什么:
mylog() {
echo "----------------" >> ${PWD}/cmds.log
echo "$@" >> ${PWD}/cmds.log
# read foo # Tried reading the piped value in to
# echo "$foo" >> ${PWD}/cmds.log
# MYCMD="${@}"
# echo "$MYCMD" >> ${PWD}/cmds.log
"$@" | tee -a ${PWD}/cmds.log
}
它目前的功能类似于:mylog cat file.txt | mylog sortcmds.log 中的输出是:
----------------
cat file.txt
----------------
sort
....
output from cat
...
output from sort
...
我想要的是:
----------------
cat file.txt
....
output from cat
...
----------------
sort
...
output from sort
...
在代码中,您可以看到我尝试使用 read 并遵循here 描述的其他方法。
我也尝试过VAR=${@},但这只是保存了两次命令并没有执行它。
知道如何实现我的目标吗?
有点相关,我像这样手动保存终端输出,而不是使用script,因为交互式外壳会导致很多转义字符等被捕获。
【问题讨论】:
-
如果你想去掉交互式提示,将
PS1设置为''是否有效?顺便说一句,输出是这样的,因为管道中的所有片段都是并行运行的,而不是顺序运行的。 -
@dibery 我的 shell 的类型完成会导致建议输出的每个变体,所以 PS1='' 没有帮助。我怎样才能按顺序运行它们?
标签: bash