Apa artinya “[[$ -! = * I *]] && kembali”?

22

Saya memiliki baris ini di saya .bashrcdan saya ingin tahu apa artinya ini

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Severus Tux
sumber

Jawaban:

33
  • $- berarti 'bendera saat ini'.
  • echo $-mengembalikan "himBH". Itu semua adalah default.
  • jadi ... [[ $- != *i* ]] && returnbenar-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.

Rinzwind
sumber
6

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 && badalah singkatan untuk if a then b- ini disebut "evaluasi hubung singkat" dan itu membuat para guru pemrograman gila ketika Anda menggunakannya: D

delt
sumber
2

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.

Petualang
sumber
terima kasih :) tapi saya berharap untuk tahu apa sebenarnya $-dan *i*dan bagaimana cara mengetahui apakah mode interaktif atau tidak
Severus Tux