Переход в родительский каталог файла с CD?

9

Я пишу .sh, чтобы сделать некоторую работу за меня, но сейчас я нахожусь в точке, где мне нужно перейти к каталогу, в котором находится файл /path/to/file.end. Терминал не позволяет

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

К сожалению, я не знаю обходного пути, поэтому было бы неплохо, если бы вы могли помочь!

Azsgy
источник
4
Ты имеешь в виду cd /path/to? Это изменит каталог на каталог, в котором file.endнаходится файл .
Alaa Ali
1
Нет, файл является переменной, и я хотел бы ввести путь к файлу (поместить его в терминал), а затем перейти в папку, в которой он находится
Azsgy

Ответы:

10

Тип cd $( dirname /path/to/file.end). Это приведет вас в /path/to.

Объяснение:

  • dirnameвозвращает полный путь к файлу (без имени файла, которое вы бы получили basename) - т.е. dirname /etc/apt/apt.conf.d/99update-notifierвозвращает/etc/apt/apt.conf.d
  • выражение $(anything)заменяется результатом команды в скобках. Так cd $( dirname /etc/apt/apt.conf.d/99update-notifier)выполнено какcd /etc/apt/apt.conf.d

Другое (но старое и обескураженное) обозначение для того же было

cd `dirname /path/to/file.end` 
guntbert
источник
8

Вы не можете cdв файл. Вот функция (командной строки) , которая автоматически входит cdв путь для заданного полного пути к файлу:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
Rinzwind
источник
Правильно ли я понял ?: function fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {CD $ 1; } pwd} ответ: bash: синтаксическая ошибка рядом с неожиданным токеном `pwd ', это дает мне ошибку таким образом :(
Azsgy
2
@Atsch, перед точкой с запятой нужно pwd, а если вы определяете функцию в одной строке, после запятой pwd.
Гленн Джекман
@glennjackman функция просто выходит без вывода или изменения dir :(
Azsgy
запустите функцию, затем введите echo $?- что такое статус выхода?
Гленн Джекман
черт возьми, я не должен был сомневаться в себе. Альтернатива выглядела лучше для меня, когда я нашел ее _O-
Rinzwind
1

Если вы добавите «/ ..» к имени файла, которое приведет вас к правильному каталогу, например cd /path/to/file.end/... Это работает на Cygwin в любом случае.

головной мозг
источник
4
Не работает в bash;) touch test && cd /home/test/test/..говоритbash: cd: /home/test/test/..: No such file or directory
Rinzwind