下面是一个简单的bash程序,可以从文件中读取。
#! /usr/bin/bash
echo "Enter file name"
read fname
terminal='tty'
exec<"$fname"
while read line
do
echo "$line"
done
exec<$terminal
执行正常,但也会出错
[anishjp@fedora22 Bash_programs]$ ./read_file
Enter file name
source_file
This is a cool file.
How are you doing?
I am glad you used this file.
Hey, where are you going?
./read_file: line 16: tty: No such file or directory
如何删除此错误?
答案 0 :(得分:0)
我认为你的意思是:
terminal=`tty`
单引号只返回一个文字字符串,反引号或$()
用于替换命令的输出。
但是你不应该使用tty
,因为原始stdin
可能没有连接到终端(用户在运行脚本时可能重定向输入)。您应该将原始stdin
保存在另一个描述符中。
exec 3<&0 <"$fname"
...
exec <&3 3<&-
如果您只想阅读文件,也无需使用exec
。您只需将while
循环重定向到文件:
while read line
do
echo "$line"
done < "$fname"