gpt4 book ai didi

bash - 我如何获取 STDIN 并在 bash shell 上使用它来设置环境变量?

转载 作者:行者123 更新时间:2023-11-29 09:34:51 25 4
gpt4 key购买 nike

我正在尝试在单行上做得更好,这就是我目前所拥有的。

$ echo $PATH
/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我想做的是去掉第一个 block ,所以这是我到目前为止所知道的 ---

$ echo $PATH | sed -e "s|^/[A-Za-z/]*:||"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我在这里要做的最后一件事是将其放回 PATH,例如 export PATH=[that result]

我试过的方法如下,我无法开始工作 ---

$ echo $PATH | sed -e "s|^/[A-Za-z/]*:||" | xargs export PATH=
xargs: export: No such file or directory

另外,顺便说一句,另一个让我困惑的问题是上面的 sed 表达式,出于某种原因,当我尝试使用 + 而不是 * 时,它不会捕捉到第一位。看---

$ echo $PATH | sed -e "s|^/[A-Za-z/]+:||" 
/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

它就像 +,意思是“一个或多个”不如“许多”*。

最佳答案

我认为针对该特定问题的最佳解决方案是:

export PATH=${PATH#*:}

但这并没有回答如何使用 stdin 设置环境变量的问题。

很容易使用一些进程的stdout:

export PATH=$(make_new_path)

但这并不是严格意义上的 stdin。显而易见的解决方案:

make_new_path | export PATH=$(cat)

不会工作,因为管道右侧的命令是在子 shell 中执行的,因此变量设置不会保留。 (如果它奏效了,它就是一个 UUOC。)

正如 Gordon Davisson 在评论中指出的那样,您可以简单地使用:

read -r PATH; export PATH

此外,实际上没有必要 export PATH,因为 PATH 是预先导出的,但我将其保留以备您要使用其他一些环境变量。

关于bash - 我如何获取 STDIN 并在 bash shell 上使用它来设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17541279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com