Перехід до батьківського каталогу файлу з cd?


9

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

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

На жаль, я не знаю жодних рішень, тож було б добре, якби ви могли допомогти!


4
Гм, ти маєш на увазі cd /path/to? Це змінить каталог до каталогу, у якому знаходиться файл file.end.
Алаа Алі

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` 

8

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

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }

Чи правильно я це зрозумів ?: функція fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} відповідь: bash: синтаксична помилка поблизу несподіваного маркера `pwd ', це дає мені помилку таким чином :(
Azsgy

2
@Atsch, тобі потрібна крапка з комою раніше pwd, і якщо ви визначаєте функцію в одному рядку, потрібна крапка з комою після pwd.
glenn jackman

@glennjackman функція просто вимикається без жодного виводу або зміни режиму :(
Azsgy

запустіть функцію, а потім введіть echo $?- що таке статус виходу?
glenn jackman

чорт, я не мав би сумніватися в собі. Альтернатива мені виглядала краще, коли я знайшов це _O-
Rinzwind

1

Якщо ви додасте "/ .." до імені файлу, яке переведе вас у правильну директорію, наприклад cd /path/to/file.end/... Це все одно працює на Cygwin.


4
Не працює в баш;) touch test && cd /home/test/test/..кажеbash: cd: /home/test/test/..: No such file or directory
Rinzwind
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.