Saya perhatikan ini dalam beberapa bahasa scripting, tetapi dalam contoh ini, saya menggunakan python. Dalam banyak tutorial, mereka akan mulai dengan #!/usr/bin/python3
di baris pertama. Saya tidak mengerti mengapa kita memiliki ini.
- Seharusnya sistem operasi tidak tahu bahwa itu adalah skrip python (jelas itu sudah diinstal karena Anda membuat referensi untuk itu)
- Bagaimana jika pengguna menggunakan sistem operasi yang tidak berbasis unix
- Bahasa dipasang di folder yang berbeda untuk alasan apa pun
- Pengguna memiliki versi yang berbeda. Terutama ketika itu bukan nomor versi lengkap (Seperti Python3 vs Python32)
Jika ada, saya bisa melihat ini melanggar skrip python karena alasan yang tercantum di atas.
Jawaban:
#!/usr/bin/python3
adalah garis shebang .Garis shebang menentukan di mana penerjemah berada. Dalam hal ini,
python3
juru bahasa terletak di/usr/bin/python3
. Sebuah peristiwa garis juga bisa menjadibash
,ruby
,perl
atau interpreter setiap scripting bahasa lain, misalnya:#!/bin/bash
.Tanpa garis shebang, sistem operasi tidak tahu itu adalah skrip python, bahkan jika Anda mengatur bendera eksekusi pada skrip dan menjalankannya seperti
./script.py
. Untuk membuat skrip berjalan secara default di python3, panggil itu sebagaipython3 script.py
atau setel baris shebang.Anda dapat menggunakan
#!/usr/bin/env python3
portabilitas di seluruh sistem yang berbeda jika penerjemah bahasa diinstal di lokasi yang berbeda.sumber
#! /usr/bin/env python3
harus dipilih#! /usr/bin/python3
?Itu disebut hash-bang. Jika Anda menjalankan skrip dari shell, itu akan memeriksa baris pertama untuk mencari tahu program apa yang harus dimulai untuk menafsirkan skrip.
OS berbasis non Unix akan menggunakan aturannya sendiri untuk mencari tahu cara menjalankan skrip. Windows misalnya akan menggunakan ekstensi nama file dan
#
akan menyebabkan baris pertama diperlakukan sebagai komentar.Jika jalur ke eksekusi Python salah, maka secara alami skrip akan gagal. Sangat mudah untuk membuat tautan ke executable aktual dari lokasi apa pun yang ditentukan oleh konvensi standar.
sumber
Baris ini membantu menemukan program yang dapat dieksekusi yang akan menjalankan skrip. Notasi shebang ini cukup standar di sebagian besar bahasa scripting (setidaknya seperti yang digunakan pada sistem operasi dewasa).
Aspek penting dari baris ini adalah menentukan penerjemah mana yang akan digunakan. Pada banyak distribusi Linux yang berpusat pada pengembangan, misalnya, adalah normal untuk memiliki beberapa versi python diinstal pada saat yang sama.
Python 2.x dan Python 3 tidak 100% kompatibel, jadi perbedaan ini bisa sangat penting. Jadi
#! /usr/bin/python
dan#! /usr/bin/python3
tidak sama (dan juga tidak sama#! /usr/bin/env python3
dengan yang disebutkan di tempat lain di halaman ini).sumber
Dan garis ini caranya .
Itu diabaikan.
Ini akan gagal dijalankan, dan harus diubah untuk menunjuk ke lokasi yang tepat. Atau
env
harus digunakan.Ini akan gagal dijalankan, dan mungkin gagal dijalankan di bawah versi yang berbeda.
sumber
Untuk memperjelas cara kerja garis shebang untuk windows, dari dokumen 3.7 Python :
sumber
Sebenarnya penentuan jenis file apa file sangat rumit, jadi sekarang sistem operasi tidak bisa hanya tahu. Itu bisa membuat banyak tebakan berdasarkan -
Tetapi baris perintah tidak mengganggu dengan semua itu, karena itu berjalan pada lapisan yang kompatibel dengan backwards terbatas, sejak omong kosong mewah itu tidak berarti apa-apa. Jika Anda mengklik dua kali dengan pasti, OS modern dapat mengetahui hal itu - tetapi jika Anda menjalankannya dari terminal maka tidak, karena terminal tidak peduli dengan API pengetikan file khusus OS Anda.
Mengenai poin lainnya. Ini kenyamanan, mungkin juga untuk dijalankan
python3 path/to/your/script
Jika python Anda tidak ada di jalur yang ditentukan, maka itu tidak akan berfungsi, tetapi kami cenderung menginstal hal-hal untuk membuat hal-hal seperti ini berfungsi, bukan sebaliknya. Sebenarnya tidak masalah jika Anda di bawah * nix, terserah Anda apakah akan mempertimbangkan baris ini karena itu a
shellcode
. Jadi misalnya Anda bisa berjalan dibash
bawah Windows.Anda benar-benar dapat menghilangkan baris ini sepenuhnya, itu hanya berarti penelepon harus menentukan juru bahasa. Juga jangan letakkan juru bahasa Anda di lokasi yang tidak standar dan kemudian coba panggil skrip tanpa menyediakan juru bahasa.
sumber