Bir kabuk komut dosyası nasıl küresel hale getirilir?


84

Mac OS 10.6 kullanıyorum ve kabuk komut dosyası oluşturma hakkında bir iki şey öğrenmeye çalışıyorum. Bir kabuk betiğini nasıl kaydedeceğimi ve çalıştırılabilir hale getireceğimi anlıyorum, ancak ne yapabileceğimi veya dosyayı global hale getirmek için nereye kaydedebileceğimi merak ediyorum (yani, hangi klasörde olursam olayım erişilebilir).

Örneğin, bir .sh dosyasını / Users / username / dizinine kaydeder ve onu çalıştırılabilir hale getirirsem, o komut dosyasını yalnızca o belirli dizinde çalıştırabilirim. Örneğin / Kullanıcılar / kullanıcı adı / İndirilenler konumuna gidersem, komut dosyasını çalıştıramıyorum.

Ayrıca, kabuk komut dosyası oluşturma hakkında daha fazla bilgi edinmek için herhangi bir kaynak önerisi yardımcı olacaktır. Teşekkürler


1
PATHÖnce ortam değişkeni hakkında bilgi edinin , ardından soruyu güncelleyin.
S.Lott

Yanıtlar:



44

Geleneksel olarak, bu tür komut dosyaları ya içeri girer ~/bin(yani: ev dizininizdeki bin dizini) ya da /usr/local/bin/İlki, komut dosyasının yalnızca sizin için çalışacağı anlamına gelir; ikincisi, sistemdeki herhangi birinin çalıştırmasını istediğiniz komut dosyaları içindir.

Eğer koyarsanız ~/bin, bunu PATH ortam değişkeninize eklemeniz gerekebilir. /usr/local/binzaten yolda olmalı.


31

Bunu yapmanın iki yolu var -

  1. Komut dosyanızı usr / local / bin içine koyun ve çalıştırılabilir olduğundan emin olun (chmod + x my_script) (Bu zaten yolda ayarlanmıştır, bir echo $ PATH yaparak kontrol edebilirsiniz)
  2. Ev dizininizde bin adında bir klasör oluşturun. (Kişisel komut dosyalarınız için)
    • cd ~ (Sizi ana dizininize götürür)
    • mkdir bin (bir bin klasörü oluşturun)
    • vim .bash_profile (yol ortam değişkenini ayarlamak için)
    • export PATH = ~ / bin: $ PATH (i tuşuna basın, sonra bu satırı ekleyin ve ardından esc yapın ve şunu yazın: wq)
    • Artık betiğinizin adını yazıp istediğiniz herhangi bir yerden çalıştırabilirsiniz.

** NOT : Komut dosyasını tüm dosya adınızı yazmak yerine kısaltılmış bir komutla çalıştırmak istiyorsanız, aşağıdakileri .bash_profile dosyanıza ekleyin:
alias myscript='my_script.sh'
Ardından, komut dosyasını yalnızca yazarak çalıştırabilirsiniz myscript. (istediğiniz takma adı girebilirsiniz)


4

Mac işletim sisteminde

  • Bash ~ / .bashrc dosyasını açın.
  • export PATH = "$ PATH: /Users/sher.mohammad/Office/practice/practiceShell" kullanarak komut dosyanızın yolunu bashrc dosyanıza ekleyin
  • Sizin açın ~. / Bash_profile dosyası ve eklemek [[-s ~ / .bashrc]] && kaynak ~ / .bashrc
  • yeni terminal penceresi aç Şimdi terminalinizi her açtığınızda betiğiniz yüklenecek

neden doğrudan koymuyorsunuz .bash_profile? Bu çok daha basit (ve bu kaynak .bashrc şeyi benim için hiç çalışmadı).
szeitlin

Giriş yaptığınızda bash_profile'ın çalıştırıldığını, bashrc'nin oturum açma kabukları için kullanıldığını, varsayılan olarak OS X'in oturum açma kabukları gibi kullanıldığını ve bash_profile'ı yüklediğini araştırdım, bu nedenle bash_profile'a eklemek iyi çalışacak ve bashrc'de yazarsanız [[- s ~ / .bashrc]] && source ~ / .bashrc bash_profile içinde, bash_profile oturum açma sırasında çalıştırıldığında bashrc'yi yüklemek için
Sher Mohammad

4

Bashrc dosyanızı biliyorsanız, bu çok kolaydır! Bu tamamen .bashrc dosyanızı kullanır ve tamamlanması 2 saniye sürer.

(Arch Linux Manjaro kullanıyorum, bu yüzden ana dizinimde bulunan .bashrc kullanıyorum)

.Bashrc dosyanıza yerleştirilecek kod:

# Simple bashrc method to launch anything in terminal from any directory

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

Gördüğünüz gibi, önce basit 'cd' komutunu kullanıyorsunuz ve ona betik konumunun dizinini veriyorsunuz, ardından '&&' kullanıyorsunuz, böylece bir sonraki komutu hemen çalıştırabilirsiniz ve son olarak da yaptığınız gibi komut dosyanızı açabilirsiniz. normalde! Süper kolay ve doğrudan .bash dosyanıza kaydedildi! :)

Umarım birine yardım etmişimdir!

İçtenlikle,

AnonimX


bu harika ... ve zsh'imin otomatik tamamlamasına izin veriyor!
Milan

Ama farklı bir senaryonuz varsa?
Paulo Sergio Schlogl

2

Bash kabuğunu kullanırken, bu betiği işlev olarak yazın ve sonra .bashrc'ye koyun veya bu işlevi içeren dosyayı "kaynak dosya_adı" ile kaynak hale getirin.

Şimdi komut dosyasını kabukta işlev çağrısı ile çalıştırın.


1

Ya onu /usr/bin(ya da içinde bulunan başka bir dizini PATH) kaydetmek ya da PATHonu kaydettiğiniz dizini içerecek şekilde düzenlemek , temelde herhangi bir dizinde çalışmasını sağlayacaktır.


7
/usr/binbir işletim sistemi yükseltmesi sırasında tamamen boşaltılabilir ve değiştirilebilir, bu da komut dosyanızı gizemli bir şekilde kaybolur. /usr/local/binBryan Oakley tarafından belirtildiği gibi bu amaç içindir. Ayrıca Dosya Sistemi Hiyerarşi Standardına
Stephen P

0

'script.sh' "mv [script.sh] / usr / local / bin" çalışma dizininden (test edilmedi, ancak IMO'nun en az karmaşık yolu gibi görünüyor.)


1
Bu sudo mv script.sh /usr/local/bindizin, ayrıcalıkları yükseltmeden yazılamayacağı için muhtemelen ihtiyacınız olacak .
Perette

-2

Bunu makinenizdeki global çalıştırılabilir dizine koymalısınız. Bunun genellikle /usr/binUnix tabanlı işletim sistemlerinde olacağını düşünüyorum (ancak bu, çoğu zaman o makinede süper kullanıcı ayrıcalıkları gerektirir).

Ayrıca, onu $PATHortam değişkeninde bulunan başka bir dizine de koyabilirsiniz , ancak bu yalnızca o değişkende o dizine sahip olan kullanıcılar için çalışacaktır.

Bir kabuk $PATHyazarak değerini bulabilirsiniz echo $PATH. Dizinler ile ayrılır : .


9
Olumsuz oy vereceğim çünkü / usr / bin yanlış cevap. / usr / local / bin özellikle "yerel" betikler için tasarlanmıştır (yani: sistemle gelenler yerine sizin oluşturduklarınız).
Bryan Oakley
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.