Mengapa tidak membuat file .txt dapat dijalankan alih-alih file .sh untuk menjalankan skrip?

18

Saya bertanya-tanya apa perlunya menempatkan perintah yang dapat dieksekusi di dalam .shfile untuk membuat satu skrip, karena saya dapat melakukan hal yang sama dengan meletakkan perintah di dalam .txtfile dan membuatnya dapat dieksekusi menggunakan chmod.

Saya berasumsi ini bisa dilakukan dengan salah satu ekstensi file. Jadi, saya cukup bingung tentang perlunya .shekstensi. Bantuan apa pun akan sangat dihargai.

Abhik Bhattacharjee
sumber
19
Unix secara tradisional tidak peduli dengan ekstensi file. Jadi Anda benar - tidak masalah. Ini murni untuk membuatnya jelas bagi pembaca bahwa itu adalah skrip shell
vidarlo
8
ekstensi file di Linux tidak digunakan oleh OS dengan cara nyata apa pun. Menempatkan ekstensi .sh hanya memberi tahu pengguna bahwa itu adalah skrip shell, berbeda dengan beberapa jenis file lainnya, seperti skrip python atau perl. Secara pribadi, saya tidak menaruh ekstensi pada skrip saya.
selesai24
2
Ini hanya diperlukan untuk memberi tahu Anda atau siapa pun yang melihat bahwa itu adalah skrip shell. Jika Anda tidak ingin memberi tahu file .txt mana yang harus dijalankan skrip dan teks mana yang akan dibuka di editor, silakan beri nama semuanya .txt!
Daboross
2
Right.txt, but.txt if.txt everything.txt ends.txt dengan.txt the.txt .txt.txt suffix.txt, Anda.txt tidak.txt membantu.txt membantu.txt diri sendiri.txt (atau.txt siapa saja.txt yang lain .txt) memahami.txt what.txt masing-masing.txt file.txt adalah.txt di sana.txt untuk.txt.
leftaroundabout
1
Ini mirip dengan pertanyaan yang seharusnya merupakan duplikat ini, tetapi pertanyaan itu sebenarnya tidak menjawab yang satu ini.
Kenny Evitt

Jawaban:

47

Tidak perlu ekstensi file untuk mencocokkan sesuatu yang spesifik, seperti yang Anda temukan dengan benar.

Pada sistem mirip Unix, tipe file biasanya berasal dari konten file (yaitu "angka ajaib" atau struktur karakteristik lainnya dalam beberapa byte pertama) dan bukan dari namanya. Anda juga bisa menghilangkan ekstensi sepenuhnya, yang sering dilakukan untuk executable.

Periksa fileperintah, ini menunjukkan kepada Anda informasi yang dapat ditemukan tentang jenis file dari isinya.

Untuk skrip yang dapat dieksekusi, sistem mengharapkan apa yang disebut "shebang" di baris pertama, yang terlihat seperti misalnya

#!/usr/bin/env python3

dan menunjukkan program mana yang akan dijalankan sebagai interpreter dengan file skrip sebagai argumen. Jika Anda menjalankan file teks tanpa semacam itu, itu akan menggunakan shell default Anda, yaitu Bash untuk mencoba dan menafsirkannya.

Jadi pada sistem Unix / Linux, ekstensi nama file sebagian besar merupakan petunjuk (tetapi tidak ada jaminan) bagi pengguna manusia untuk dengan cepat mengenali apa yang diharapkan mengandung file tertentu. Ini juga merupakan konvensi yang dapat membantu misalnya menemukan file lebih cepat.

Perhatikan bahwa ada beberapa pengecualian, di mana nama dan ekstensi penting (misalnya beberapa file konfigurasi sistem yang harus mengikuti konvensi penamaan, atau banyak pemirsa gambar dan editor juga memerlukan ekstensi untuk menunjukkan jenis file).

Anda juga dapat melihat apakah ekstensi file memiliki tujuan (untuk sistem operasi)?

Komandan Byte
sumber
3
Ekstensi file tidak penting di shell, tetapi di dunia OS GUI, Anda cukup membutuhkannya untuk membuat klik ganda berfungsi dengan benar.
BallpointBen
@BallpointBen kedua poin tidak terkait. Bahkan di bawah GUI "tipe" file dapat disimpan di sampingnya, sebagai metadata, dan dapat memicu eksekusi tertentu, terlepas dari apakah ekstensi tersebut. MacOS tidak memiliki ekstensi nama file dan merupakan GUI dan bertahan dengan sangat baik ...
Patrick Mevzek
1
@ PatrickMevzek bagaimana dows MacOS tidak memiliki ekstensi? Saya mengaktifkan menunjukkan mereka dan semua file memilikinya. Apakah saya melewatkan sesuatu? Saya baru
mengenal
1
@ CiprianTomoiagă Anda dapat menamai file Anda sesuka Anda, OS tidak perlu ekstensi untuk bekerja dengan benar pada mereka. Lihat misalnya: howtogeek.com/192628/…
Patrick Mevzek
1
@barbecue menargetkan penyebut umum terendah ... apa yang salah dengan itu :-) (seperti serangan melalui email file terlampir yang disebut something.com.txt dan melakukan trik untuk melompati .txt sebagai .com sebagai makna khusus di Windows-land ). Memang, untuk ekstensi file interoperabilitas mungkin merupakan praktik yang baik. Kita harus belajar bahwa ini jelas suatu cacat yang diperkenalkan oleh DOS pada dasarnya dan bahwa berbagai OS hidup bahagia dengan file tanpa ekstensi.
Patrick Mevzek
3

Tidak ada yang namanya file "ekstensi" atau "ketik" dalam nama file UNIX / Linux.

Seperti yang ditunjukkan orang lain, "tipe" dapat ditemukan menggunakan perintah file dengan asumsi bahwa sihir yang relevan tersedia di sistem Anda. Nama file UNIX / Linux biasanya dapat berisi karakter apa pun yang tersedia tetapi sering kali bermanfaat untuk menggunakan beberapa bentuk konvensi untuk nama tersebut sehingga manusia dan mesin dapat membuat penilaian untuk konten (dan karenanya penggunaan konten).

Sebagai contoh, saya sering menggunakan koma sebagai karakter pertama dari nama file untuk menunjukkan file sementara daripada menggunakan sesuatu seperti string ".tmp" di akhir nama file. Hasilnya sama, file yang berisi data yang hanya diperlukan untuk waktu yang singkat mungkin tetapi nama itu tidak perlu memiliki "." di dalamnya atau string "tmp". Ini kadang-kadang dapat memiliki keuntungan misalnya ketika mengurai daftar nama file. Tetapi ini adalah konvensi SAYA dan orang lain dapat memutuskan yang lain bahkan menggunakan ".tmp" sebagai konvensi mereka atas nama untuk file sementara.

Jadi jawaban saya kepada Anda adalah bahwa tidak ada ekstensi file UNIX / Linux hanya seperangkat konvensi yang biasanya terlihat seperti ekstensi file yang digunakan dalam sistem operasi lain dan sistem file mereka.

PJF
sumber
FWIW, saya juga menggunakan konvensi non-standar untuk diri saya sendiri. Script saya yang namanya dimulai dengan "."diberi titik oleh shell (mereka tidak dapat berjalan secara bermakna dalam subkulit). Sejalan dengan itu, saya menonaktifkan konvensi "dot awal = file tersembunyi" default di alias / skrip saya yang digunakan lssehingga saya bisa melihat semua file, termasuk yang "tersembunyi". Demikian pula pada Windows, saya menonaktifkan pengaturan "sembunyikan ekstensi file".
jrw32982 mendukung Monica