2016-07-28 2 views
1

私はdinamically別のbashスクリプトを生成するスクリプトを持っています。このヒアドキュメントスクリプトでカウンタを示す無限ループが(!これは動作します)があります:あなたはこれだけを置けばBash。カウンタと詳細を表示する無限ループ

date1=`date +%s` 
while true; do 
    echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r"; 
done 

このループは正常に動作しています。問題は私がカウンターだけでなく、詳細情報が必要です(一部の静的データ)。

#!/bin/bash 
dir="/tmp/" 
my_file="generatedscript.sh" 

rm -rf "$dir$my_file" > /dev/null 2>&1 

exec 3>"$dir$my_file" 

cat >&3 <<-'EOF' 
    #!/bin/bash 
    date1=`date +%s` 
    while true; do 
     echo -ne "Info\n" # this is the damned line, if you remove it the counter works fine 
     echo -ne "Time counter: $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r"; 
    done 
EOF 

exec 3>&- 

xterm -hold -geometry 78x25+0+0 -T "Testing" -e "bash \"$dir$my_file\"" > /dev/null 2>&1 & 

これは、他のラインの「時間」という言葉と重なっているラインの多くとInfoラインでxtermウィンドウを示しています。私は私の働いていないコードを入れます。タイムラインとカウンターを別々に表示したいのですが、一度だけ!

エコー行を削除した場合 - "情報\ n"カウンタが正常に実行されていることを一度だけ表示しています...この行の上に別の行(情報とともにエコー)を挿入し、繰り返し?可能だ?これに到達する方法の任意のアイデア?ありがとうございました。

+0

ここでファイル記述子3を使いこなす理由はわかりません。 'cat>" $ dir/$ my_file "<< 'EOF' ...'はずっと簡単です。 – chepner

+0

'echo -ne" INFO \ n "'は 'echo INFO'と変わりありません。 – chepner

+0

はい、同じです...私は別のものを試していたからです...失敗しました。そしてcat> "$ dir/$ my_file" <<このスクリプトから別のスクリプトを生成するには<< 'EOF'が必要です。必要があります...おそらく、投稿のターゲットには関係ありません...とにかく、あなたは問題に対処する方法を知っていますか?あなたの答えをありがとう。 – OscarAkaElvis

答えて

0

ループからINFO行を移動するだけです。私は通常、行の先頭に改行を置くことを好みます。 -nまたは-eのどちらも移植性がありません。したがって、私は通常を好むが、もっとも単純な用途はechoです。

dir="/tmp/" 
my_file="generatedscript.sh" 

script="$tmp/$my_file" 
cat > "$script" <<'EOF' 
echo INFO 
date1=$(date +%s) 
while true; do 
    now=$(date +%s) 
    delta=$((now - date1)) 
    printf '\rTime counter: %s' "$(date -u --date "$delta" +%H:%M:%S)" 
done 
EOF 
chmod +x 500 "$tmp/$my_file" 
xterm -hold -geometry 78x25+0+0 -T "Testing" -e "$script" > /dev/null 
+0

ありがとうございます..ループの情報ラインがうまくいきます!...しかし、私はあなたのカウンターが左にo_O秒を持っていると思う私は私のカウンターを使用すると思います。とにかく思考のためのthx! – OscarAkaElvis

+0

秒数が24を超えるとクラッシュする... xd – OscarAkaElvis

関連する問題