是否可以同时从文件和终端获得输入?我想在awk脚本的END部分询问用户一些问题。
该输入应该由用户输入,而不是从要处理数据的文件中读取。
END {
getline choice
if(choice == "Y")
print "OK"
}但是选择是从输入文件中读取的。
发布于 2012-11-12 15:59:48
您可以从/dev/tty或/dev/stdin阅读。
getline choice < "/dev/tty"/dev/tty是相当普遍的(即使是极少数,以及POSIX所要求的/dev/null和/dev/console ),/dev/stdin并不那么常见,但是至少GNU会识别它为stdin的意思,即使系统没有这样的设备/特殊文件。
在Linux (和Cygwin,但不是其他Unix-like)上,从/dev/stdin读取与从stdin (fd 0)读取不同,而是意味着从fd 0上打开的相同文件中读取。例如,如果该文件是一个常规文件,那么它将从文件的开头开始读取,而不是fd0当前指向文件中的位置。
因为GNU awk自己处理像/dev/stdin这样的路径(并将其视为从stdin读取),所以在Linux或Cygwin上,它的行为将不同于其他不进行特殊处理的应用程序。如果您希望gawk中的Linux/Cygwin行为(这里可能不是您的情况),您可以使用///dev/stdin或/dev/./stdin for gawk来停止将其识别为/dev/stdin特例,或者如果您打算依赖于Linux/Cygwin特定的行为,则可以使用Linux/Cygwin特定的/proc/self/fd/0路径( /dev/stdin实际上在这些系统上的符号链接)。
发布于 2015-08-29 21:01:27
https://unix.stackexchange.com/questions/55517
复制相似问题