【发布时间】:2021-04-19 02:36:25
【问题描述】:
我编写了一个名为sarcasm 的简单程序,它简单地将所有参数连接起来,然后将生成的字符串转换为使用'aLtErNaTiNg Caps'。我编写了一个简单的单行 shell 脚本,它可以让我使用 dmenu 输入文本,通过该程序运行该文本,并将结果复制到我的剪贴板。这是我所拥有的:
echo "dmenu -p 'Text: '" | sh | read var ; [[ -n "$var" ]] && echo -n $var | xargs sarcasm | xclip -selection clipboard
它应该是:
- 使用 dmenu 提示我输入文本
- 如果(且仅当)我输入了任何文本,通过
sarcasm程序运行它并将结果复制到我的剪贴板
当我使用 zsh 运行该确切命令时,或者如果我使用 zsh 在脚本中运行它(即 shebang 是 #!/bin/zsh),它工作正常,但是当我使用 bash 运行它时,它不会将任何内容复制到我的剪贴板。其中哪一部分是 zsh-only,什么是 bash 等价物(如果有的话)?
【问题讨论】:
-
都是 POSIX shell(
[[ .. ]]不相关)——没有什么是 zsh 特定的。我怀疑当你从 bash 运行时你的 ENVIRONMENT 是不同的,并且它没有 X 环境存在(这是一个强烈的怀疑,但如果没有看到你的环境就无法验证) -
@DavidC.Rankin
[[不是 POSIX,但它是合法的 bash 运算符。 -
@ShaneBishop 好眼光 -- 已更新。
-
我们可能需要查看
sarcasm的内容来确定问题。或者它可能与您的环境有关。您是否尝试过echo -n 'test' | xclip -selection clipboard使用交互式 bash shell 来排除问题? -
例如,
echo $var可能会产生稍微不同的结果。假设var包含文本A B(4 个嵌入空格) ,那么它会在 zsh 下生成A B,但在 bash 下会生成A B(1 个空格)。