Saya memiliki baris ini di saya .bashrc
dan saya ingin tahu apa artinya ini
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Saya memiliki baris ini di saya .bashrc
dan saya ingin tahu apa artinya ini
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Jawaban:
$-
berarti 'bendera saat ini'.echo $-
mengembalikan "himBH". Itu semua adalah default.[[ $- != *i* ]] && return
benar-benar melakukan apa yang dikatakan di atas dalam komentar: memeriksa apakah bendera interaktif diatur. [[Dan]] membuatnya menjadi boolean sehingga berakhir dengan "benar" atau "salah". "false && return" menjadikannya "true && return" membuatnya mengeksekusi pengembalian.Bendera default dijelaskan lebih terinci:
h adalah untuk "hash semua": ini memberitahu bash untuk mengingat lokasi perintah yang telah ditemukannya dengan menanyakan PATH Anda.
i adalah untuk "interaktif": memasukkan input & mendapatkan kembali output.
m adalah untuk "monitor": ini memungkinkan kontrol pekerjaan
B adalah untuk "brace expand". Ini memungkinkan Anda untuk menggunakan ekspansi brace
H adalah untuk "sejarah berkembang". Inilah yang memungkinkan Anda untuk menjalankan kembali perintah dari riwayat Anda dengan memilih nomornya dengan tanda seru
Ngomong-ngomong. Saya sudah ...
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Saya kira pada dasarnya melakukan hal yang sama tetapi lebih mudah dibaca.
Pada dasarnya ini berarti "Jika flag shell tidak mengandung huruf kecil i, maka hentikan fungsi / skrip di sini".
[[ ]]
menunjukkan ekspresi kondisional dalam bash
$-
berarti bendera shell. Ini akan berisi "i" jika shell bersifat interaktif (mis. Anda dapat mengetik perintah, sebagai lawan dari, itu mengeksekusi skrip)
!=
berarti "tidak sama dengan".
*i*
adalah pola wildcard yang cocok dengan apa pun yang mengandung "i"
return
tanpa argumen berarti menghentikan eksekusi fungsi atau skrip saat ini.
&&
adalah operator AND logis . Ekspresi di sebelah kanan, dalam hal ini return
, hanya akan dievaluasi (dieksekusi) jika ekspresi di sebelah kiri adalah benar . Jadi dalam banyak bahasa pemrograman, a && b
adalah singkatan untuk if a then b
- ini disebut "evaluasi hubung singkat" dan itu membuat para guru pemrograman gila ketika Anda menggunakannya: D
Saya akan menganggap itu seperti yang dikatakan: jika bash tidak terbuka di shell interaktif, maka jangan lakukan apa-apa.
Saya tidak tahu keseluruhan fungsinya, tetapi mungkin ada perintah dan flag yang ditetapkan di bawah garis itu jika Anda memiliki bash terbuka di TTY.
$-
dan*i*
dan bagaimana cara mengetahui apakah mode interaktif atau tidak