csh 中 pathmunge() 的等效项是什么?

csh 中 pathmunge() 的等效项是什么?

在 bash 中,例如 /etc/bashrc 中实现的一个常见函数是,如果路径尚未在中的元素中列出,则pathmunge()该函数会将路径附加或添加到其中。PATHPATH

例子:

$ echo $PATH
/bin:/usr/bin
$ pathmunge /home/me/bin
$ echo $PATH
/home/me/bin:/bin:/usr/bin
$ pathmunge /home/me/bin
$ echo $PATH
/home/me/bin:/bin:/usr/bin

添加路径的简单方法如下:

$ echo $PATH
/bin:/usr/bin
$ PATH=/home/me/bin:$PATH
$ echo $PATH
/home/me/bin:/bin:/usr/bin
$ PATH=/home/me/bin:$PATH
$ echo $PATH
/home/me/bin:/home/me/bin:/bin:/usr/bin

我对 csh 了解甚少,我只想做一件简单的事情:如果路径尚未存在,则将其添加到列表中。我知道 csh 使用path而不是 ,PATH并且这是一个合适的 csh 数组。

也许 csh 有一些类似的数组函数if !(foobar in $path) then blah,使得这样的函数变得pathmunge()没有必要。在这种情况下,这是正确的答案。

答案1

我最终采用了将 shell 放入 bash 的解决方案,因为在“csh”语言中似乎无法解决这个问题。

~/bin/munge_echo

#!/bin/bash

function munge() {
  case ":$1:" in
    *:$2:*) echo "$1" ;;
    ::) echo "$2" ;;
    *) echo "$2:$1" ;;
  esac
}

munged="$1"

shift

while [ -n "$1" ]; do
  munged="$(munge "$munged" "$1")"
  shift
done

echo "$munged"

~/.csh

setenv PATH `~/bin/munge_echo "$PATH" ~/.local/bin ~/bin`

答案2

缺少阵列管理的官方解决方法csh是使用模块系统 (环境模块Debian 上的软件包)。

相关内容