Terminal uygulamasını (mac) yeniden başlatmadan terminalden bash'i yeniden başlatın.


46

Bu soruyu cevaplamak için etrafa baktım ve ısırdım, ama onu bulmuyorum (ki bu garip).

Benim sorum şu, bash oturumunu mac'taki terminal içinden yeniden başlatmanın basit bir yolu var mı? Sadece terminal uygulamasını kapatıp tekrar başlattığım gibi aynı davranışı istiyorum (tüm değişkenler sıfırlandı, .bash_profile kaynaklı vb).

.Bash_profile'nin nasıl kaynaklandığını biliyorum, ama istediğim bu değil. Bunu yapmak istememin nedenlerinden biri, bash istemim için bir eklentinin renklerin birden çok kez yüklenmesini önleyen bir koda sahip olmasıdır. Bu nedenle, kaynak .bash_profile, renk değişkenlerini yeniden yüklemez ve değişikliklerin etkili olması için terminal uygulamasını yeniden başlatmam gerekir.

Yanıtlar:


64

exec bash geçerli kabuk işlemini (yeni bir örnek) bash ile değiştirmelisiniz.


2
Terminal uygulamasındaki bash etkileşimli bir kabuktur ve exec bashyalnızca o etkileşimli kabuğu başlatır mı? Ayrıca exec komutunun ne yaptığını ve seçeneklerini tam olarak açıklayabilir misiniz? Teşekkürler!
Mattias

exec, mevcut işlemi yenisiyle değiştirir. Bash'in çok iyi yazılmış, fakat ne yazık ki, manpage araması zor; yazın man bash, SHELL BUILTIN KOMUTLARI dizgesinin son örneğini bulun ve ardından çalıştırmak için aşağı kaydırın. Kısacası, -cbayrağını geçmek onu (herhangi bir amaç için gerekli olabilir, bilmiyorum) herhangi bir çevre değişkeni olmadan yayınlayacaktır ve diğer argümanlar -l ve -a muhtemelen istediğiniz şeyler değildir (tarihsel gibi görünüyorlar) / belirsiz ve belirli özellikler). Komuttan çıkarsanız, geçerli kabuktaki yeni dosya tanımlayıcılarını açmak için exec komutunu da kullanabilirsiniz.
Muzer

Geçerli kabukta yeni dosya tanımlayıcıları açmak için exec kullanımına bir örnek gösterebilir misiniz? Ve etkileşimli / giriş kabuğu ile ilgili sorum ne olacak? Kabuk terminalde çalışmakta mıdır ve etkileşimli bir kabuktur ve tüm exec komutu dokunur. Son olarak, bu sorunun onaylanan cevabı, -l bayrağıyla exec komutunu önerir, ancak ne yaptığını anlamadım. Çok sorduğum için üzgünüm, kullandığım komutları anlamak istiyorum.
Mattias

1
Üzgünüm evet. Mac'lerden emin değilim, ancak Linux dünyasında en azından grafiksel bir terminalden çalışan kabuklar (genellikle) oturum açma kabukları değil ve yalnızca etkileşimli kabuğu yeniden başlatıyorsunuz, terminalin kendisi veya oturum açma kabuğunuz değil. -lBurada bash için bir argüman ve sadece bir giriş kabuğu gibi davranmasını sağlar. Geçerli kabuktaki exec 4<>test.txtdosya tanımlayıcılarını açmanın sorunuzla hiçbir ilgisi yoktur, ancak örneğin dosya tanımlayıcısını test.txt dosyasına 4 nokta yapmak için kullanabilirsiniz . Ardından kabuğunuzun geri kalanında echo test>&4test.txt dosyasına çıktı alabilirsiniz .
Muzer

1
Ben tamamen katılıyorum Söyleyemem bu nedenlerle @Muzer, OSX GUI terminal emülatörleri giriş kabukları çalışacaktır karar verdi .
terdon

1

Kabul edilen cevap bash kullanan ve OP'nin sorduğu gibi bir kabuk için harika, ancak MacOS'ta Terminal'i varsayılan olmayan bir kabuk (zsh) ile kullanıyorum ve komutun exec bashaçıkça çalıştırılması istenen etkiye sahip değil : benim varsayılan kabuk yerine bash başlattı.

Bu nedenle, ortam-agnostik komutu , kullanıcı için varsayılan kabuğu saklayan exec $SHELLortam değişkenini kullanan olacaktır $SHELL.

Ayrıca, Apple'ın macOS Catalina'daki bash'ı zsh ile değiştireceğini ve böylece OP'nin çalışmasını istediği ya exec zshda exec $SHELLmacOS 10.15'e güncelledikten sonra devam etmenin bir yolu olacağına dikkat edin.

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.