Pergi ke direktori induk file dengan cd?

9

Saya menulis .sh untuk melakukan beberapa pekerjaan untuk saya, tapi saya sekarang pada titik di mana saya harus cd ke direktori file /path/to/file.end ada di. Terminal tidak memungkinkan

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

sayangnya tidak ada solusi yang saya tahu, jadi alangkah baiknya jika Anda bisa membantu!

Azsgy
sumber
4
Um, maksud Anda cd /path/to? Itu akan mengubah direktori menjadi direktori tempat file file.enditu berada.
Alaa Ali
1
Tidak, file tersebut variabel, dan saya ingin memasukkan path file (letakkan di terminal) dan kemudian pergi ke folder yang ada di
Azsgy

Jawaban:

10

Jenis cd $( dirname /path/to/file.end). Itu akan membawa Anda ke /path/to.

Penjelasan:

  • dirnamemengembalikan path lengkap untuk file (tanpa nama file, yang akan Anda dapatkan basename) - yaitu dirname /etc/apt/apt.conf.d/99update-notifiermengembalikan/etc/apt/apt.conf.d
  • ekspresi $(anything)digantikan oleh hasil dari perintah di dalam tanda kurung. Begitu cd $( dirname /etc/apt/apt.conf.d/99update-notifier)dieksekusi sebagaicd /etc/apt/apt.conf.d

Notasi lain (tapi tua dan berkecil hati) untuk hal yang sama adalah

cd `dirname /path/to/file.end` 
Guntbert
sumber
8

Anda tidak dapat cdmembuka file. Berikut ini adalah (command line) fungsi yang secara otomatis akan cdmenjadi jalan untuk path file yang diberikan memenuhi syarat:

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }
Rinzwind
sumber
Apakah saya sudah benar ?: function fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} jawabannya adalah: bash: kesalahan sintaksis dekat token tak terduga `pwd 'itu memberi saya kesalahan dengan cara ini :(
Azsgy
2
@ Atsch, perlu titik koma sebelumnya pwd, dan jika Anda mendefinisikan fungsi dalam satu baris, perlu titik koma setelahnya pwd.
glenn jackman
@glennjackman fungsi hanya keluar tanpa output atau perubahan dir :(
Azsgy
jalankan fungsinya, lalu masukkan echo $?- apa status keluar?
glenn jackman
Sial, aku seharusnya tidak meragukan diriku sendiri. Alternatifnya tampak lebih baik bagi saya ketika saya menemukannya _O-
Rinzwind
1

Jika Anda menambahkan "/ .." ke nama file yang akan membawa Anda ke direktori yang benar misalnya cd /path/to/file.end/... Lagipula itu bekerja pada Cygwin.

otak
sumber
4
Tidak bekerja di bash;) touch test && cd /home/test/test/..mengatakanbash: cd: /home/test/test/..: No such file or directory
Rinzwind