あなただけgrep
からの出力を待っている間にスクリプトがまだ実行されていることのステータスを取得したい場合は、それはあなたが獲得に干渉しないようにstderr
にプログレスメーターを表示しますpv
などの既存のツールを使用することができます出力。
あなたは、たとえば、
get_monitor() {
printf ' ' >&2 # to put a first char there to backspace the spinner over
while read -r line; do
if [[ $line =~ monitor ]]; then
printf '%s\n' "$line"
fi
update_spinner
done < <(airmon-ng start wlan0 2>/dev/null)
}
sp_ind=0
sp_chars='/-\|'
sp_num=${#sp_chars}
update_spinner() {
printf '\b%s' "${sp_chars:sp_ind++%sp_num:1}" >&2
}
iface=$(get_monitor)
か、あなたのバックグラウンドにしている可能性などの各ラインを私は想像pv
ソリューションよりも遅くなり関数を書くことができますが、あなたは後にスピナーを更新できるようになる、という失敗コマンドの一時ファイルへの書き込みなどをした後
airmon-ng start wlan2 2>/dev/null >/tmp/airmon_out &
# your spinner stuff
iface=$(cat /tmp/airmon_out)
を答えを得るか、おそらくあなたも、それ以上のように、多くのものがファイルを操作する方法を知っている変数にそれを必要としないでしょう
これをバックグラウンドに置くと、コマンドが終了する前に 'iface'にどのような価値があると思いますか? –
'airmon-ng start wlan0'を実行すると、結果として多くの行が生成されます。テキスト "monitor"を持つ1行だけをgrepしたいと思います。この例は私が必要とするものの縮小例です。もちろん、より複雑で、私はその行でregexpsを使ってインタフェースの正確な名前を取得しますが、関係はありません。ここでの問題は、行をvarに入れて、同時にすべてをバックグラウンドで実行して$でPIDを取得することです! 。興味を持っていただきありがとうございます! – OscarAkaElvis
私はあなたがしていることを集めていると思いますが、出力を変数に代入しようとしていて、 'iface'に格納する前に出力が終了するのを待っていないのであれば、 'airmon-ng'の前に' iface'が終了しました。 'airmon-ng'が終了する前にどのような価値があると思いますか?あなたはバックグラウンドでそれをする必要があるので、このスーパーは遅いですか? –