簡體   English   中英

Bash 從 stdout 獲取最后一行(組合)

[英]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.

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