Единица systemd должна называться «nfsshare.mount», если вы создаете точку монтирования с именем /nfsshare. Это не сервисный модуль, поэтому называть его.service бессмысленно, поэтому вы получаете эту ошибку.
Кроме того, если вы создаете модуль монтирования, он больше не нужен (и, скорее всего, вызовет проблемы )с наличием записи в /etc/fstab.
Рабочий каталог является свойством запущенного процесса, и ваш скрипт запускается в отдельном процессе от оболочки. Таким образом, изменение каталога в сценарии не влияет на вашу интерактивную оболочку. И это хорошо, иначе что-то вроде 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 ''
, «переходя» в текущий каталог.)