簡體   English   中英

擊。 無限循環顯示計數器和更多信息

[英]Bash. infinite loop showing a counter and more info

我有一個腳本生成dinamically另一個bash腳本。 在這個heredoc腳本中有一個無限循環顯示一個計數器(這有效!):

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

如果只放這個,這個循環工作正常。 問題是我不僅需要顯示計數器。 需要更多信息(一些靜態數據)。 我會把我的NOT工作代碼:

#!/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 &

這顯示了具有大量行的xterm窗口,並且Info行與其他行的“Time”字重疊。 我想在時間計數器行和計數器運行中分別顯示信息行......只有一次!

如果刪除行echo -ne“Info \\ n”計數器顯示正常,正在運行並且只運行一次...如何在此之上放置另一條不同的行(回顯信息)並作為固定行而不重復? 有可能嗎? 任何想法如何達到這個? 謝謝。

只需將INFO線移出循環即可。 我通常喜歡把回車放在線的起點。 -n-e都不是便攜式的,所以除了最簡單的echo ,我通常更喜歡printf

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM