gpt4 book ai didi

bash - 将 bash 中的命令输出解析为变量

转载 作者:行者123 更新时间:2023-11-29 09:48:42 29 4
gpt4 key购买 nike

我有很多 bash 脚本,每个脚本都在愉快地做自己的事情。请注意,虽然我使用其他语言进行编程,但我只使用 Bash 来自动化操作,而且并不擅长。

我现在正尝试将它们中的一些结合起来创建“元”脚本,如果您愿意的话,它使用其他脚本作为步骤。问题是我需要解析每个步骤的输出,以便能够将其中的一部分作为参数传递给下一步。

一个例子:

stepA.sh

[...does stuff here...]
echo "Task complete successfuly"
echo "Files available at: $d1/$1"
echo "Logs available at: $d2/$1"

以上都是路径,例如/var/www/thisisatest 和/var/log/thisisatest (注意文件总是以/var/www 开头,日志总是以/var/log 开头)。我只对文件路径感兴趣。

steB.sh

[...does stuff here...]
echo "Creation of $d1 complete."
echo "Access with username $usr and password $pass"

这里的所有变量都是简单的字符串,可能包含特殊字符(没有空格)

我要构建的是一个运行 stepA.sh 的脚本,然后运行 ​​stepB.sh 并使用每个脚本的输出来执行自己的操作。我目前正在做什么(以上两个脚本都符号链接(symbolic link)到/usr/local/bin 而没有 .sh 部分并使其可执行):

 #!/bin/bash

stepA $1 | while read -r line; do
# Create the container, and grab the file location
# then pass it to then next pipe
if [[ "$line" == *:* ]]
then
POS=`expr index "$line" "/"`
PTH="/${line:$POS}"
if [[ "$PTH" == *www* ]]
then
#OK, have what I need here, now what?
echo $PTH;
fi
fi
done

# Somehow get $PTH here

stepB $1 | while read -r line; do
...
done

#somehow have the required strings here

我无法将 PTH 传递到下一步。我知道这是因为管道在子 shell 中运行它,但是我看到的所有示例都指的是文件而不是命令,我无法让它工作。我尝试将 echo 传送到“下一步”,例如

stepA | while ...
echo $PTH
done | while ...
#Got my var here, but cannot run stuff
done

如何运行 stepA 并让 PTH 变量供以后使用?是否有比嵌套的 if 更“更好的方式”从输出中提取我需要的路径?

提前致谢!

最佳答案

由于您显式地使用 bash(在 shebang 行中),您可以使用它的进程替换功能而不是管道:

while read -r line; do
if [[ "$line" == *:* ]]
.....
fi
done < <(stepA $1)

或者,您可以将命令的输出捕获到一个字符串变量,然后对其进行解析:

output="$(stepA $1)"
tmp="${output#*$'\nFiles available at: '}" # output with everything before the filepath trimmed
filepath="${tmp%%$'\n'*}" # trim the first newline and everything after it from $tmp
tmp="${output#*$'\nLogs available at: '}"
logpath="${tmp%%$'\n'*}"

关于bash - 将 bash 中的命令输出解析为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15309818/

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