cd ke direktori sebelumnya tanpa gema dari nama direktori

9

Jawaban ini memberi saya cd -singkatan untuk mengubah ke direktori saya sebelumnya di Bash. Itu memang memiliki masalah besar: ia mencetak direktori yang diubahnya, membuang ruang layar saya, karena direktori itu kemudian diulang dalam prompt di baris berikutnya.

Saya tahu saya bisa melakukannya cd $OLDPWD, juga disebutkan dalam jawaban itu, dan cd - >/dev/nulltetapi itu jauh lebih mengetik.

Di bashhalaman manual tertulis:

... atau jika - adalah argumen pertama, dan perubahan direktori berhasil, nama path absolut dari direktori kerja baru ditulis ke output standar.

Bagaimana saya bisa membuat -tidak menjadi argumen pertama? Dengan menggunakan salah satu cdargumen opsional? Adakah cara lain untuk menekan gema atau meminimalkan pengetikan tanpa perlu mendefinisikan fungsi / alias pada setiap mesin yang bekerja dengan saya?

Ishran
sumber
Pertanyaan yang hampir sama di sini ...
don_crissti

Jawaban:

12

cdhanya mempertimbangkan argumen pertama, mengabaikan yang lain. Tidak ada opsi yang memengaruhi gema dari pathname sebelumnya (mungkin yang didokumentasikan -@memang memiliki efek itu, tetapi itu adalah opsi yang tidak valid pada sistem saya).

Jika Anda tidak ingin menggunakan alias / fungsi, yang dapat memberi Anda lebih sedikit karakter untuk diketik daripada cd -, atau dialihkan ke /dev/null, saran saya adalah mulai menggunakan ekspansi tilde khusus di bash:

cd ~-

Dari bashhalaman manual:

Jika awalan tilde adalah `~ - ', nilai variabel shell OLDPWD, jika diset, diganti.

Ini tampaknya merupakan area lain di bashmana beberapa makna khusus diciptakan. Ekspansi Tilde biasanya bekerja pada $ DIRSTACK, dimanipulasi / diselidiki oleh pushd,, popddan dirs, dapat digunakan dalam perintah lain juga ( cp ~-/somefile .) dan jika Anda telah menggunakannya pushdAnda dapat menggunakan ~N(di mana N adalah sejumlah level yang didorong kembali) untuk sampai ke direktori ini (untuk cdatau perintah lainnya).


BTW jika Anda memiliki akun di beberapa mesin dan dengan asumsi Anda menggunakan ssh untuk login ke mereka dari satu tempat, Anda harus mempertimbangkan untuk menambahkan ke ~/.bashrc:

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

dan kemudian memiliki skrip di mesin kerja Anda yang digunakan scpuntuk "mendorong" bash_commonke masing-masing mesin tersebut. Dengan begitu Anda dapat menambah dan berbagi fungsionalitas umum melalui beberapa mesin dengan overhead yang minimal.

Anthon
sumber