Bisakah seseorang tolong jelaskan bagaimana exit
perintah itu bekerja di terminal Unix?
Pencarian man exit
dan which exit
tidak membantu dan saya telah menemukan masalah berikut.
Setelah menginstal paket add-on untuk Anaconda dan PyCharm pada sistem Red Hat baru saya, saya perhatikan bahwa ketika saya menelepon exit
untuk keluar dari sesi terminal saya akan mendapatkan serangkaian kesalahan, dan kemudian terminal berhenti seperti yang diharapkan. Kesalahan tampaknya menunjukkan bahwa panggilan saya exit
memicu panggilan rm ~/anaconda3/.../
danrm ~/PyCharm/....
, menyebabkan kesalahan. Semua direktori juga tampak sebagai lokasi paket yang saya unduh untuk program-program ini (yaitu numpy), lihat di bawah.
$ exit
rm: cannot remove ‘~/anaconda3/lib/python3.5/site-packages/numpy/core’: Is a directory
...
...
Terselesaikan
Dalam ~/.bash_logout
file saya , ada satu baris
find ~ -xdev ( -name *~ -o -name .*~ -o -name core ) -exec \rm '{}' \;
Mengomentari baris ini menghentikan pesan kesalahan. Tampaknya untuk mencari dan menghapus semua file sementara. Tetapi ia juga berusaha menemukan direktori dengan kata "inti" di dalamnya, dan menghapusnya juga. Ini adalah preset dalam sistem.
sumber
exit
untuk keluar dari itu sesi terminal - atau yang yang terjadi setiap kali Anda menggunakanexit
setelah itu?exit
itu alias?core
file adalah karena mereka biasanya file crashdump ( core dumps ) yang mengambil ruang tetapi jarang bermanfaat kecuali jika Anda mengembangkan perangkat lunak yang mogok. Dalam hal ini berusaha menghapus direktori bernamacore
, yang gagal (dan untungnya gagal -numpy.core
sangat penting untuk NumPy!).ulimit -c 0
default). Itufind -exec rm
perintah bukanlah sesuatu yang saya ingin pula, tapi Anda bisa menambahkan-type f
untuk itu. Anda juga dapat membuatnya jauh lebih efisien menghapus banyak file dengan menggunakan-exec rm {} +
alih-alih... \;
, sehingga batch banyak args ke saturm
baris perintah (seperti xargs)Jawaban:
Yah biasanya Anda hanya akan melihat eksekusi setelah keluar dari shell jika Anda mengkonfigurasi ini secara manual. Tapi mungkin salah satu paket yang Anda instal datang dengan skrip shell bash exit ...
memeriksa;
mungkin Anda akan menemukan panggilan skrip dari sana, ini yang aneh ...
sumber
find -xdev ...
.man bash
Perangkap seperti itu sering digunakan untuk membersihkan file tmp saat keluar, lihat /programming/687014/removing-created-temp-files-in-unexpected-bash-exit
Tentukan jebakan keluar seperti ini (untuk pengujian yang lebih baik dalam shell baru):
Tampilkan perangkap EXIT yang ditentukan:
Uji:
Catatan yang
exit
mungkin "dipanggil" juga secara implisit. Jadi, alih-alihexit
Anda bisa juga memicu jebakankill -HUP $$
.sumber
type -a exit
->exit is a shell builtin
adalah bagaimana Anda tahu untuk membaca halaman bash man (atau menjalankanhelp exit
bukan manusia) di tempat pertama.The
exit
perintah khusus built-in perintah dalam kerang. Itu harus built-in karena perlu keluar dari proses shell.Itu keluar shell dengan status keluar yang disediakan jika ada atau yang dari perintah terakhir sebaliknya.
Setelah keluar, shell akan menjalankan
EXIT
perangkap jika ada. Lihat outputtrap
(dalam cangkang mirip Bourne) untuk yang saat ini ditetapkan.Dengan banyak kerang, jika shell itu dipanggil sebagai shell login (beberapa sistem / pengguna mengkonfigurasi emulator terminal untuk memulai shell login), juga akan menjalankan kode yang disimpan dalam file khusus seperti
~/.logout
,~/.zlogout
,~/.bash_logout
dan mungkin sesuai yang di/etc
tergantung pada shell .Anda bisa melakukan
set -x
sebelum memanggilexit
untuk mengetahui dari mana perintah-perintah itu dijalankan.sumber
set -x
set -x
output dengan menjalankan bash dengan cara yang tidak akan menghapus atau menutup terminal setelah itu keluar, atau mungkin dengan melakukanset -x
,exec &> exit_log.txt
kemudian ketik secara membabi butaexit
.exit
adalah perintah "builtin" dari bash, jadi tidak heranman exit
tidak membantu.Dokumentasi yang tepat dapat diperoleh dari halaman manual
man bash
, atau dengan perintah builtinhelp
dari bash (help exit
).Jika Anda benar - benar ingin tahu cara kerjanya, lihat sumbernya: http://git.savannah.gnu.org/cgit/bash.git/tree/builtins/exit.def?h=bash-4.4
sumber