当前位置:  开发笔记 > 编程语言 > 正文

如何避免在csh中复制路径变量

如何解决《如何避免在csh中复制路径变量》经验,为你挑选了1个好方法。

通常在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以":"开头或结尾,或者其中包含"::"(表示当前文件夹),则工作(并保留)

没有awksed需要.

EPA友好;)保留原始IFS值,所有其他变量都是函数范围的本地变量.

希望有所帮助!



1> MestreLion..:

我很惊讶没有人使用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以":"开头或结尾,或者其中包含"::"(表示当前文件夹),则工作(并保留)

没有awksed需要.

EPA友好;)保留原始IFS值,所有其他变量都是函数范围的本地变量.

希望有所帮助!

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有