Linux - 使用 linux/bash 命令发送 Ctrl+C 以获取特定的 shell 脚本

Linux - 使用 linux/bash 命令发送 Ctrl+C 以获取特定的 shell 脚本

我编写了一个 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}}'

(我不知道该管道是否按照您的要求执行,但现在至少sedawk流程可以正确传输了)。

答案2

ctrl-c 发送“SIGINT”信号,因此要发送与 ^C 相同的效果,请使用

kill -SIGINT 脚本的 pid

相关内容