gpt4 book ai didi

bash - 读取文件或读取标准用户输入

转载 作者:行者123 更新时间:2023-11-29 09:22:58 27 4
gpt4 key购买 nike

我在编写 bash 脚本时遇到了问题。我被要求编写一个可以通过两种方式调用的脚本,读取文件或读取标准输入。但是,当我使用 while-read 时,我不能再让它读取标准输入。这是我的代码:

#!/bin/bash
FILE=$1
while read LINE;
do
echo "$LINE" | tr " " "\n" | tr "\t" "\n"
done < $FILE

最佳答案

问题出在您总是将 $FILE 作为您读取的输入这一事实。您可以尝试在有参数时将文件重定向到 channel 0,否则将其留给标准输入。

#!/bin/bash
FILE=$1
if [ ! -z "$FILE" ]
then
exec 0< "$FILE"
fi
while read LINE
do
echo "$LINE" | tr " " "\n" | tr "\t" "\n"
done

exec 0< "$FILE"告诉 shell 使用 $FILE 作为 channel 0 的输入。提醒:默认 read收听 channel 0。

0<是这里的关键,其中 0表示 channel 0 和 <表示这是一个输入。当没有参数时,exec 0< "$FILE" 不会被调用,在这种情况下 channel 0 将使用标准输入。

关于bash - 读取文件或读取标准用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43407748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com