Saya perlu menjalankan skrip ketika saya masuk dan keluar di Ubuntu saya.
Saya mencoba memasukkan skrip ke dalam skrip saya ~/.bash_login
tetapi tidak berhasil.
Apakah ada lokasi yang lebih baik untuk menjalankan skrip saya?
Script saya terletak di /home/gsd/script/login.sh
dan dapat dieksekusi.
edit:
skrip saya berjalan saat saya mengetik: /home/gsd/script/login.sh
dan diset dengan + x
sekarang, saya hanya punya: touch /home/gsd/test.txt
di ~/.bash_login
untuk menguji.
file test.txt tidak pernah dibuat
edit 2:
gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd 29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd 220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd 3136 2011-11-04 08:00 .bashrc
~/.bash_profile
?-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_login
chmod +x .bash_login
chmod +x .bash_login
(atur bit yang dapat dieksekusi pada .bash_login). Manual Bash agak membingungkan di area ini, tetapi Bash tidak eXecute .bash_login seperti skrip shell. Itu membaca file dan kemudian menjalankan perintah di dalamnya (Anda dapat melakukan sesuatu yang serupa dengan menjalankansource ~/.bash_login
).Jawaban:
Jika .bash_profile ada, maka Bash tidak akan membaca .bash_login (atau .profile). Fitur yang mengganggu ini dijelaskan dalam beberapa versi manual Bash, tetapi tidak semua.
.bash_profile
dan.bash_login
analog, jadi saya sarankan Anda memasukkan perintah Anda.bash_profile
, karena ini umum digunakan dan.bash_login
relatif tidak dikenal. Juga pertimbangkan untuk menempatkan perintah Anda.bashrc
sebagai gantinya.bash_profile
. Manual ini menjelaskan perbedaan antara "shell non-login interaktif" dan "shell login interaktif", jadi pastikan untuk membaca bagian itu.Manual Referensi Bash GNU versi 4.1: Bash Startup Files mengatakan:
Lihat juga pertanyaan ini pada superuser , dan Bash howto ini (Jangan terhalang oleh alamat freeunix.dyndns.org:8088 --- ini masih merupakan manual yang berkualitas baik dan saya telah menggunakannya selama bertahun-tahun).
Perbarui , karena Anda mengatakan Anda tidak memiliki .bash_profile.
Sepertinya Anda tidak menggunakan apa yang disebut "shell non-login interaktif" (Lihat manual Bash untuk deskripsi terperinci).
Untuk menguji ini, menambahkan sesuatu seperti berikut setiap file:
.bashrc
,.bash_profile
dan.bash_login
.Kemudian keluar dan masuk lagi. Saat Anda masuk, saya yakin Anda hanya akan melihat frasa "DEBUG: I .bashrc" tetapi bukan "I .bash_profile". Jika demikian, itu berarti Anda adalah "shell non-login interaktif", yang berarti bahwa Bash akan memanggil
.bashrc
tetapi tidak.bash_profile
. Untuk informasi mengapa dotfile seperti ini, lihat posting @Andrejs Cainikovs di bawah ini dan http://mywiki.wooledge.org/DotFilessumber
Shell login, terlepas dari apakah mereka interaktif atau non-interaktif, baca dan jalankan
.profile
Kerang interaktif membaca dan mengeksekusi
.bashrc
.Seringkali Anda akan melihat
/etc/profile
sumber itu.bashrc
- sehingga semua pengaturan yang dibuat.bashrc
juga akan berlaku di shell login terlepas dari apakah itu interaktif atau non-interaktif.Urutan eksekusi skrip inisialisasi untuk shell tergantung pada apakah shell itu interaktif atau non-interaktif dan tidak terkait dengan apakah itu script login atau tidak.
Ketika bash dipanggil sebagai shell login interaktif, ia membaca dan mengeksekusi perintah dari
/etc/profile
. Kemudian Bash kemudian akan mencoba untuk menjalankan HANYA file pertama ada dan dapat dibaca sebagai berikut:.bash_profile
.bash_login
.profile
Jika salah satu dari file ini ditemukan tetapi tidak dapat dibaca, itu akan menyebabkan kesalahan. Tidak ada kesalahan jika ada yang TIDAK ditemukan.
Proses yang sama diikuti ketika shell login non-interaktif dipanggil dengan
--login
opsi.sumber
.profile
file dibaca dan dieksekusi hanya ketika pengguna masuk menggunakan antarmuka grafis. Kalau tidak, itu tidak dibaca.~/.profile
pasti dibaca dalam shell login non-grafis (Saya diuji dengan beralih ke terminal lain melaluiCtrl+Alt+F2
dan masuk di sana)..profile
tidak dibaca, hanya.bashrc
Pastikan skrip yang ingin Anda jalankan dapat dieksekusi. Jalankan
chmod +x scriptname
untuk melakukan itu. Pastikan juga skrip dimulai dengan shebang yang benar (#!/bin/bash
untuk skrip shell). Terakhir, gunakan semua path lengkap ketika mengeksekusinya, misalnya,/usr/bin/echo
alih-alihecho
hanya memetikan lingkungan yang akan dieksekusi skrip Anda tidak identik dengan yang Anda gunakan sebelumnya.sumber
Bash hanya mencari
.bash_login
atau.profile
file jika dijalankan sebagai shell login interaktif. Ketika dijalankan sebagai shell non-login interaktif itu berbunyi.bashrc
.Biasanya ini adalah kasus kedua, yaitu ketika Anda menjalankan
gnome-terminal
bash dijalankan sebagai shell non-login.Ini dengan jelas menyatakan bahwa jika Anda boot ke Gnome,
.bash_login
tidak akan dieksekusi. Tetapi jika Anda menurunkan runlevel untuk mem-boot langsung ke bash, file yang sama akan dijalankan setelah login berhasil.Saya berasumsi
.bash_login
akan dieksekusi jika koneksi SSH jarak jauh juga.Sebagian robek dari sini .
sumber