我有一个#!/ 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
如果我需要多次使用它,是否可以保留此输入?
感谢。
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:2)
cat
临时文件(mktemp
)的输入。然后根据需要多次读取文件。