Komut dosyalarımı .sh uzantısıyla kaydetmeli miyim?


66

Bazı işlevsel komut dosyalarım var ve kopyalamak /usr/binistiyorum. Bunları normal terminal komutları olarak kullanmak istiyorum. Bunları .shuzantıyla kullanmak iyi bir uygulama mıdır yoksa uzantısız olarak kaydedebilir miyim?


6
Ayrıca, bu komut dosyalarının tüm kullanıcılar tarafından kullanılabilmesini istiyorsanız, /usr/local/bindaha iyi bir seçim olabilir.
Salem

6
@Salem /usr/binve /usr/local/binher ikisi de tüm kullanıcılar tarafından kullanılabilir durumda olmalıdır, ancak /usr/local/binpaketlerin parçası olmayan yürütülebilir dosyalar için daha iyidir.
gerrit

Gördüğüm tek yarar, vim veya nano gibi editörlerin en baştan nasıl vurgulanacağını bilmeleri ve bu konuda.
Rath

1
@rath Shebang'ı #!/usr/bin/env bashveya olarak ayarladıysam, uzantı olmadan sözdizimi vurgularım #!/bin/bash.
Sparhawk,

@Sparhawk Gerçekten de, ancak senaryoyu çalıştırmayı deneyene kadar sık ​​sık unutuyorum;)
rath

Yanıtlar:


71

Hayır, bu iyi bir uygulama değil, komut dosyalarınızı uzatma olmadan tutmalısınız. Komut olmanın o paketlerin bölümü yoktur, Not .sh uzantısı, yani güncelleme-grub değil update-grub.sh . Hala ikna olmadıysanız, Google Shell Stil Kılavuzunun şunları söylediğini söyleyin :

Yürütülebilir dosyaların uzantısı (şiddetle tercih edilmez ) veya bir .sh uzantısı olmamalıdır . Kütüphaneler bir .sh uzantısına sahip olmalı ve çalıştırılmamalıdır.

PS Komut dosyanızı girmek zorunda değilsiniz /bin. Dizin oluşturabilir ~/binve komut dosyanızı oraya koyabilirsiniz. Dizin varsayılan ~/binolarak dahil edilmiştir $PATH, böylece buraya konulan komut dosyaları herhangi bir diğer kabuk komutu olarak çalıştırılabilir.


4
"Dizin ~ / bin $PATHvarsayılan olarak dahil edilir" - Ne zamandan beri? Her neyse, ~/.local/binmuhtemelen standart olduğu için daha iyi bir seçimdir.
nyuszika7h

1
Yani, "Kütüphaneler bir .so uzantısına sahip olmalı", değil mi? Sh değil.
Keith Wolters,

3
@KeithWolters önce ben, ama Google. İkincisi, .sh, .so değil, kabuk senaryolarından bahsediyoruz, ikili dosyalardan değil.

1
Google stil rehberi Google’a özgüdür. Örneğin, "Bash, çalıştırılabilirler için izin verilen tek kabuk komut dosyası dilidir." En iyi uygulamalardan ziyade açıkça bir iç kural.
Paul Draper

1
@ nyuszika7h check-out ~ / .profile ... dizin mevcutsa $ HOME / bin dizini ekler
Corey Goldberg

9

İkincisi, Sergey'in dediği gibi, ~/binotomatik olarak eklenecek olan kullanma önerisini kullanıyorum . Veya , üzerinde zaten olabilir . Ancak:$PATH/usr/local/binPATH

  • Bunu kendin için yapıyorsun. Kendini rahat hissettiğin her şeyi kullan. Gerçekten, uzantıyı sakla diyeceğim, böylece yayınladığın betiğin hatırlatılıyor, çünkü -
  • Eklentiler nadirdir /usr/bin. Sistemimde sadece iki tane bulabilirim:

    $ dpkg -S `ls /usr/bin/*.sh`
    mtools: /usr/bin/amuFormat.sh
    gettext-base: /usr/bin/gettext.sh
    

    Yani eğer paketleme yapıyorsanız, kesinlikle uzantıyı bırakınız.


2
~/bineklenir $PATHotomatik varsa, gerek elle eklemek için. Sadece dizini oluştur, oturumu
Sergey

5

Dosyanın en üstüne şu satırı koyun:

#!/bin/bash

Böylece bu dosya otomatik olarak yazılacaktır: Herhangi bir uzantı olmadan Shell Script !

Dosyaya yürütme izni vermeyi unutmayın.

Doğrudan komutla çalıştırılabilen komut dosyasını koymak için şu adresi ziyaret edin: Doğrudan komutla çalıştırabilmem için kodumu nereye koymalıyım?


2
Veya tam bash kabuğuna ihtiyacınız yoksa, sadece #! / Bin / sh.
flickerfly

Birçok işletim sistemi bağlantı / bin / sh ve / bin / bash
Max Coplan
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.