Set -e ne yapar?


28

Bulduğum bir betiğim var ve çalışmasını sağlamaya çalışıyorum, Apache çalışma zamanı kitaplıklarını indirip kuruyor. İlk satır set -eve bir hataya neden oluyor; ne gelmez set -emi?

Yanıtlar:


22

Bu yerleşik o kadar karmaşık ki kendi bölümünü hak ediyor.

set, kabuk seçeneklerinin değerlerini değiştirmenizi ve konumsal parametreleri ayarlamanızı veya kabuk değişkenlerinin adlarını ve değerlerini görüntülemenizi sağlar.

-eseçenek

-e

Tek bir basit komuttan (bkz. Basit Komutlar), parantez içine alınmış bir alt kabuk komutundan (bkz. Komut Grubu)) veya ekli komut listesinin bir parçası olarak yürütülen komutlardan birinden oluşan bir boru hattı (bkz. Boru Hatları) derhal çıkın. kaşlı ayraçlar (bkz. Komut Grubu) sıfır olmayan bir durum döndürür. Başarısız olan komut, bir süre sonra veya anahtar kelimeye kadar hemen ardından komut listesinin bir parçasıysa, bir if ifadesinde testin bir parçası, & & veya || final && veya || komutunu takip eden komut hariç, bir boru hattındaki herhangi bir komuttan başka bir komut yoksa veya komutun geri dönüş durumu! Kabuk çıkmadan önce, eğer ayarlanmışsa, ERR'deki bir tuzak yürütülür.

Bu seçenek kabuk ortamı ve her alt kabuk ortamı için ayrı ayrı uygulanır (bkz. Komut Yürütme Ortamı) ve alt kabuktaki tüm komutları çalıştırmadan önce alt kabukların çıkmasına neden olabilir.

Kaynak: www.gnu.org

@ Psusi adlı kullanıcının yorumu nedeniyle düzenlendi.

Ek olarak bash el kitabı sayfasını okuyabilirsiniz.

man bash 

bölümünde: SHELL BUILTIN COMMANDS

veya sorun

help set 

kısa bir yardım mesajı için.


1
Yerleşik bir komut olduğundan, istediğiniz help setve tam bash el kitabı, info bashbash-doc yüklüyse, olur.
psusi 18:13

Açıklama açıklama için @psusi. help setve / veya man bashbunun için doğru olanlardır set.
NickTux

12

set -e Kısacası, bash betiğinizin en üstünde olduğunda, betiğin betiğindeki herhangi bir satırın başarısız olması durumunda (el kitabında listelenen istisnalar dışında) çıkmasını söyler. [1]

Bir hata ayıklama seçeneği olarak, genellikle set -x, her bir genişletilmiş komut satırını "+" işaretiyle çalıştırmadan önce yazdırmak için kullanılır . [2]

Daha fazlasını görün:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html


2
Basit bir açıklama için teşekkürler. Dockerfiles'te set -xe'yi sık sık görüyorum ve şimdi nedenini biliyorum :)
ymakux
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.