[英]Bash get last line (combined) from stdout
我有一個腳本可以執行許多不同的操作,並以清晰的方式為用戶顯示它們的完成狀態。 我需要一個函數,以便可以將某些字符串作為變量檢索以進行進一步處理。 這是一個高度簡化的示例:
#!/bin/bash
echo "Test script."
echo -n "1) cat file "
cat ./testfile.f &> /dev/null
if [ $? -eq 0 ]
then
echo "$(tput hpa $(tput cols))$(tput cub 8)[OK]"
else
echo "$(tput hpa $(tput cols))$(tput cub 8)[FAIL]"
fi
echo -n "2) make subfolder "
mkdir ./testdir &> /dev/null
if [ $? -eq 0 ]
then
echo "$(tput hpa $(tput cols))$(tput cub 8)[OK]"
else
echo "$(tput hpa $(tput cols))$(tput cub 8)[FAIL]"
fi
它需要一些:
$./test.sh
Test script.
1) cat file [FAIL]
2) make subfolder [OK]
如何在腳本執行期間獲得最后一行(最好是任何字符串)? 理想情況下,它將使用一個函數(因此我可以使用結果字符串)該字符串將在同一個腳本中進行處理。 到目前為止,我只看到一種解決方案:使用 tee 重定向每個 echo 命令的輸出。
有沒有辦法讀取已經輸出的數據!?
假設您有需要處理的字符串 {1..5}:
process() {
while read -r input; do
sleep 2
echo "Processed ${input}."
done
}
printf "line %s\n" {1..5} | process
在這種情況下,您可能希望在處理數字之前查看這些數字。
您可以通過將 stdout 復制到fd 3
並使用函數來做到這一點。
display() {
while read -r input; do
echo "=== ${input} ===" >&3
echo "${input}"
done
}
process() {
while read -r input; do
sleep 2
echo "Processed ${input}."
done
}
exec 3>&1
printf "line %s\n" {1..5} | display | process
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.