在当前shell环境中执行脚本中的一行

在当前shell环境中执行脚本中的一行,shell,zsh,Shell,Zsh,我希望使用当前shell的环境,从运行的shell执行shell脚本中的一系列行 例如,在将变量设置为我不想键入的内容(例如API密钥或MAC地址)的脚本中: …在我的shell中,我想获取上面的第4行,运行它,并在该环境中存在$MAC 我已经尝试了sed-n'4p'script.zsh | zsh,但这并不影响我目前使用的shell: $ MAC="this is not a MAC address" $ sed -n '4p' script.zsh | zsh $ echo $MAC ---

我希望使用当前shell的环境,从运行的shell执行shell脚本中的一系列行

例如,在将变量设置为我不想键入的内容(例如API密钥或MAC地址)的脚本中:

…在我的shell中,我想获取上面的第4行,运行它,并在该环境中存在$MAC

我已经尝试了
sed-n'4p'script.zsh | zsh
,但这并不影响我目前使用的shell:

$ MAC="this is not a MAC address"
$ sed -n '4p' script.zsh | zsh
$ echo $MAC
---
this is not a MAC address

我可以直接复制和粘贴,但我希望有一种解决方案,可以在不接触鼠标的情况下使用,或者在我没有可用鼠标的情况下使用。

您可以将
sed
命令与进程替换相结合,并将其源代码:

source <(sed -n '4p' script.zsh)

source您可以将
sed
命令与进程替换相结合,并对其进行源代码生成:

source <(sed -n '4p' script.zsh)

source您的问题对于
zsh
来说非常独特,
bash
可能不是needed@Inian,根据我对
zsh
的了解,它应该使用与
bash
相同的脚本语法,所以我想我应该更关注这两个标记。@rreagan3 bash和zsh在语法和语义上确实不同;你的问题对于
zsh
来说是非常独特的,而
bash
可能不是needed@Inian,根据我对
zsh
的了解,它应该使用与
bash
相同的脚本语法,所以我想我应该对这两个标记给予更多的关注。@rreagan3 bash和zsh在语法和语义上确实不同;它们只是共享一些常见的构造,但这对我来说不起作用——它仍然不会改变我的shell环境中存在的变量。使用
'/^MAC=/p'
模式调用得很好,但这肯定更健壮。@rreagan3-Hmm,这就是
source
命令应该做的,当我尝试它时,它确实更新了我当前的环境。你有任何错误或类似的吗?没关系,它是有效的。我在我的工作电脑上尝试了你的解决方案,但没有成功,然后又回到了我的个人笔记本电脑上,在那里我试图实现脚本,但效果很好。我甚至不想在我的工作笔记本电脑上费心去弄清楚这一点-我将在周末离开。这对我不起作用-它仍然不会改变我的shell环境中存在的变量。使用
'/^MAC=/p'
模式调用得很好,但这肯定更健壮。@rreagan3-Hmm,这就是
source
命令应该做的,当我尝试它时,它确实更新了我当前的环境。你有任何错误或类似的吗?没关系,它是有效的。我在我的工作电脑上尝试了你的解决方案,但没有成功,然后又回到了我的个人笔记本电脑上,在那里我试图实现脚本,但效果很好。我甚至不想在我的工作笔记本电脑上费心去弄明白这一点——我将在周末离开。
source <(sed -n '/^MAC=/p' script.zsh)