-1

В bash общей функцией, реализованной, например, в /etc /bashrc, является pathmunge() , которая добавляет или добавляет путь к PATH если он еще не указан среди элементов в PATH .

Пример:

$ 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() . В этом случае это правильный ответ.

2 ответа2

0

В конце концов, я решил использовать оболочку в 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`
0

Официальный обходной путь для отсутствующего управления массивами в csh - использовать систему Modules (пакет environment-modules в Debian).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .