Ben değilim terminalde bir bash betiği kaynak böylece ile hata çıkarken,
set -o errexit
Son derece sinir bozucu olan terminalimi öldürüyor, çünkü terminali kapatmam, başka bir tane açmam ve bazı değişkenleri sıfırlamam gerekiyor.
Şimdiye kadar
command || return
kodda satırlar tam olarak istediğimi yapıyor
set -o errexit
yapmak ... Ama tüm senaryo için yapılmasını istiyorum; sadece bir satır / komut değil
Site kurmak için komutlarla dolu bir dosyam var ve ben komut yapmamayı tercih ediyorum || dönüş
dosyadaki her satır için
Başka bir ayar seçeneği var mı, yoksa terminalden çıkmak yerine "geri dönecek" başka bir şey var mı?
- Sadece netlik için , senaryoyu öldürmek ve terminali terminalde çalışan bir hizmeti öldürmek için ctrl + C tuşlarına basmakla aynı durumda bırakmak istiyorum. command || returnbunu yapar. Ama || returndosyadaki her satıra yapışmak istemiyorum . Bu yüzden benzer bir şey arıyorum set -o errexit, bu terminalin kapanmasına neden olmaz
--- Not: İçinde iki satır bulunan aptal bir senaryo oluşturma (super.sh):
create_path=~/Desktop/site_builder/create.sh
source $create_path blah
Ve set -o errexitcreate.sh dosyasının üstüne yerleştirerek ,
beklediğim gibi çalışıyor. Ancak, sadece iki satırlı bir dosya oluşturmak zorundasınız, sadece terminalden çağırmak yerine başka bir bash betiği çağırmak için. Ugghhh
İşte bazı örnekler:
super.sh içinde
#!/bin/bash
create_path=~/Desktop/site_builder/create.sh
source $create_path blah
create.sh dosyasında
#!/bin/bash
set -o errexit
#line below this is a line that fails and will cause the script to stop and return to the terminal as expected
sed "s/@@SITE_NAME@@/$dirname"
~/Desktop/site_builder/template_files/base.html > ~/Desktop/$dirname/templates/base.html # a line with a stupid error
terminalde:
$ bash super.sh
beklendiği gibi çıktı:
my-mac$
Bu çalışıyor. Ne sinir bozucu bir çözüm.
Ben istiyorum üzerime terminali kapalı kalmadan D: ideal olarak, terminal değil super.sh dosyasından aptal super.sh dosyasında ne yürütmek. Yapmaya çalıştığım şey bu:
terminal komutu:
my-mac$ source $create_path blah
create.sh içinde hala var set -o errexit
İşte terminaldeki çıkış
sed: 1: "s/@@SITE_NAME@@/blah": unterminated substitute in regular expression
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
Ve sonra terminal donmuş. Ctrl + C çalışmıyor, Ctrl + D de çalışmıyor
Bunun yerine, set -o errexitsadece command || returncreate.sh dosyasında her yerde ifadeleri kullanırsanız , o zaman tam olarak ne istediğimi alıyorum, supser.sh satırlarını doğrudan terminalde yürütürken (terminalden super.sh çağırmak yerine). Ama bu da pratik bir çözüm değil.
Not: @terdon'un sadece bir çocuk kabuğunu yumurtlama hakkındaki cevabını beğendim, bu yüzden terminalin yerine komut dosyası aracılığıyla bir alt kabuk yumurtlama bitirdim, o ( )da tüm komut dosyası etrafında parantez kullanarak cevabını gösterdi. çalışır.
source $file_path argumentKomut dosyası ben denilen aynı kabuk yürütülmektedir (ne source, bana söylendi ... ve durum böyle davranır) command || returnifadeler terminalde yürütüyorum dosya