スペースなしで出力文字列から変数名を区切ります。

スペースなしで出力文字列から変数名を区切ります。

私が望むコードスニペットは次のとおりです。

ループを5回繰り返します。
各反復で次の行を取得する必要があります。その
行をファイルの
先頭に追加します。
ping;いくつかの文を印刷し、ユーザーにコードの進行状況を通知します。

繰り返しが効果がありました。
sed部分をスキップすると、すべてがうまく機能しますが、同じターゲットに対してpingを5回実行します。
host.txt ファイルの各行には、ping する IP アドレスがあります。

for ((i>=1;i<=5;i++))  
do  
sed -n "$i p" hosts.txt | read output  
    touch "$output.txt"  
    date >> "$output.txt"  
    printf "\nComeçando o teste de $output."  
    printf "\nTeste em andamento."  
    ping -c 10 -i 1 "$output" >> "$output.txt"  
done  

問題は、sed構文に問題があることです。 bashを直接試してみると、sed -n 1p hosts最初の行が表示されます。しかし、数値が$ iでなければならないので、pの前に$ iを入れると、bashは変数iとそれに引数pを追加する代わりにipを変数として解釈します。

どうすればこの動作を修正し、もはや問題を引き起こすことはできませんか?

ベストアンサー1

私はあなたがbashを使用していると仮定しているので、これはうまくいきます:

for ((i=1;i<=5;i++))  
do  
    sed -n "$i p" hosts.txt | (
        read output  
        touch "$output.txt"  
        date >> "$output.txt"  
        printf "\nComeçando o teste de $output."  
        printf "\nTeste em andamento."  
        ping -c 10 -i 1 "$output" >> "$output.txt"  
    )
done 

問題は、bashほとんどの外部シェルインタプリタと同様に、kshすべてのパイプコンポーネントがサブシェルに配置されるため、output変数が設定されるとすぐに失われることです。

また、変数が初期化されていないため、未定義 forの動作が発生したループを修正しました。i

おすすめ記事