Bagaimana cara mencegah perintah 'cd' dari direktori home?


10

Masalahnya adalah bahwa kadang-kadang saya mengetik cdsecara tidak sengaja dan membawa saya ke direktori home.

misalnya saya berada di direktori yang memiliki direktori tersembunyi dan direktori yang terlihat, saya dengan cepat menekan cd+ tabdan itu membawa saya ke direktori home


30
Jika Anda berada di cdsuatu tempat secara tidak sengaja, gunakan cd -untuk kembali ke lokasi Anda sebelumnya - bash menyimpan $OLDPWDvariabel untuk tujuan ini. Lihat gnu.org/software/bash/manual/bash.html#index-cd
glenn jackman

4
Jika Anda benar-benar tidak ingin cdmelakukan apa pun, Anda dapat menulis sebuah fungsi bernama cdyang tidak melakukan apa-apa ketika tidak ada argumen yang diberikan, jika tidak panggilbuiltin cd "$@"
glenn jackman

2
Ide yang sangat buruk: HOME =.
Joshua

26
Rekomendasi terbaik saya yang tulus adalah untuk memperlambat dan belajar untuk memeriksa perintah sebelum Anda menjalankannya. Dengan kata lain: biasakan cdmelakukan apa pun yang dilakukannya. Jika Anda memiliki kebiasaan menjalankan perintah yang belum Anda periksa ulang, Anda akan mengalami masalah yang jauh lebih besar di kemudian hari. Misalnya Anda ingin memindahkan dua file ke direktori ketiga: mv a b dir/dan penyelesaian TAB tidak menghasilkan dirseperti yang Anda harapkan, Anda akan berakhir mengeksekusi mv a byang menimpa b. Belajarlah untuk berhati-hati, belajarlah melihat perintah sebelum menekan Enter.
egmont

1
@ Joe saya menulis sebuah skrip wrapper untuk rmmencegah menghapus direktori tingkat atas seperti /, /etc, /usr, /home, /var, dll tanpa override password. Terkadang kita membutuhkan perlindungan dari diri kita sendiri :)
WinEunuuchs2Unix

Jawaban:


14

Gunakan gedit ~/.bashrcdan masukkan garis-garis ini di bagian bawah:

cd() {
    [[ $# -eq 0 ]] && return
    builtin cd "$@"
}

Buka terminal baru dan sekarang ketika Anda mengetik cdtanpa parameter Anda hanya tinggal di direktori yang sama.


TL; DR

Jika Anda ingin benar-benar rumit, Anda bisa memasukkan layar bantuan ketika tidak ada parameter yang dilewati:

$ cd

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

Kode yang diperluas untuk mencapai hal ini adalah:

cd() {
    if [[ $# -eq 0 ]] ; then
        cat << 'EOF'

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level

    cd ../..        Move up two directory levels

    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

EOF
        return
    fi

    builtin cd "$@"
}

6
Tetapi kemudian Anda telah membuat lingkungan Anda berfungsi tidak seperti lingkungan lainnya. Mengapa tidak memanggil fungsi ncd(untuk "CD baru"), dan biarkan cdsendiri?
waltinator

@waltinator Saya dapat meningkatkan jawaban dengan peringatan tentang cara kerja cd (kosong) berbeda bagi orang selain pengguna rumah ~/.bashrc. Bisakah Anda memberikan satu atau dua contoh apa yang harus diperhatikan? misalnya Pengembang menggunakan cd (kosong) dalam skrip instalasi mereka. (Hipotetis tapi saya tidak bisa memikirkan sebuah kasus). Saya bisa menggulung contoh Anda menjadi jawaban dan menyarankan OP gunakan ncdsepanjang waktu, bukan cd.
WinEunuuchs2Unix

Saya suka menyesuaikan hal-hal. Tentang apa itu Linux. Tetapi saya memiliki aturan pribadi yang ketat untuk tidak mengubah fungsi (tidak ada kata pun dimaksudkan) dari perintah umum. Ini membuka masalah ketika Anda bekerja pada sistem lain atau ketika orang lain bekerja pada atau menasihati Anda pada Anda. Saya setuju dengan @waltinator dan Joe "baik" lainnya
Joe

6

Jika penyelesaian tab yang menyebabkan hal ini, salah satu opsi adalah membuat siklus penyelesaian melalui entri dengan segera. Ini dapat dilakukan dengan menggunakan opsi readlinemenu-comple alih-alih default complete:

bind 'tab: menu-completion'

Kemudian, di direktori home saya, misalnya:

$ cd <tab> # becomes
$ cd .Trash

Tentu saja, meski begitu Anda harus membaca apa yang sedang Anda eksekusi.


4

Inilah cara saya menempatkan dir dan pengguna saat ini di judul windows saya - Anda dapat menyesuaikannya dengan kebutuhan Anda, tetapi cd -, setara dengan cd $OLDPWDadalah solusi yang lebih baik.

Dari saya ~/.bashrc:

# from the "xttitle(1)" man page - put info in window title
update_title()
{
    [[ $TERM = xterm ]] || [[ $TERM = xterm-color ]]  && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}

cd()
{
    [[ -z "$*" ]] && builtin cd $HOME
    [[ -n "$*" ]] && builtin cd "$*"
    update_title
}

4

Masalahnya di sini bukan cd, dan itu tidak diperbaiki oleh teknologi.

Masalahnya adalah Anda, dan itu diperbaiki dengan kesabaran!

Jika Anda sering menemukan diri Anda mengetik dan mengirimkan perintah yang tidak Anda inginkan, berlatihlah memperlambat . Ambil napas, baca apa yang Anda ketikkan, dan periksa kembali sebelum menekan enter. Pikirkan baik-baik. Jangan terburu-buru.

Anda akan menemukan bahwa pendekatan ini tidak hanya menyelesaikan masalah yang ada, tetapi masalah lain yang jauh lebih buruk yang akan Anda hadapi jika Anda melanjutkan jalan Anda saat ini.


2
juga, setelah beberapa bulan / tahun penggunaan Anda akan lupa bahwa Anda mengubah perilaku dan akan memiliki masalah untuk bekerja di lingkungan lain.
pLumo

@RoVo Itu juga, poin bagus!
Lightness Races di Orbit

@RoVo Itu bisa terjadi dalam beberapa hari. Segera, jika Anda melakukan dual boot, alihkan ke VM ...
Joe

@Joe Akhir-akhir ini saya beralih di antara OSX di siang hari dan Windows di malam hari dan perubahan tata letak keyboard benar - benar membingungkan!
Lightness Races in Orbit

@LightnessRacesinOrbit Saya yakin! Saya memiliki dua keyboard notebook ukuran berbeda dengan tata letak yang hampir sama dan itu cukup buruk. Itu juga sebabnya saya belum pernah mencoba keyboard Dvorak. Hanya tidak yakin bagaimana ini berhubungan dengan pertanyaan.
Joe
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.