Bash。无限循环显示一个计数器和更多信息
我有一个脚本,dinamically生成另一个bash脚本。在这个heredoc脚本有一个无限循环显示计数器(这工作!):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 &
这说明有很多线和信息线xterm窗口重叠与其他线路的“时间”二字。我想单独显示信息线,从时间计数器行和计数器运行...并且只有一次!
如果你删除行echo -ne“Info \ n”计数器显示正常,运行并且只有一次...如何可以将另一个不同的行(回声与信息)在此之上并且作为固定行重复?有可能吗?任何想法如何达到这一点?谢谢。
只需将INFO行移出循环即可。我通常更喜欢把回车放在行的开头。 -n
或-e
都不便携,所以我通常更喜欢printf
,但最简单的用法是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
谢谢..信息线出了循环的作品!...但我认为你的柜台有左边的秒o_O我想我会用我的柜台。无论如何thx的想法! – OscarAkaElvis
并且它在secs超过24 ... xd时崩溃 – OscarAkaElvis
不确定为什么你在这里弄乱文件描述符3; 'cat>“$ dir/$ my_file” chepner
'echo -ne“INFO \ n”'和'echo INFO'没有区别。 – chepner
是的,是一样的......那是因为我在尝试不同的事情......失败。并且需要cat>“$ dir/$ my_file” OscarAkaElvis