Я пишу .sh, чтобы выполнить какую-то работу за меня, но сейчас я нахожусь в точке, где мне нужно перейти в каталог, в котором находится файл /path/to/file.end. Терминал не позволяет [ 111]
cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory
К сожалению, я не знаю обходного пути, поэтому было бы неплохо, если бы вы могли помочь!
Тип 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`
Если вы добавите «/ ..» к имени файла, которое приведет вас в правильный каталог, например cd /path/to/file.end/..
. Так или иначе, он работает на Cygwin.
Вы не можете cd
в файл. Вот функция (113) [командной строки] , которая автоматически cd
входит в путь для заданного полного пути к файлу:
function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }