Kabuk komut dosyalarının kaynağına yönelik bir dosya uzantısı için resmi standart / kural


12

Çalıştırmak istediğiniz kaynak komut dosyaları için dosya türü uzantıları için bir kural olup olmadığını merak ediyordum. Örneğin:

  1. Bu komut dosyasını bir alt kabukta çalıştırmak istersem.

    ./script.sh 
  2. Bu komut dosyasını geçerli kabuktan çalıştırmayı hatırlamak istersem.

    . script.source 

Var mı bir kongre İkinci örnekte bir dosya türleriyle (örneğin POSIX gibi)? Böyle bir şey .sourceya .sourceme?


Güncelleme

Bu soru herhangi bir görüş sormuyor. Bu tür komut dosyaları için standart bir dosya uzantısı olup olmadığını bilmek istediğimi açıkça belirtmiştim. Bu soru, benzer bir konuyla ilgili bu iyi alınan sorudan daha az fikir tabanlıdır ( bash betikleri için .sh veya .bash uzantısı kullanılsın mı? ).


1
Bazı insanlar çalıştırılabilir bir komut dosyası çalıştırılabilen kabuk komut dosyalarının (ör #!/bin/sh.
İle

1
Ne için bağlı olduğunu, env, rc, conf vb olabilir
123

1
@ 123 size yararlı bir şey Thats onu oluşturan ve içine koymak bazen kez bağlıdır $PATHonun gibi, peki, her zaman kullanmak gel ps, ls, curlve diğer komutlar, o zaman etrafında inşa kabuk tamamlama işlevlerine başlayan tüm, ben bulmak uzantıyı bırakmak için sorun değil. Ama evet, kendileri tarafından çalıştırılamayan bir kabuk komut dosyası kaynaklarken, chmod +xonları yapmazdım ve onları adlandırırdım script.sh. Ayrıca genellikle bir uzantı atarım çünkü yapmazsam editörümde sözdizimi vurgulaması yapılmaz.
the_velour_fog

5
Kongre yok. Bir şirkette bulunuyorsanız veya bir paylaşım projesinde (ör. Açık kaynak) işbirliği yapıyorsanız, uygun yerel standartlarınız olabilir, ancak fiili bir sözleşme yoktur.
Stephen Harris

1
"Kongre" kelimesi (# 2 anlamına gelir), muhtemelen "fikir tabanlı" yanıtlara yol açan şeydir. Kaynak için açık grup spesifikasyonu herhangi bir adlandırma standardını zorunlu kılmaz.
Jeff Schaller

Yanıtlar:


18

.shKaynaklanması amaçlanan (veya daha genel olarak yürütülmesi amaçlanmayan) dosyalar için (POSIX shdilindeki dosyalar için, .bashsh uyumlu olmayan bashdosyalar için, yani komut dosyasının yazıldığı dili tanımlar), ve yürütülmesi gereken dosyalar için uzantı yok.

Ayrıca şunları da ekleyebilirsiniz:

#! /bin/echo Please-source

o-bang, böylece yanlışlıkla yürütüldüğünde (bu dosyalara yürütmeyi zaten engelleyecek yürütme izinleri verilmemesini beklesem de), bunun yerine kaynaklanması gerektiğine dair bir bildirim alırsınız.


Komut dosyası kaynaklanmadıysa da çıkabilirsiniz ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski

4

Kaynak dosyalarda, betiğinizi yapılandıran dosyalar için en iyi yol .conf ve işlevleri veya diğer araçları olan dosyalar için .shlib veya .shlibs olduğunu düşünüyorum.

Komut dosyanızın yanlış kabukla çalışmasını önlemek istiyorsanız ve hashbang sizin için yeterli değilse, bunu kullanabilirsiniz:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi

1
Linux-donanımları kullanabilmek gidiyoruz /proc/$$/exe, sen yanı sıra bunu yapabilir case $(readlink "/proc/$$/exe") in */bash)..., ama burada, ben sadece kullanmayı tercih ediyorum: if [ -z "$BASH_VERSION" ]. ( echoolmalı echo >&2). (Sizi seviyorum .confveya .shlibs(ancak sh dosyaları için) uzantıları olsa da, uzantıya dayanan sözdizimi vurgulayıcılarına yardımcı olmayabilir).
Stéphane Chazelas

Evet bu .shlibs, ben donwload programın bir tür görüyorum, ama hatırlamıyorum, bu yüzden bu kullanmaya başladı. Bahşiş için çok teşekkür ederim, ben readlink sürümü ile soruyu çok daha güzel düzenleyeceğim. ;-)
Luciano Andress Martini

@ StéphaneChazelas Sözdizimi vurgulama, dosyaların kendisindeki meta verilerle (Emacs ve Vim için en az) tetiklenebilir, bu nedenle dosya adı uzantısı seçimi bu açıdan önemsizdir.
Kusalananda
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.