Как добавить каталог в zsh PATH - PullRequest
       52

Как добавить каталог в zsh PATH

0 голосов
/ 20 сентября 2019

Я - пользователь bash, пробующий zsh в первый раз.В bash у меня есть функции для управления путями, такие как добавление каталога к пути, только если

  1. этот каталог существует, и
  2. , если этот каталог в данный момент не находится в пути.

Для bash у меня есть что-то вроде:

# =============================================================================
# Returns true (0) if element is in the list, false (1) if not
# $1 = list, $2 = element
# =============================================================================
function lcontains() {
    found=1  # 1=not found, 0=found
    local IFS=:
    for e in $1
    do
        if [[ $2 == $e ]]
        then
            found=0
            break
        fi
    done

    return $found
}

# =============================================================================
# Appends into a list an element
# $1 = list, $2 = element
# =============================================================================
function lappend() {
    if [[ -d $2 ]] && ! lcontains "$1" "$2"
    then
        echo $1:$2
    else
        echo $1
    fi
}

# Usage:
export PATH=$(lappend $PATH ~/bin)

# Add the same path again, and result in no duplication
export PATH=$(lappend $PATH ~/bin) 

Проблема в том, что в zsh функция lcontains не работает, потому что zsh не разделяет пробелы по умолчанию,Итак, есть ли способ достичь моей цели?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Общее решение: разделить на IFS.

function lcontains() {
  local IFS=':'
  local found=1  # 1=not found, 0=found
  local e
  for e in $(echo "$1")
  do
    if [[ $2 == $e ]]
    then
      found=0
      break
    fi
  done

  return $found
}

Решение только для ZSH: разделить на Флаг расширения параметров s

function lcontains() {
  local found=1  # 1=not found, 0=found
  local e
  for e in "${(@s#:#)1}"
  do
    if [[ $2 == $e ]]
    then
      found=0
      break
    fi
  done

  return $found
}
0 голосов
/ 20 сентября 2019

Если вам нужно разделить пробел в zsh, вы должны сказать это явно.Например, если

x="ab   cd"

, то $x передается как один параметр, а ${(z)x} передается как два параметра, ab и cd.

...