zsh函数从剪贴板导出多个变量

zsh函数从剪贴板导出多个变量

我希望能够获取剪贴板的内容并在 zsh 中对其进行评估,而不显示剪贴板的内容

export FOO=BAR
export BAR=BIZ
export BAZ=FOO

我试过了

function aws-eval-clipboard {
    eval | $(pbpaste)
}

我感觉已经很接近了?但我得到

zsh: no such file or directory: export

我完全愿意使用甚至可能需要安装的其他命令。

答案1

那宁愿是:

eval -- "$(pbpaste)"

或者:

pbpaste | source /dev/stdin

eval计算与其参数的空格连接的 shell 代码结果。因此,在这里我们采用pbpastewith命令替换的输出$(...),加引号,以便它不会被分割,并将其作为一个参数传递给eval--如果参数以 开头,则前面的 标记选项的结尾-)。

source计算作为第一个参数传递的文件中存储的 shell 代码。使用source /dev/stdin,我们告诉它评估它可以在其标准输入上读取的代码,这里是一个管道,pbpaste另一端有 的输出。

在 中eval | $(pbpaste),您正在运行通过管道连接的两个命令。第一个eval没有参数,因此它不计算任何内容,因此不向管道打印任何内容。第二个是通过获取 的输出pbpaste、将其拆分$IFS并生成一个简单命令的结果单词来构造的。

使用您显示的代码,这将导致命令以, , , ,作为参数export运行 ,因此在这种情况下应该可以工作(将导出那些, ,变量,但也导出变量)。您收到的错误无法用该特定输入来解释。FOO=BARexportBAR=BIZexportBAZ=FOOFOOBARBAZexport

相关内容