私はいくつかの bash スクリプトを持っており、それぞれが独自のことを楽しく行っています。私は他の言語でプログラミングしていますが、自動化には 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
。私が現在行っていること (上記の両方のスクリプトは、.sh
一部なしで /usr/local/bin にシンボリックリンクされ、実行可能になっています):
#!/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
次のステップに進むのに行き詰まっています。これは、パイピングがサブシェルで実行されるためだと理解していますが、私が見たすべての例はコマンドではなくファイルを参照しており、これを機能させることができませんでした。echo
次のような「次のステップ」にパイプしてみました
stepA | while ...
echo $PTH
done | while ...
#Got my var here, but cannot run stuff
done
変数を実行stepA
して、後で使用できるようにするにはどうすればよいですか? PTH
ネストされた s よりも出力から必要なパスを抽出する「より良い方法」はありif
ますか?
前もって感謝します!