tty:bash中没有这样的文件或目录

时间:2015-07-16 04:48:54

标签: bash

下面是一个简单的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

如何删除此错误?

1 个答案:

答案 0 :(得分:0)

我认为你的意思是:

terminal=`tty`

单引号只返回一个文字字符串,反引号或$()用于替换命令的输出。

但是你不应该使用tty,因为原始stdin可能没有连接到终端(用户在运行脚本时可能重定向输入)。您应该将原始stdin保存在另一个描述符中。

exec 3<&0 <"$fname"
...
exec <&3 3<&-

如果您只想阅读文件,也无需使用exec。您只需将while循环重定向到文件:

while read line
do
    echo "$line"
done < "$fname"