Anahtar nokta şudur: Uzantılar herhangi bir Unix benzeri sistem sisteminde önemsizdir. Dosya adı sadece addır ve komut dosyasının veya derlenmiş yürütülebilir dosyanın çalıştırılıp çalıştırılmayacağı üzerinde hiçbir etkisi yoktur . Bir programcı, .shbir dosyanın kabuk komut dosyası olduğunu veya .pypython komut dosyası olduğunu belirtmek için bir uzantı ekleyebilir , ancak Windows'tan farklı olarak, herhangi bir unix adlandırmayı umursamaz, izinleri umursar.
Önemli olan, bir dosyaya verilen yürütülebilir izindir. Hangisini kontrol edebilirsiniz
ls -l /path/to/file
Yürütülebilir dosyalar
Komut dosyasını çalıştırmak için genellikle birkaç yol vardır.
- Geçerli dizininiz komut dosyasıyla aynıysa ve komut dosyasının yürütülebilir izinleri varsa, bu şekilde çalıştırabilirsiniz
./my_script_name. .Geçerli dizini anlamına gelir.
- Geçerli dizininiz farklıysa ve komut dosyasının yürütülebilir izinleri varsa, tam yolu belirterek dizini çalıştırabilirsiniz:
/home/user/bin/my_script_name
(Yukarıdaki iki yöntem yürütülebilir izin kümesi olan itimat, dosya parçası olup olmadığını $PATHdeğişken önemsizdir varlığı. #!Hattının da önemli, aynı bu komut geçerli kabuk tarafından yürütülecek olmadan açtığınız ben varsa. cshSenaryoyu bu çizgi olmadan ve bash ile çalıştırmayı deneyin ./my_script.csh, başarısız olur)
- Betiğiniz
$PATHdeğişkeninizin bir parçası olan bir dizinde bulunuyorsa, yalnızca adı çağırarak çalıştırabilirsiniz. chmodKomut satırında komutu, /binklasörde olduğu için adını yazarak çağırabilirsiniz . /binher zaman $PATHdeğişkenin bir parçasıdır . Bu durumda, yürütülebilir izinler ve komut dosyasının konumu
- Bir yorumlayıcıyı komut ve komut dosyası olarak bağımsız değişken olarak belirtme. Bu şekilde komut dosyası, tercümana girdi dosyası olarak hizmet edecektir.
- Bir dosyanın kaynağı.
. filename.shVeya source filename.shdoğrudan komut satırına yazdığınız sanki o klavye girişi, yani sanki komut tedavi edilebilir hale getirecektir. Bu durumda yürütülebilir izinler ve konum önemli değildir
Örnekler
İzinleri yürütmek için yorumlayıcı ile çalışan örnek 1
$-> ls -l abc.py
-rw-rw-r-- 1 xieerqi xieerqi 44 Apr 27 22:39 abc.py
$-> python abc.py
a
b
c
Örnek 2 - ./yürütülebilir izin kümesi ile çalışan , satır kümesi.
$-> cat abc.py
#!/usr/bin/env python
for letter in 'a' 'b' 'c' :
print letter
$-> ls -l abc.py
-rwxrwxr-x 1 xieerqi xieerqi 66 Apr 27 23:02 abc.py*
$-> ./abc.py
a
b
c
Örnek 3, shebang satır kümesi olmadan çalışıyor (başarısız, çünkü bash python komut dosyalarını okuyamıyor; hiçbir shebang satırı geçerli kabuğu yorumlayıcı olarak kabul etmiyor)
$-> cat abc.py
for letter in 'a' 'b' 'c' :
print letter
$-> ./abc.py
./abc.py: 2: ./abc.py: Syntax error: word unexpected (expecting "do")
Örnek 4, $PATHdeğişkenin bir parçası olan yürütülebilir izinleri ayarlanmış form klasörü olan komut dosyasını çalıştırma
# /home/xieerqi/bin is part of my path variable
$-> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/microchip/xc16/v1.25/bin:/opt/microchip/xc32/v1.40/bin:/opt/microchip/xc8/v1.35/bin:/home/xieerqi/bin:/home/xieerqi/bin/sh
$-> # current directory is /home/xieerqi
$-> pwd
/home/xieerqi
$-> # move the file to ~/bin
$-> mv ~/abc.py ~/bin/abc.py
$-> # now I can run it just by calling the name
$-> abc.py
/home/xieerqi/bin/abc.py: 2: /home/xieerqi/bin/abc.py: Syntax error: word unexpected (expecting "do")
$-> # Syntax error because again, no interpreter specified.
$-> # must add #!/usr/bin/env python
$-> vi /home/xieerqi/bin/abc.py
$-> # after adding the line with vi text editor, we can run
$-> abc.py
a
b
c
5. örnek, uzantı kaldırılıyor, uzantılar önemli olmadığı için çalışıyor, ancak izinleri var ve aşağıdakilerin bir parçası $PATH:
$-> mv ~/bin/abc.py ~/bin/abc
$-> abc
a
b
c
.shbir uzantısı olarak kötü uygulama olarak kabul birçok durumda geçerli: O (çalıştırmak olmayan diğer komutlar nasıl adlandırıldığı aykırıdırls.elf), genellikle (yanıltıcı işleminizsefoo.shile başlar#!/bin/bash, daha sonra çalışansh foo.sho için oluşturulan farklı bir tercüman ile çalışacak ) vefoo.shbir Python programı olarak yeniden yazarsanız , bu uzantıyı kullanmak, şimdi yanıltıcı adı korumak ve onu çağıran her programı yeniden yazmak arasında seçim yapmanız gerektiği anlamına gelir.