问题描述
关于这个问题here的可接受答案(将STDOUT重定向到新窗口,将STDERR重定向到相同的新窗口,并且还是一个日志文件),我有一个使用此脚本的bash脚本诸如此类的输出处理很多(感谢@ hek2mgl!)。不是在所有命令上,而是在需要更改输出的命令上。例如,要将测试消息发送到新窗口和日志文件以及相应的错误处理,效果很好(同样,如另一线程所讨论):
printf "Test.\n" 1> >(tee -a backup_log-task${currentTask}.txt >> /dev/pts/$windowID) 2> >(tee -a backup_log-task${currentTask}.txt backup_log-task${currentTask}-errors.txt >> /dev/pts/$windowID)
但是。与其复制/粘贴该行以在bash脚本中所需的位置反复处理输出,没有一种方法可以将所需的输出设置为变量,然后在需要的地方将其调用到某些命令上? >
因此,为说明起见,将所需的输出设置放入:$outputHandling
,如下所示:
$outputHandling="1> >(tee -a backup_log-task${currentTask}.txt >> /dev/pts/$windowID) 2> >(tee -a backup_log-task${currentTask}.txt backup_log-task${currentTask}-errors.txt >> /dev/pts/$windowID)"
这非常接近我用极其有限的知识(例如,不起作用,因为它正在打印变量)非常刻薄地尝试替换之后,但是希望显示出我正在尝试做什么?
#!/bin/bash
currentTask=1
windowID=0
outputHandling="1> >(tee -a backup_log-task${currentTask}.txt >> /dev/pts/$windowID) 2> >(tee -a backup_log-task${currentTask}.txt backup_log-task${currentTask}-errors.txt >> /dev/pts/$windowID)"
# we want to run: printf "Test.\n" 1> >(tee -a backup_log-task${currentTask}.txt >> /dev/pts/$windowID) 2> >(tee -a backup_log-task${currentTask}.txt backup_log-task${currentTask}-errors.txt >> /dev/pts/$windowID)
printf "Test.\n" ${outputHandling}
PS致歉,反对/业余爱好!
解决方法
我认为您正在寻找的是内置eval
的shell:
$ eval --help
eval: eval [arg ...]
Execute arguments as a shell command.
Combine ARGs into a single string,use the result as input to the shell,and execute the resulting commands.
Exit Status:
Returns exit status of command or success if command is null.
尝试将eval
命令放在要获得问题描述效果的行的开头:
#!/bin/bash
currentTask=1
windowID=1
outputHandling="1> >(tee -a backup_log-task${currentTask}.txt >> /dev/pts/$windowID) 2> >(tee -a backup_log-task${currentTask}.txt backup_log-task${currentTask}-errors.txt >> /dev/pts/$windowID)"
# we want to run: printf "Test.\n" 1> >(tee -a backup_log-task${currentTask}.txt >> /dev/pts/$windowID) 2> >(tee -a backup_log-task${currentTask}.txt backup_log-task${currentTask}-errors.txt >> /dev/pts/$windowID)
eval printf "Test.\\n" ${outputHandling}