gpt4 book ai didi

linux - 通过单独终端中的管道输入

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:21 25 4
gpt4 key购买 nike

您好,我正在尝试用 bash 构建一个程序。我的想法是我会打开两个终端。可以使用管道 cat > pipe 获取输入。另一个终端将运行一个带有 while true 循环的 bash 脚本并从管道读取输入。输入将存储到一个变量中,并根据存储在其中的内容进行进一步的操作。这是我尝试过的。

程序获取管道名称作为参数,并将其存储到变量 pipe 中。

while true; do
input=$(cat<$pipe)
if [ "$input" == "exit" ]; then
exit 0
fi
done

我试图通过管道输入退出字符串,但程序没有按预期停止。如果变量没有从管道中获取任何值,我将如何更正它?或者是其他错误阻止了退出发生?

最佳答案

你的第二个脚本应该是这样的:

#!/bin/bash
pipe="$1" # Here $1 is full path to the file pipe as you have confirmed
while true
do
input=$(cat<"$pipe")
if [[ $input =~ exit ]] #original line was if [ "$input" == "exit" ]
then
exit 0
fi
done

记住$(cat<"$pipe")将整个文件存储为一个字符串。所以,即使你有 exit 这个词在 pipe 的某处归档原状if [ "$input" == "exit" ]将是错误的,除非您为 cat>pipe 输入的第一个单词本身就是“退出”。

一个微调的解决方案是进行正则表达式匹配 (=~)正如我所做的那样,但此解决方案不是很可靠,因为如果您输入类似“我不想退出”的内容,则 cat>pipe第二个脚本将退出。

第二个解决方案是:

#!/bin/bash
pipe="$1"
while true; do
input=$(tail -n1 "$pipe") #checking only the last line
if [[ "$input" == "exit" ]] #original if condition
then
exit 0
fi
done

关于linux - 通过单独终端中的管道输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com