gpt4 book ai didi

shell - 如何使用 fish shell 从我的 PATH 环境变量中删除特定变量

转载 作者:行者123 更新时间:2023-12-04 01:51:20 30 4
gpt4 key购买 nike

给定一个输入变量说 usr/bin 和以下 PATH

 echo $PATH 
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/sbin /Developer/bin

我如何编写(在 fish shell 中)一个函数,该函数给出字符串/输入可以从我的 PATH 变量中删除该路径?
-> 理想情况下,删除第一个出现的(vs 删除所有出现的此类变量)

我正在考虑编写一个小函数,例如
deleteFromPath usr/bin

用像 Perl/python/ruby 这样的脚本语言而不是 fish shell 来编写它会更好吗?
for x in $list
if [ $x = $argv ]
//delete element x from list -> How?
end
end

最佳答案

这在 fish 中很容易做到。

set -e ,您不仅可以删除整个变量,还可以删除列表中的元素,例如 set -e PATH[2]删除第二个元素( fish 从 1 开始计数列表索引)。

contains -i ,您可以找到元素位于哪个索引。

所以你要调用 set -e PATH[(contains -i $argv $PATH)] .

修复了一些错误处理和边缘情况后,这看起来像

 function deleteFromPath
# This only uses the first argument
# if you want more, use a for-loop
# Or you might want to error `if set -q argv[2]`
# The "--" here is to protect from arguments or $PATH components that start with "-"
set -l index (contains -i -- $argv[1] $PATH)
# If the contains call fails, it returns nothing, so $index will have no elements
# (all variables in fish are lists)
if set -q index[1]
set -e PATH[$index]
else
return 1
end
end

请注意,这会比较路径字符串,因此您需要调用 deleteFromPath /usr/bin , 以“/”开头。否则它不会找到该组件。

关于shell - 如何使用 fish shell 从我的 PATH 环境变量中删除特定变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754257/

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