2

我有一个 #!/bin/sh 脚本,我需要多次读取管道输入。

我迭代它的方式似乎丢弃了它,例如以下内容;

while read LINE; do
  echo "-- $LINE"
done

while read LINE; do
  echo "## $LINE"
done

当与

find ~/Desktop | ./my.sh

生产

-- /Users/me/Desktop/some.txt
-- /Users/me/Desktop/other.txt

并不是

-- /Users/me/Desktop/some.txt
-- /Users/me/Desktop/other.txt
## /Users/me/Desktop/some.txt
## /Users/me/Desktop/other.txt

如果我需要多次使用它,有没有办法可以保留这个输入?

谢谢。

4

3 回答 3

3

众多解决方案之一

TMP="/tmp/myfile.$$"
trap "rm -f '$TMP';exit" 0 2 15

while read LINE; do
  echo "-- $LINE"
done < <(tee $TMP)

exec < $TMP
while read LINE; do
  echo "## $LINE"
done

另一个

TMP="/tmp/myfile.$$"
trap "rm -f '$TMP';exit" 0 2 15

cat - > $TMP

while read LINE; do
  echo "-- $LINE"
done < $TMP

while read LINE; do
  echo "## $LINE"
done < $TMP
于 2013-06-20T19:57:07.387 回答
3

您需要自己保存输入。

#!/bin/sh

i=0;
while read LINE; do
  LINES[$i]="${LINE}"
  i=$((i+1))
done

for ENTRY in "${LINES[@]}"; do
  echo "-- ${ENTRY}"
done


for ENTRY in "${LINES[@]}"; do
  echo "## ${ENTRY}"
done

样本输出:

ls /bin/b*|./test.sh
-- /bin/basename
-- /bin/bash
## /bin/basename
## /bin/bash
于 2013-06-20T19:02:05.933 回答
2

cat临时文件 ( mktemp) 的输入。然后根据需要多次读取文件。

于 2013-06-20T18:57:25.623 回答