masalah shell init saat klik tab, apa yang salah dengan getcwd?

153

setelah saya klik Tab pada bash, pesan kesalahan akan muncul, apa yang salah?

symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success
symlink-hook: error retrieving current directory: getcwd: cannot access parent directories: Success

terkadang, pesan kesalahannya adalah:

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No s uch file or directory

bagaimana mengatasi masalah shell init?

hugemeow
sumber

Jawaban:

281

Ini biasanya terjadi ketika direktori Anda saat ini tidak ada lagi. Kemungkinan besar, dari terminal lain Anda menghapus direktori itu (dari dalam skrip atau apa pun). Untuk menghilangkan ini, jika direktori Anda saat ini diciptakan kembali, hanya cduntuk direktori lain (yang sudah ada) dan kemudian cdkembali; paling sederhana akan: cd; cd -.

Costi Ciudatu
sumber
2
saya tidak berpikir dir saya tidak ada, tidak ada orang yang menciptakannya kembali, saya di / root ... jadi masalahnya mungkin sedikit berbeda seperti yang Anda katakan ...
hugemeow
1
dapatkah Anda memeriksa variabel HOME env Anda? echo $HOME; jika itu menunjuk ke lokasi yang tidak ada, bukan itu.
Costi Ciudatu
1
(saya menggunakan shell di tmux) Tab berfungsi dengan baik beberapa kali, tetapi kadang-kadang ketika saya membuat tab baru dengan tmux, tekan Tab, dan kesalahan ini muncul, saya tidak tahu apa yang terjadi :(
hugemeow
@ kevinarpe Senang mengetahui hal itu, terima kasih! Saya selalu berpikir itu cukup pintar untuk tidak melakukan apa puncd .
Costi Ciudatu
2
@ kevinarpe, ya, $PWDdijamin oleh POSIX untuk didefinisikan. Lihat pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Charles Duffy
61

Cukup ganti direktori ke yang lain dan kembali. Mungkin yang telah dihapus atau dipindahkan.

Meetai.com
sumber
7

Secara kebetulan, apakah ini terjadi pada direktori menggunakan OverlayFS (atau jenis sistem file khusus lainnya)?

Saya baru saja mengalami masalah ini di mana versi bash lintas-kompilasi saya akan menggunakan implementasi internal getcwdyang memiliki masalah dengan OverlayFS. Saya menemukan informasi tentang ini di sini:

Tampaknya ini dapat ditelusuri ke implementasi internal getcwd () di bash. Saat dikompilasi silang, ia tidak dapat memeriksa penggunaan mallc, getcwd (), jadi ia berhati-hati dan menetapkan GETCWD_BROKEN dan menggunakan implementasi internal dari getcwd (). Implementasi internal ini tampaknya tidak berfungsi dengan baik dengan OverlayFS.

http://permalink.gmane.org/gmane.linux.embedded.yocto.general/25204

Anda dapat mengonfigurasi dan membangun kembali bash dengan bash_cv_getcwd_malloc=yes(jika Anda benar-benar membangun bash dan pustaka C Anda melakukan malloc panggilan getcwd).

lihat
sumber
Saya dapat memperbaiki kesalahan saya dengan melakukan pembaruan perpustakaan lengkap
Richard Day
5

Ya, cd; dan cd - akan bekerja. Alasan yang dapat dilihatnya adalah, direktori sedang dihapus dari terminal lain atau program lain dan membuatnya kembali. Jadi entri i-simpul dimodifikasi sehingga program tidak dapat mengakses entri i-simpul lama.

Viraj Kulkarni
sumber
Saya dapat memperbaikinya di ubuntu 14 dengan melakukan pembaruan perpustakaan lengkap di sini: digitalocean.com/community/tutorials/…
Richard Day