【发布时间】:2016-12-02 19:24:06
【问题描述】:
我有一个脚本可以动态生成另一个 bash 脚本。在这个 heredoc 脚本中,有一个无限循环显示一个计数器(这有效!):
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窗口,并且Info行与另一行的“Time”字重叠。我想将信息线与时间计数器线和计数器分开显示......并且只显示一次!
如果您删除该行 echo -ne "Info\n" 计数器显示正常,正在运行,并且仅运行一次...如何在此上方放置另一条不同的行(带有信息的回显)并作为固定行而不重复?有可能吗?知道如何达到这个目标吗?谢谢。
【问题讨论】:
-
不知道你为什么在这里搞乱文件描述符 3;
cat > "$dir/$my_file" << 'EOF' ...要简单得多。 -
echo -ne "INFO\n"与echo INFO没有什么不同。 -
是的,是一样的……那是因为我尝试了不同的东西……没有成功。并且 cat > "$dir/$my_file"
-
cat上的重定向不会影响脚本的其余部分;使用 fd 3 只是一个不必要的复杂性。