Mengapa "sudo cd" tidak berfungsi?

Jawaban:

56

cdadalah shell builtin. sudohanya berfungsi dengan executable. Anda bisa melakukannya sudo sh -c 'cd dirname'tetapi begitu shell keluar, Anda kembali ke direktori tempat Anda memulai. Jika Anda mengatakan apa yang ingin Anda capai maka saya dapat membantu Anda menemukan cara untuk melakukannya.

Dennis Williamson
sumber
2
Tapi kemudian sudo pwdtidak akan berhasil? (Aku selalu membayangkan bahwa sudo cd tidak bekerja, tapi Anda hanya tidak melihat hasil setelah sudokembali. Tapi itu hanya menebak liar. Mungkin tidak cdjuga pwdsebenarnya built-in di Bash pada Mac. Menjalankan which cd tidak memang memberikan hasil. Menjalankan sudo cd /tidak memberi saya kesalahan, tetapi memang tidak menghasilkan direktori kerja yang berubah.)
Arjan
2
@Arjan: pwdjuga merupakan executable eksternal sehingga akan berfungsi. Perhatikan bahwa pada beberapa sistem, ada yang cddapat dieksekusi, tetapi sebagian besar tidak berguna. Ngomong -ngomong, menggunakannya type -a cdjauh lebih informatif daripada which.
Dennis Williamson
1
Bagus! type -a cdmenunjukkan keduanya cd is a shell builtindan cd is /usr/bin/cddi Mac saya. Dan juga untuk pwddan echo. Dan keduanya sudo pwddan sudo echo "Hello world"melakukan memberikan hasilnya. Namun, type -a returnhanya menghasilkan return is a shell builtin, dan sudo return 3menunjukkan kepada saya sudo: return: command not found. Jadi, saya kira pertanyaannya adalah: apakah OP mendapatkan pesan kesalahan, atau apakah OP tidak melihat cdpekerjaan tanpa kesalahan? (Atau: OS apa yang digunakan OP.)
Arjan
sudo sh -c 'cd dirname'tidak melakukan apa pun untuk saya.
Peter Niederwieser
1
@Arjan saya menemukan penjelasan: Ini adalah sesuatu seperti hack kompatibilitas yang dalam. Itu tidak melakukan fungsinya, tetapi telah datang dari efek samping yang nyata cdmiliki. Dan itu tidak dapat melakukan apa-apa alih-alih gagal ketika shell saat ini tidak memiliki cdperintah. Setiap shell yang pernah digunakan oleh manusia cd, termasuk /bin/sh. Tetapi sebuah program yang, dilihat dari kernel sistem operasi, sebuah shell bisa jauh lebih sederhana dari itu, bahkan hanya beberapa baris kode. Lihat Apa gunanya cdperintah eksternal?
Volker Siegel
72

Alih-alih mencoba menggunakan sudo -suntuk memulai shell root dan kemudian cukup cdke direktori.
Setelah selesai sebagai root, tekan CtrlDatau ketik exit.


Sebagai Arjan mengisyaratkan dalam komentarnya di bawah ini, penting untuk dicatat bahwa sebagai root, seseorang dapat dengan mudah melakukan kerusakan pada komponen sistem penting. Gunakan dengan hati-hati!

oktosiTe
sumber
4
Tapi: hati-hati, begitu satu root ...
Arjan
7

Anda hanya sudapat menjadi root dan kemudian cdsemua yang Anda inginkan ... Saya tahu jawaban telah diterima, tetapi jika seseorang tidak ada dalam daftar sudoers maka ini adalah satu-satunya pilihan.

Alex
sumber
Di sisi lain, jika tidak ada kata sandi root, atau Anda tidak mengetahuinya, sudo adalah satu-satunya pilihan.
Liam