Cara membuat file (mis. Skrip .sh) dapat dieksekusi, sehingga dapat dijalankan dari terminal

245

Saya memiliki file script.sh dan jenis file ini adalah file shellscript. Saya ingin menjadikan file ini sebagai file application / x-executable. Bagaimana saya bisa membuatnya?

Ziyaddin Sadigov
sumber
1
Kemungkinan duplikat dari Bagaimana cara menjalankan file .sh?
karel
Ini bukan duplikat, karena saya telah bertanya secara khusus tentang membuatnya aplikasi / x-executable Pertanyaan lain hanya meminta untuk membuka file sh di terminal.
Ziyaddin Sadigov

Jawaban:

326

Anda dapat menandai file sebagai executable:

chmod +x filename.sh

Anda kemudian dapat menjalankannya seperti ini:

./filename.sh

Jika Anda ingin menggunakan perintah lain untuk memulainya, Anda dapat menambahkan alias:

gedit ~/.bashrc

Tambahkan ini di akhir file:

alias <new name>='/home/<full path to script>/filename.sh'

Buka sesi terminal baru atau ketik source ~/.bashrcterminal Anda untuk diterapkan. Kemudian cukup gunakan nama baru untuk memulai skrip.

rɑːdʒɑ
sumber
Apakah Anda tahu cara menggunakan perintah sudo setelah memasukkan perintah sebagai: "alias command1 = '/home/user_name/dir/script.sh'. Di tambang, ia bekerja tanpa sudo, tetapi tidak dengan itu.
Aditya
Anda harus memulai ulang bash setelah mengedit .bashrc run: exec bash untuk memulai kembali bash.
Sampath Perera
2
Mengapa file yang dapat dieksekusi menjadi ./filename.shdan bukan hanya filename.sh?
user1993
@ user1993 ya, saya juga mencari cara untuk membuatnya dapat dieksekusi hanya dengan filenamedan tidak./filename
MycrofD
@ user1993 Secara umum, menggunakan ./filename.shmenentukan file di direktori saat ini dan menggunakan filename.shmenentukan file di direktori saat ini atau direktori PATH. Penggunaan pertama menghilangkan ketidakpastian tentang file mana yang diakses. Dalam hal ini, Anda mencoba untuk mengeksekusi skrip dengan bash atau penerjemah lain (berdasarkan diasumsikan #!/bin/bashsebagai baris pertama dalam skrip Anda) hanya dengan memasukkan nama file. Penggunaan ini membutuhkan direktori yang ditentukan. Atau, Anda dapat mencoba bash filename.shyang tampaknya berfungsi dengan direktori yang tidak ditentukan.
a505999
37

Ada dua cara untuk membuat file dapat dieksekusi:

Metode GUI:

Buka tab izin, lalu centang kotak `Jalankan: [] Izinkan mengeksekusi file sebagai program.

masukkan deskripsi gambar di sini

Metode Terminal / Perintah:

Anda dapat menggunakan:

cd /to/my/required/directory

Lalu lari

chmod +x filename.extension

Atau jalankan saja:

chmod +x /path/to/your/filename.extension

chmod memang memiliki beberapa opsi lanjutan:

Ruang-ruang tersebut untuk menunjukkan bahwa ia terpecah: - rwx --- ---

Set pertama ---adalah Pengguna. Yang kedua adalah Grup dan yang terakhir adalah Lainnya (orang lain)

r adalah singkatan dari Read, w untuk Write dan x untuk eXecute.

Jadi untuk memungkinkan semua orang membacanya, tetapi hanya Grup yang mengeksekusi dan Pengguna membaca dan menulisnya (tetapi karena beberapa alasan tidak dijalankan) adalah:

-rw- rx- r-- Tetapi ini akan ditambahkan ke perintah sebagai:

chmod +rw-rx-r-- /path/to/file.extension

chmodjuga bisa melakukan ini dalam angka. Ini didasarkan pada biner (saya pikir, seperti 1,2 dan 4)

Jadi ada angka-angka ini:

Jalankan oleh pengguna adalah 100. Jalankan berdasarkan grup adalah 010. Yang dijalankan oleh orang lain adalah 001

Tulis oleh pengguna adalah 200. Tulis menurut grup adalah 020. Menulis oleh orang lain adalah 002.

Baca oleh pengguna 400. Baca oleh grup adalah 040. Dibaca oleh orang lain adalah 004.

Lalu Anda menambahkan ini bersama-sama untuk mendapatkan kombinasi yang diinginkan.

Jadi untuk memungkinkan semua orang membacanya, tetapi hanya Grup yang mengeksekusi dan Pengguna untuk menulisnya (tetapi karena beberapa alasan tidak dijalankan) adalah:

400 + 040 + 004dan 010dan200

Itu menambah hingga 600 + 050 + 004 = 654.

Anda kemudian dapat menjalankan perintah.

chmod +654 /path/to/file.extension untuk mengaturnya.

Dan untuk mengatur semua izin Anda dapat mengetik:

chmod +rwxrwxrwx /path/to/file.extension

Atau (ini sedikit lebih mudah untuk ditulis, tetapi lebih sulit untuk mengingat masing-masing):

chmod +777 /path/to/file.extension

Akhirnya, Anda dapat melakukan:

chmod -777 /path/to/file.extension

Untuk mengambil semua izin dari semua orang.

Dan:

chmod +300 /path/to/file.extension

Untuk menambahkan baca dan tulis untuk pengguna, tanpa memengaruhi izin lainnya (mis. Eksekusi izin).

Situs web ini memiliki kotak centang kotak kecil yang sangat berguna, di mana Anda dapat mencentang opsi yang Anda inginkan dan memberi Anda perintah:

masukkan deskripsi gambar di sini

Namun, tidak semua kombinasi yang mungkin masuk akal untuk digunakan; yang utama yang digunakan adalah sebagai berikut:

755 - Ownermemiliki semuanya, Groupdan Otherdapat membaca dan mengeksekusi

700 - Ownermemiliki semuanya

644 - Ownerdapat membaca dan menulis, dan Groupdan Otherdapat membaca

600 - Ownerdapat membaca dan menulis

Dan, jika Anda menggunakan grup pengguna non-sepele:

775 - Ownerdapat membaca dan menulis, dan Groupdan Otherdapat membaca

770 - Ownerdan Groupmemiliki semuanya, dan Otherdapat membaca dan mengeksekusi

750 - Ownermemiliki semuanya, dan Groupdapat membaca dan mengeksekusi

664 - Ownerdan Groupdapat membaca dan menulis, dan Otherhanya bisa membaca

660 - Ownerdan Groupdapat membaca dan menulis

640 - Ownerdapat membaca dan menulis, dan Groupdapat membaca

777 dan 666 jarang digunakan, kecuali dalam / tmp.

Terima kasih Ilmari Karonen karena menunjukkan yang umum digunakan!

Tim
sumber
Bukankah ini didasarkan pada oktal (8-basis) bukan biner (berbasis 2)? Dalam biner Anda hanya dapat memiliki 0 dan 1, sedangkan pada oktal Anda dapat memiliki 0, 1, ... 6, 7
Justinas
@Justinas biner dalam 7 = 4 + 2 + 1 - 111 mewakili Baca dan Tulis dan Jalankan.
Tim
8

Lari:

chmod +x /path/to/file.sh

Untuk membuatnya tidak dapat dieksekusi, jalankan:

chmod -x /path/to/file.sh

Misalnya saya membuat .shfile:

vi tester12.sh

Setelah saya menulis beberapa kode pada editor vi, saya akan keluar dari editor vi:

:wq!
chmod +x tester12.sh
./tester12.sh
Jim
sumber