作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个名为 sarcasm
的简单程序,它只接受所有参数,将它们连接起来,然后使用 'aLtErNaTiNg CaPs' 转换结果字符串。我已经编写了一个简单的单行 shell 脚本,它可以让我使用 dmenu 输入文本,通过该程序运行该文本,并将结果复制到我的剪贴板。这是我所拥有的:
echo "dmenu -p 'Text: '" | sh | read var ; [[ -n "$var" ]] && echo -n $var | xargs sarcasm | xclip -selection clipboard
它应该:
sarcasm
程序运行它并将结果复制到我的剪贴板当我使用 zsh 运行那个确切的命令时,或者如果我使用 zsh 在脚本中运行它(即 shebang 是 #!/bin/zsh
),它工作正常,但是当我运行它时使用 bash,它不会将任何内容复制到我的剪贴板。其中哪一部分是仅 zsh 的,bash 的等价物是什么(如果有的话)?
最佳答案
这部分:
echo "dmenu -p 'Text: '" | sh | read var
# ............................^^^^^^^^^^
在 bash 中,管道中的每个命令都在单独的子 shell 中运行。因为 var
变量是在子 shell 中设置的,所以当子 shell 退出时该变量消失。
要在 bash 中执行它,请重定向进程替换的输出:这样,read
命令会在当前 shell 中运行。
read -r var < <(dmenu -p 'Text: ')
我想这也适用于 zsh。
还有另一种解决方法:设置lastpipe
设置并禁用作业控制
$ echo foo | read var; declare -p var
bash: declare: var: not found
$ set +o monitor
$ shopt -s lastpipe
$ echo foo | read var; declare -p var
declare -- var="foo"
关于bash - 这个单行脚本的哪一部分是特定于 zsh 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65712819/
我是一名优秀的程序员,十分优秀!