通常在cshrc文件中有类似的东西来设置路径:
set path = ( . $otherpath $path )
但是,当您多次获取cshrc文件时,路径会重复,您如何防止重复?
编辑:这是一种不干净的方式:
set localpaths = ( . $otherpaths ) echo ${path} | egrep -i "$localpaths" >& /dev/null if ($status != 0) then set path = ( . $otherpaths $path ) endif
MestreLion.. 13
我很惊讶没有人使用tr ":" "\n" | grep -x
技术来搜索$ PATH中是否已存在给定的文件夹.有什么理由不去?
一行:
if ! $(echo "$PATH" | tr ":" "\n" | grep -qx "$dir") ; then PATH=$PATH:$dir ; fi
这是一个函数我自己一次向$ PATH添加几个文件夹(使用"aaa:bbb:ccc"表示法作为参数),在添加之前检查每个文件夹是否重复:
append_path() { local SAVED_IFS="$IFS" local dir IFS=: for dir in $1 ; do if ! $( echo "$PATH" | tr ":" "\n" | grep -qx "$dir" ) ; then PATH=$PATH:$dir fi done IFS="$SAVED_IFS" }
它可以在这样的脚本中调用:
append_path "/test:$HOME/bin:/example/my dir/space is not an issue"
它具有以下优点:
没有bashisms或任何特定于shell的语法.它运行完美!#/bin/sh
(我用短跑测试)
可以一次添加多个文件夹
没有排序,保留文件夹顺序
与文件夹名称中的空格完美匹配
无论$ folder是在前端,中间还是$ PATH中的唯一文件夹(因此避免测试x:*,*:x,:x:,x,因为这里隐藏的许多解决方案),单个测试都可以工作做)
如果$ PATH以":"开头或结尾,或者其中包含"::"(表示当前文件夹),则工作(并保留)
没有awk
或sed
需要.
EPA友好;)保留原始IFS值,所有其他变量都是函数范围的本地变量.
希望有所帮助!
我很惊讶没有人使用tr ":" "\n" | grep -x
技术来搜索$ PATH中是否已存在给定的文件夹.有什么理由不去?
一行:
if ! $(echo "$PATH" | tr ":" "\n" | grep -qx "$dir") ; then PATH=$PATH:$dir ; fi
这是一个函数我自己一次向$ PATH添加几个文件夹(使用"aaa:bbb:ccc"表示法作为参数),在添加之前检查每个文件夹是否重复:
append_path() { local SAVED_IFS="$IFS" local dir IFS=: for dir in $1 ; do if ! $( echo "$PATH" | tr ":" "\n" | grep -qx "$dir" ) ; then PATH=$PATH:$dir fi done IFS="$SAVED_IFS" }
它可以在这样的脚本中调用:
append_path "/test:$HOME/bin:/example/my dir/space is not an issue"
它具有以下优点:
没有bashisms或任何特定于shell的语法.它运行完美!#/bin/sh
(我用短跑测试)
可以一次添加多个文件夹
没有排序,保留文件夹顺序
与文件夹名称中的空格完美匹配
无论$ folder是在前端,中间还是$ PATH中的唯一文件夹(因此避免测试x:*,*:x,:x:,x,因为这里隐藏的许多解决方案),单个测试都可以工作做)
如果$ PATH以":"开头或结尾,或者其中包含"::"(表示当前文件夹),则工作(并保留)
没有awk
或sed
需要.
EPA友好;)保留原始IFS值,所有其他变量都是函数范围的本地变量.
希望有所帮助!