printf %s\\n "$-"
Tek harfli seçenekler tek bir dizede listelenir.
Bu parametre aşağıdaki gibi de kullanılabilir:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
İlk önce kabuk -f
ilename genişlemesini devre dışı bırakmak için eşzamanlı olarak $-
- varsa - için bir değer kaydederken $1
. Daha sonra, hiçbir +f
glob oluşmaz ve son dosya adı genişletme bir kez daha etkinleştirilir ve muhtemelen devre dışı bırakılır.
Örneğin , ilk önce -f
değer $-
kaydedildiğinde ilename genişlemesi zaten devre dışı bırakılmışsa , kaydedilen değeri şöyle olacaktır (en azından) :
f
Ve böylece set
tekrar çalıştırıldığında, şöyle çalışır:
set +f -f
Hangi sadece seni başladığın yere geri koyar.
set +o
Tüm listeler set
tablo kabuk seçeneklerini (bkz Jason'ın cevabını için shopt
mümkün - o da bir kelime? - seçenekler) kabuk yeniden giriş için güvenli bir biçimde. Bu şekilde şunları da yapabilirsiniz:
state=$(set +o)
set -some -crazy -options
eval "$state"
Sırasıyla kabuk seçeneklerinin durumunu kaydetmek, değiştirmek ve geri yüklemek için.
shopt
İyonları ve set
tablo seçeneklerini tek seferde işlemek için :
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Ayrıca , kabuğun şu anda ayarlanan değişkenlerinin bir listesini eklemek için herhangi bir argüman set
olmadan da çağrı yapabilirsiniz - kabuğa tekrar giriş yapmak için de verilir. Ve - bash - ayrıca typeset -fp
şu anda bildirilen tüm kabuk işlevlerini de içerecek şekilde komutu ekleyebilirsiniz . Hepsini bir araya getirip eval
hazır olduğunuzda toplayabilirsiniz . alias
Aynısı için argümanlar olmadan bile çağrı yapabilirsiniz. Bu ... olsa da örtbas edebilir. Sanırım var "$@"
- ki bunu bash
yapmadan önce ilk önce bir diziye koymak zorunda kalacaksınız set
.
Hayır, ayrıca var trap
. Bu biraz komik. Genellikle:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... sadece yazdırılır bu benim alt kabuktur altkabuk yeni bir süreç olup kendi belirledi alır çünkü trap
s - herhangi miras kalmaması ve trap
- s ancak üst açıkça göz ardı ettiği bu (gibi trap '' INT
) .
Ancak:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
bir komut değiştirme alt kabuğunda çalıştırılan ilk ve tek komut olduğunda özel olarak davranır, çünkü şu anda ana kabuğun traps
güvenli bir şekilde tekrar girmesi için alıntılanan bir biçimde ayarlanmış olan ana kabuğun bir listesini üretir . Yapabileceğiniz böylece Ve save_traps
, daha sonra set
değişkenler olmadan - dinlenme ve tüm Daha önce bahsedildiği - hemen hemen tüm kabuk durumuna kilitlenmek için. Açıkça eklemek export -p
ve readonly -p
orijinal kabuk var niteliklerini geri yüklemek isteyebilirsiniz .
Neyse, bu kadar yeter.
set +o
veshopt
? (shopt
bir kelime yapabilmek içinsettable
, man sayfasında kullanılır, bu yüzdenshoptable
benim için çalışır)