小编Phi*_*hil的帖子

命令替换下的 coproc 和命名管道行为

我需要在 zsh shell 脚本中创建一个函数,由命令替换调用,将状态与对相同命令替换的后续调用进行通信。

类似于 C 在函数中的静态变量(非常粗略地说)。

为此,我尝试了两种方法 - 一种使用协处理器,一种使用命名管道。命名管道方法,我无法开始工作 - 这令人沮丧,因为我认为它会解决我在协处理器上遇到的唯一问题 - 也就是说,如果我从终端进入一个新的 zsh shell,我似乎没有能够看到父 zsh 会话的 coproc。

我已经创建了简化的脚本来说明下面的问题 - 如果您对我正在尝试做的事情感到好奇 - 它正在向子弹列车 zsh 主题添加一个新的有状态组件,该组件将由命令替换 build_prompt( ) 函数在这里:https : //github.com/caiogondim/bullet-train.zsh/blob/d60f62c34b3d9253292eb8be81fb46fa65d8f048/bullet-train.zsh-theme#L692

脚本 1 - 协处理器

#!/usr/bin/env zsh

coproc cat
disown
print 'Hello World!' >&p

call_me_from_cmd_subst() {
    read get_contents <&p
    print "Retrieved: $get_contents"
    print 'Hello Response!' >&p
    print 'Response Sent!'
}

# Run this first
call_me_from_cmd_subst

# Then comment out the above call
# And run this instead
#print "$(call_me_from_cmd_subst)" …
Run Code Online (Sandbox Code Playgroud)

zsh pipe shell-script fifo coprocesses

5
推荐指数
1
解决办法
220
查看次数

标签 统计

coprocesses ×1

fifo ×1

pipe ×1

shell-script ×1

zsh ×1