我编写了一个 shell 脚本,它处理文本输入并显示预期的输出,但在显示预期结果后 - 它等待 actrl+c
以便完成并让光标移动到 $_ 空间。我怎样才能将其包含ctrl+c
在我的 shell 脚本本身中?或者ctrl+c
使用 bash/shell 命令的 shell 脚本是什么?
脚本如下:
sed 's/\xC2\xA0//g' | awk '$1=="|"{if(f){print f" "$2;f=""}else{f=$2}}' filename.txt
文件名.txt 包含: https://justpaste.it/edit/30310895/df1838c844c0fcd1
答案1
您展示的管道本质上是
sed expression | awk expression filename
这将awk
在文件上运行filename
,同时sed
在等待用户在其标准输入上输入的同时什么都不做(它将读取您当时在终端上键入的内容)。
要退出此脚本,您只需按下Ctrl+D即可表示进程输入结束sed
。当sed
注意到没有更多内容可读取时,它会终止并且脚本退出(因为这就是“暂停”它的原因)。
您当前的脚本或多或少相当于运行
awk expression filename
sed expression
...因为这两个命令没有通过管道相互通信。
你想做的是
sed expression filename | awk expression
此处,sed
正在对文件进行操作并将结果发送到awk
进行进一步处理。启动时没有文件名,这意味着它从标准输入读取,该输入通过管道awk
连接到标准输出。sed
就你而言,你想要
sed 's/\xC2\xA0//g' filename.txt | awk '$1=="|"{if(f){print f" "$2;f=""}else{f=$2}}'
(我不知道该管道是否按照您的要求执行,但现在至少sed
和awk
流程可以正确传输了)。
答案2
ctrl-c 发送“SIGINT”信号,因此要发送与 ^C 相同的效果,请使用
kill -SIGINT
脚本的 pid