我有许多 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
使用每个脚本的输出来做自己的事情。我目前正在做什么(以上两个脚本都符号链接到 /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
的 s ?
提前致谢!