Terminal ditutup setelah memasukkan perintah yang tidak ada

3

Tampaknya ini adalah bug, tapi saya tidak yakin paket mana yang harus dilaporkan. Coba ini:

  • Buka terminal gnome
  • shift- ctrl- t(membuka tab baru)
  • Tipe: foo foo &
  • Tab ditutup

Perilaku yang benar akan menjadi Command not found.

Ini terjadi setiap kali pada terminal gnome. Pada xterm (tanpa tab tentu saja) ini berfungsi secara acak - mungkin 2 dari 3 kali dicoba.

cos
sumber
Ubuntu dan versi kernel apa yang Anda gunakan? Ini berfungsi sebagaimana mestinya bagi saya.
Luís de Sousa
Saya baru saja menguji ini di komputer lain dan berfungsi seperti yang diharapkan. Saya tidak punya .bash_profile khusus, dan versi Ubuntu sudah cakap dengan pembaruan. Sepertinya masalah ini tidak mudah direproduksi.
cos

Jawaban:

4

Biar saya tebak, ada opsi set -e(atau bentuk panjang set -o errexit) di .bashrc( .bash_profile) Anda.

-e

Keluar segera jika pipa (yang mungkin terdiri dari satu perintah sederhana ), perintah subkulit yang terlampir dalam tanda kurung, atau salah satu perintah yang dieksekusi sebagai bagian dari daftar perintah yang dilingkupi oleh kawat gigi (lihat SHELL GRAMMAR di atas) keluar dengan non Status -zero. Shell tidak keluar jika perintah yang gagal adalah bagian dari daftar perintah segera setelah beberapa saat atau sampai kata kunci, bagian dari pengujian mengikuti kata if atau elif yang dilindungi, bagian dari perintah apa pun yang dijalankan di && atau || daftar kecuali perintah mengikuti akhir && atau|| , perintah apa pun dalam pipa kecuali yang terakhir, atau jika nilai pengembalian perintah dibalik ! . Jebakan pada ERR , jika disetel, dieksekusi sebelum shell keluar. Opsi ini berlaku untuk lingkungan shell dan masing-masing lingkungan sub-kulit secara terpisah (lihat PERLUASAN LINGKUNGAN PERINTAH di atas), dan dapat menyebabkan subkulit keluar sebelum menjalankan semua perintah dalam subkulit.

- bash (1)

Opsi ini sangat berguna untuk beberapa skrip - memungkinkan untuk menghindari banyak || exit 1, misalnya alih-alih

cd /var/ || exit 1
tar -cvf myarchive.tar "$SOMEDIR" || exit 1
rm -r "$SOMEDIR"

kamu bisa menulis

set -e
cd /var/
tar -cvf myarchive.tar "$SOMEDIR"
rm -r "$SOMEDIR"

Tapi tentu saja tidak ada alasan untuk mengaturnya untuk sesi bash interaktif.

Dmitry Alexandrov
sumber
1
Ini mungkin jawaban yang tepat, tapi tolong jelaskan lebih terinci.
chaskes
Lihat linuxcommand.org/lc3_man_pages/seth.html untuk informasi lebih lanjut. -e Exit immediately if a command exits with a non-zero status.
John WH Smith
2
@ JohnWHSmith Terima kasih atas tautannya. :) Saya menyarankan jawaban akan ditingkatkan dengan memberikan lebih detail dalam jawaban untuk OP.
chaskes
@kos Yah. Saya tidak begitu menyadari detail mana yang mungkin saya berikan. Kutipan dari manusia dan contoh penggunaan yang tepat mungkin (ditambahkan)?
Dmitry Alexandrov
@ DmitryAlexandrov Ya, persis. Ini jawaban yang jauh lebih baik sekarang.
chaskes
2

Periksa dan verifikasi bahwa Anda tidak memiliki konfigurasi bashrc atau profil untuk mengubah perilaku normal dari instance ini.

Cara terbaik untuk memverifikasi ini adalah dengan mencadangkan file bashrc dan profil Anda saat ini lalu ganti yang aktif dengan salinan asli dari kedua file tersebut. Keluar lalu masuk kembali dan periksa apakah Anda masih memiliki perilaku ini.

Jika ini menyembuhkan cacat ini, tambahkan dengan hati-hati konfigurasi khusus Anda, dan perhatikan perubahan terakhir yang dilakukan jika cacat itu kembali.

LD James
sumber