Poin utamanya adalah: Ekstensi tidak relevan dalam sistem sistem mirip Unix apa pun. Nama file hanya nama dan tidak berpengaruh pada apakah skrip atau kompilasi yang dapat dieksekusi dapat dijalankan . Seorang programmer dapat menambahkan .sh
ekstensi untuk menunjuk bahwa suatu file adalah skrip shell, atau .py
untuk skrip python, tetapi tidak seperti Windows, unix mana pun tidak peduli dengan penamaan, ia peduli dengan izin.
Yang penting adalah izin yang dapat dieksekusi diberikan ke file. Yang bisa Anda tanyakan
ls -l /path/to/file
Menjalankan executable
Untuk menjalankan skrip umumnya ada beberapa cara.
- Jika direktori Anda saat ini sama dengan skrip, dan skrip memiliki izin yang dapat dieksekusi, Anda dapat menjalankannya seperti itu
./my_script_name
. Direktori .
berarti saat ini.
- Jika direktori Anda saat ini berbeda dan skrip memiliki izin yang dapat dieksekusi, Anda dapat menjalankannya dengan menentukan jalur lengkap:
/home/user/bin/my_script_name
(Dua metode di atas bergantung pada memiliki izin yang dapat dieksekusi ditetapkan; apakah file merupakan bagian dari $PATH
variabel atau tidak tidak relevan. Kehadiran #!
baris juga penting; tanpanya, skrip akan dieksekusi oleh shell saat ini yang telah Anda buka. Jika saya memiliki csh
skrip tanpa garis itu, dan coba jalankan dengan bash ./my_script.csh
, itu akan gagal)
- Jika skrip Anda berada di direktori yang merupakan bagian dari
$PATH
variabel Anda, Anda dapat menjalankannya hanya dengan memanggil nama. Anda dapat memanggil chmod
perintah di baris perintah hanya dengan mengetik namanya karena ada di /bin
folder. /bin
selalu menjadi bagian dari $PATH
variabel. Dalam hal ini izin yang dapat dieksekusi dan lokasi masalah skrip
- Menentukan penerjemah sebagai perintah dan skrip sebagai argumen. Script cara itu akan berfungsi sebagai file input untuk penerjemah.
- Sumber file. The
. filename.sh
atau source filename.sh
akan membuat script diperlakukan seolah-olah itu adalah input keyboard, yaitu seolah-olah itu diketik ke baris perintah langsung. Dalam hal ini, izin dan lokasi yang dapat dieksekusi tidak masalah
Contohnya
Contoh # 1, berjalan dengan interpreter, untuk mengeksekusi izin
$-> ls -l abc.py
-rw-rw-r-- 1 xieerqi xieerqi 44 Apr 27 22:39 abc.py
$-> python abc.py
a
b
c
Contoh # 2, berjalan dengan ./
set izin yang dapat dieksekusi, set baris shebang.
$-> 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
Contoh # 3, berjalan tanpa set garis shebang (gagal, karena bash tidak dapat membaca skrip python; tidak ada garis shebang mengasumsikan shell saat ini sebagai interpreter)
$-> cat abc.py
for letter in 'a' 'b' 'c' :
print letter
$-> ./abc.py
./abc.py: 2: ./abc.py: Syntax error: word unexpected (expecting "do")
Contoh # 4, menjalankan skrip yang memiliki izin yang dapat dieksekusi mengatur folder formulir yang merupakan bagian dari $PATH
variabel
# /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
Contoh # 5, menghapus ekstensi, masih berjalan karena ekstensi tidak penting, tetapi memiliki izin dan merupakan bagian dari $PATH
:
$-> mv ~/bin/abc.py ~/bin/abc
$-> abc
a
b
c
.sh
sebagai ekstensi dalam banyak keadaan dianggap praktik buruk: Ini bertentangan dengan bagaimana perintah lain dinamai (Anda tidak menjalankanls.elf
), itu sering menyesatkan (jika Andafoo.sh
mulai dengan#!/bin/bash
, maka menjalankansh foo.sh
akan menjalankannya dengan juru bahasa yang berbeda dari yang dibangun untuk ), dan jika Anda menulis ulangfoo.sh
menjadi program Python, menggunakan ekstensi itu berarti Anda harus memilih antara menyimpan nama yang sekarang menyesatkan dan menulis ulang setiap program yang menyebutnya.