2017-06-21 11 views
0

我構建了我的web服務器,並且正在嘗試做一個測試。所以,我與模擬bash腳本許多要求:
bash:如何在同一位置回顯字符串

i=0 
while [ $i -lt 20 ]; do 
    echo '' 
    echo '' 
    echo '' 
    echo '============== current time ===============' 
    echo $i 
    echo '===========================================' 
    echo '' 
    curl -i http://www.example.com/index?key=abceefgefwe 
    i=$((i+1)) 
done 

這種運作良好,但我更願意讓所有的echo在終端上的同一位置。
我讀過這樣的:How to show and update echo on same line

所以我添加-neecho,但它似乎並不如預期的工作。
curl的消息仍然可以將echo推開。

這就是我需要:

============== current time =============== ---\ 
1 <------ this number keeps updating  ----> the 3 lines stay here 
=========================================== ---/ 
Here is the messages of `curl`, which are showing as normal way 
+0

我不知道是否有更簡單的方法來解決這個問題,但'ncurses'庫你可以實現你想要的。 –

+0

@ sid-m好的,謝謝。 – Yves

回答

2

還有另一種選擇,在寫入標準輸出之前定位光標。

您可以設置xy以滿足您的需求。

#!/bin/bash 

y=10 
x=0 
i=0 
while [ $i -lt 20 ]; do 
    tput cup $y $x 
    echo '' 
    echo '' 
    echo '' 
    echo '============== current time ===============' 
    echo $i 
    echo '===========================================' 
    echo '' 
    curl -i http://www.example.com/index?key=abceefgefwe 
    i=$((i+1)) 
done 
+0

非常感謝!這正是我需要的。 – Yves

1

你可以在你的while循環的開頭添加一個clear命令。如果這是你的想法,這將在每次迭代期間將回顯語句保留在屏幕的頂部。

+0

我不想使用'clear'。這不夠好。 – Yves

+0

嗯...也許我沒有別的選擇... – Yves

+0

也許你可以用捲曲來控制頭部/尾部-n 30來控制輸出的行數並防止打印足以將頭部從屏幕上移開? –

0

當我做這樣的事情,而不是使用詛咒/ ncurses的或tput,我只是把自己限制在一個單一的線,並希望它不換行。我每次迭代都會重新繪製線條。

例如:

i=0 
while [ $i -lt 20 ]; do 
    curl -i -o "index$i" 'http://www.example.com/index?key=abceefgefwe' 
    printf "\r==== current time: %2d ====" $i 
    i=$((i+1)) 
done 

如果你沒有顯示預測的長度的文本,則可能需要先重新設置顯示器(因爲它沒有明確的內容,因此,如果您從therehere,您將以heree結尾,並帶有前一個字符串的額外字母)。爲了解決這個:

i=$((COLUMNS-1)) 
space="" 
while [ $i -gt 0 ]; do 
    space="$space " 
    i=$((i-1)) 
done 
while [ $i -lt 20 ]; do 
    curl -i -o "index$i" 'http://www.example.com/index?key=abceefgefwe' 
    output="$(head -c$((COLUMNS-28))) "index$i" |head -n1)" 
    printf "\r%s\r==== current time: %2d (%s) ====" "$space" $i "$output" 
    i=$((i+1)) 
done 

這使得全寬線的空間,以清除以前的文本,然後寫了新的內容,現在空行。我已經使用了檢索文件的第一行的一段,直到最大行寬(計算額外的文本;我可能在某處關閉)。如果我可以使用head -c$((COLUMNS-28)) -n1(這將關心訂單!),這將更清潔。

相關問題