Kullanabilirsiniz .exec ./your-script
GNOME Terminali gibi bir terminal emülatörü, içinde çalışan ilk işlem - genellikle bir kabuk olan - bırakıldığında kapanır.
Zaten bir terminaldeyseniz ve bu terminalden çıkmadan önce yapmak istediğiniz tek şey, belirli bir komut dosyasını (veya programı) çalıştırmaksa, artık artık içinde çalışan kabuğa ihtiyacınız olmadığı anlamına gelir. Böylece kabuğun exec
yerleşimini, kabuğun komutunuz tarafından oluşturulan işlemle değiştirmesini sağlamak için kullanabilirsiniz .
- Senaryonuzda bu başka bir kabuk işlemi - tıpkı bir script çalıştırdığınızda ikinci bir kabuk işleminin nasıl oluşturulduğu gibi
exec
.
Sözdizimi örn .exec command
exec ./your-script
exec
: Bir örnek
Örneğin count
, geçerli dizinde adlandırılmış , yürütülebilir olarak işaretlenmiş ve bulunan bir kabuk komut dosyası olduğunu varsayalım . Bu içerir:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
Ve bir terminalde koşuyorum:
exec ./count
Bu baskılar rakamları 5
, 4
, 3
, 2
, ve 1
saniyede bir, ve daha sonra, terminal pencere kapanır.
Bunu, terminalinizdeki ilk işlemden başka bir şeyden çalıştırırsanız (örneğin, bash
başka bir kabuk örneğini başlatmak için ilk kez çalıştırdıysanız), bu sizi terminalden çıkmak yerine bu işlemi oluşturan kabuğa geri getirir . (Bu uyarı exit
temelli yöntemlere eşit olarak uygulanır .)
Kullanabilirsiniz ../your-script; exit
Kabuğunuza kendisini yeni işlemle (üzerinden exec
) değiştirmesini söylemek istemiyorsanız, ona yapışmasını söyleyebilir, ancak yeni işlem bittikten hemen sonra kendini bırakabilirsiniz.
Bunu yapmak için, komutunuzu ve exit
komutu ;
bir satırda verilebilecek şekilde birbirinden ayırarak çalıştırın .
Sözdizimi command; exit
örn ../your-script; exit
command; exit
vs. command && exit
Bunun kos ve heemayl'ın cevaplarında önerilen yönteme benzediğini fark edebilirsiniz . Fark şudur:./your-script && exit
&&
ikinci komutu, yalnızca ilk komutun sıfır çıkış kodu döndürerek başarılı olduğunu bildirmesi durumunda çalıştırır .
;
ilk komutun başarılı olup olmadığına bakılmaksızın ikinci komutu çalıştırır.
Hangisini istediğiniz belirli duruma bağlıdır. Komut başarısız olursa, çağrılan kabuğun (ve barındırma terminalinin) kalmasını ister misiniz? Eğer öyleyse, kullanın &&
; değilse kullanın ;
.
Ayrıca command || exit
, çağrılan kabuktan yalnızca başarısızlıkcommand
bildirildiğinde çıkar .