gpt4 book ai didi

Bash:如何在命令上调用或修改变量的内容?

转载 作者:行者123 更新时间:2023-12-04 09:04:37 27 4
gpt4 key购买 nike

关于这个问题的公认答案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 为菜鸟/业余主义道歉!

最佳答案

我认为您正在寻找的是 shell 内置 eval :

$ 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}

关于Bash:如何在命令上调用或修改变量的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63477514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com