shell 有没有一种简单的方法可以静默地读取awk变量并允许一个字符?[副本]

8aqjt8rx  于 2023-05-01  发布在  Shell
关注(0)|答案(1)|浏览(96)

此问题已在此处有答案

get the user input in awk(3个答案)
2小时前关闭
我正在尝试编写一个shell脚本,在某些情况下,它会询问用户是否要删除某些文件。在这种情况下,会弹出一个问题:“是否要删除所述文件?[y/N]”
但是,在awk语句中逐行处理文件时会调用此函数。
现在,我能得到的最接近的是awk中的以下代码:

awk 'some other code
     system("read -s -n1 ans && echo $ans | cat > inputf");
     getline del < "inputf";
     if (del=="y") system("echo Deleted Successfully!");
   '

这是一个奇怪的方法来解决它,然而,它仍然不起作用。即使“inputf”文件在每次迭代中都被覆盖,getline命令也总是采用它的未修改的原始版本。对此有什么解释吗?或者有更简单的方法?注:我希望它能安静地阅读,并且是一个字符。

ars1skjm

ars1skjm1#

使用/dev/stdin的一种方法:

awk '

function get_response(str) {

    printf "%s ", str                       # leave cursor/prompt at end of output
    getline response < "/dev/stdin";        # read from stdin
    print ""                                # terminate the output line
    return response
}

BEGIN { del = get_response("Do you want to delete said file? [y/N]")
        print "response = ",del
      }
'

试驾:

Do you want to delete said file? [y/N] y

response =  y

-------------

Do you want to delete said file? [y/N] N

response =  N

相关问题