cd не принимает переменную в качестве аргумента в скрипте bash

Единица systemd должна называться «nfsshare.mount», если вы создаете точку монтирования с именем /nfsshare. Это не сервисный модуль, поэтому называть его.service бессмысленно, поэтому вы получаете эту ошибку.

Кроме того, если вы создаете модуль монтирования, он больше не нужен (и, скорее всего, вызовет проблемы )с наличием записи в /etc/fstab.

0
02.04.2021, 20:03
1 ответ

Рабочий каталог является свойством запущенного процесса, и ваш скрипт запускается в отдельном процессе от оболочки. Таким образом, изменение каталога в сценарии не влияет на вашу интерактивную оболочку. И это хорошо, иначе что-то вроде findможет оставить вашу оболочку в любом случайном каталоге, особенно. если бы вы прервали их посреди -работы.

Вы можете поместить pwdв скрипт после cd, чтобы убедиться, что он действительно работает, рабочий каталог, если скрипт меняется. И тогда скрипт выходит.

Вместо этого сделайте его функцией оболочки:

cdn() {
    arg=$(ls --group-directories-first |
          awk -v first="$1" 'NR == first' | tr -d '[[:space:]]')
    cd -- "$arg"
}

(Я не знаю, почему у вас есть tr.)

Или, используя массивы в Bash:

cdn() {
    dirs=(./*/ )
    if [[ ${#dirs[@]} == 0 ]]; then
        echo "No directories!" >&2
        return 1
    fi 
    # minus one to go from one-based to zero-based indexing
    cd -- "${dirs[$1 - 1]}"
}

Последнее должно быть безопаснее, если у вас есть имена файлов с символами новой строки или пробелами. (Это не проверяет, существует ли каталог, соответствующий заданному индексу. Если нет, то просто запускается cd '', «переходя» в текущий каталог.)

1
28.04.2021, 22:54

Теги

Похожие вопросы