Saya baru saja memutakhirkan Ubuntu 16.04 ke 17.04 dan menemukan sedikit masalah dengan cd
perintah.
Katakanlah saya memiliki dua folder: album-01
&album-02
Di Ubuntu 16.04, jika saya melakukannya cd album*
akan pergi ke folder pertama yang ditemukanalbum-01
Tetapi di Ubuntu 17.04 baru, jika saya lakukan cd album*
itu menghasilkan saya
-bash: cd: too many arguments
Bagaimana cara membuatnya cd
di Ubuntu 17.04 seperti cd
di Ubuntu 16.04?
command-line
bash
cd-command
Hidayat
sumber
sumber
cd
dua lokasi, dan entah bagaimana berharap untuk mengetahui mana yang Anda inginkan.Jawaban:
Saya belum bisa mengujinya pada sistem 17.04 yang sebenarnya (hanya diverifikasi yang berfungsi pada 16.04), tetapi Anda harus dapat mengesampingkan perintah
cd
bawaan Bash dengan fungsi kustom Anda sendiri, yang membuang argumen tambahan apa pun kecuali yang pertama :Pembaruan: Seperti yang disarankan dalam komentar @ muru , versi di bawah ini mungkin berfungsi lebih baik dan mendukung panggilan
cd
tanpa argumen:Setelah Anda memasukkan baris ini di atas di terminal Anda, harap verifikasi apakah
cd
sekarang berperilaku seperti yang Anda inginkan. Jika demikian, Anda dapat membuat definisi fungsi ini tetap ada dengan menambahkan baris itu ke akhir~/.bashrc
file Anda . Kalau tidak, itu akan hilang segera setelah Anda mengakhiri sesi shell Anda saat ini.Perhatikan bahwa jika karena alasan apa pun Anda sementara perlu menggunakan perintah
cd
Bash built-in yang sebenarnya alih-alih fungsi kustom ini, Anda bisa menyebutnya dengancommand cd
alih - alih poloscd
.sumber
.sh
file kemudian membuat alias seperti:mcd="source /home/user/bin/cd.sh"
cd () { builtin cd "${@:1:1}"; }
sebagai gantinya.Jawaban singkat / Penanganan masalah
Untuk menjawab pertanyaan Anda dalam kasus persis ini, ini berfungsi
Tapi itu mungkin bukan fungsi yang Anda inginkan.
Apa yang berubah?
Tampaknya
config-top.h
di Bash-4.4 telah diperbarui untuk menambahkan opsi berikutDan
builtins/cd.def
merujuk kesalahan Anda di sini:Apa yang bisa saya lakukan jangka panjang ?:
Anda dapat mengkompilasi sendiri
bash
tanpa CD_COMPLAINS baru , tetapi itu akan membosankan. Anda dapat mendefinisikan kembalicd
fungsionalitas seperti yang disarankan di sini atau Anda dapat alias fungsi sepertiMembuktikannya
Bash 4.4 Beta masih berfungsi
Bash 4.4 Stable Release di tempat yang tidak berfungsi
sumber
cd alb*1
, untuk mencocokkan literal1
pada akhirnya bahkan tanpa tanda kurung. Saya bingung ide Anda dengan sesuatu yang lain pada awalnya.Saya belum pernah mengalami masalah ini karena saya selalu menggunakan Tab Completion.
Jadi, dalam kasus Anda, alih-alih menebak dengan tepat ke direktori mana yang saya inginkan, saya akan mengetik
cd al
Tabyang jika hanya ada satu yang cocok, melengkapinya dan jika ada 2 atau lebih selesai sampai di mana pencocokan berakhir dan TabTabdaftar pilihan.Berikut ini contoh dari sistem saya:
cd Un
Tabdiikuti oleh TabTabmenghasilkan
sumber
Ini terlihat seperti bug di Bash: per
man builtins
perilaku lama adalah yang benar.Anda dapat melaporkan bug di
bug-bash
milis; lebih detail di sini .Sebenarnya, bug itu dilaporkan (dulu). Jika Anda ingin Bash yang diperbaiki sekarang, sekarang, sekarang , inilah cara melakukannya dengan benar (diuji pada 17.10, harus bekerja pada yang lain juga).
Pertama buat direktori untuk dikerjakan, misalnya:
Dapatkan paket source dan dependensi build:
Edit
config-top.h
untuk mengubah ini (harus baris 32)untuk ini
Edit
debian/changelog
dan tambahkan entri seperti ini di bagian atas (Anda juga dapat menggunakan perintahdch -i
):Poin yang paling penting adalah menambahkan
+foo
ke nomor versi saat ini (foo
bisa berupa string huruf kecil apa pun; dan berhati-hatilah jika Anda menggunakandch -i
, itu akan menambah angka terakhir, jadi Anda harus mengembalikannya ke yang sekarang) dan menggunakan nama rilis yang benar (diartful
sini). Akhirnya, jalankandpkg-source --commit
.Anda kemudian dapat menjalankan
debuild
perintah, dan jika semuanya berjalan dengan baik (kesalahan tentangdebsign
dapat diabaikan) Anda harus memiliki beberapa.deb
di direktori induk, yang dapat Anda instal seperti biasa (tidak perlu menginstal semuanya, hanya yang Anda miliki sekarang; gunakandpkg -l | grep bash
untuk mencari tahu).Perhatikan bahwa nomor versi paket baru diatur sehingga Anda akan secara otomatis mendapatkan pembaruan di masa mendatang
bash
; jika pembaruan tidak memperbaiki masalah, Anda harus mengulangi proses di atas.(Jawaban ini pertama kali diposting pada pertanyaan rangkap ini .)
sumber