![zsh函数从剪贴板导出多个变量](https://linux22.com/image/14397/zsh%E5%87%BD%E6%95%B0%E4%BB%8E%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%AF%BC%E5%87%BA%E5%A4%9A%E4%B8%AA%E5%8F%98%E9%87%8F.png)
我希望能够获取剪贴板的内容并在 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 代码结果。因此,在这里我们采用pbpaste
with命令替换的输出$(...)
,加引号,以便它不会被分割,并将其作为一个参数传递给eval
(--
如果参数以 开头,则前面的 标记选项的结尾-
)。
source
计算作为第一个参数传递的文件中存储的 shell 代码。使用source /dev/stdin
,我们告诉它评估它可以在其标准输入上读取的代码,这里是一个管道,pbpaste
另一端有 的输出。
在 中eval | $(pbpaste)
,您正在运行通过管道连接的两个命令。第一个eval
没有参数,因此它不计算任何内容,因此不向管道打印任何内容。第二个是通过获取 的输出pbpaste
、将其拆分$IFS
并生成一个简单命令的结果单词来构造的。
使用您显示的代码,这将导致命令以, , , ,作为参数export
运行 ,因此在这种情况下应该可以工作(将导出那些, ,变量,但也导出变量)。您收到的错误无法用该特定输入来解释。FOO=BAR
export
BAR=BIZ
export
BAZ=FOO
FOO
BAR
BAZ
export