Bagaimana cara menjalankan skrip bash?

19

Jadi saya telah menulis skrip bash pertama saya:

#!/bin/bash
echo 'hello world!'
exit

Saya tahu ini memiliki lokasi yang tepat untuk mem-bash dan dapat dieksekusi:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Sekarang saya ingin menjalankannya dari baris perintah, tetapi saya mendapatkan kesalahan:

$ myscript.sh
myscript.sh: command not found

Jadi alih-alih saya coba ini dan berhasil:

$ bash myscript.sh
hello world!

Apakah ini yang saya harus selalu lakukan? Saya merasa seperti saya telah menjalankan skrip lain tanpa harus mendahuluinya bash. Bagaimana saya bisa menjalankan myscript.sh tanpa harus mendahuluinya bash?

Pembaruan: Berikut adalah penjelasan yang baik tentang mengapa dan bagaimana menjalankan skrip bash .

Andrew
sumber

Jawaban:

28

Anda harus membuat file dapat dieksekusi. Anda bisa melakukannya dengan

chmod +x <filename>

di mana nama skrip Anda dan kemudian Anda harus menambahkannya dengan ./menginstruksikan shell untuk menjalankan file di direktori lokal, seperti:

./script.sh

Anda hanya dapat menjalankan file yang ada di Anda PATHatau yang Anda tentukan path ke sana. ./, direktori lokal, tidak PATHsecara default karena seseorang dapat menggunakannya untuk tujuan jahat. Bayangkan sebuah skrip bernama lsdrop di direktori, Anda masuk ke dalam direktori itu, jalankan lsdan skrip itu melakukan sesuatu yang buruk.

Saat Anda melakukannya, Anda mungkin ingin membuatnya lebih portabel dengan menjalankan shell daripada bash dengan menggunakan:

#!/bin/sh

atau dengan menjalankan bash di mana pun ia diinstal asalkan dipasang:

#!/usr/bin/env bash
pupeno
sumber
Saya sudah melakukannya dengan chmod + x myscript.sh. Apakah saya salah?
Andrew
1
Anda mungkin hilang ./ Saya sudah menambahkannya ke jawabannya.
pupeno
1

Selain saran dari Fernández, awali dengan sebuah poin, seperti ini:

./myscript.sh

Untuk alasan keamanan, direktori saat ini tidak pernah dimasukkan dalam jalur eksekusi.

harrymc
sumber
1

Ada 3 cara untuk menjalankan skrip bash. Dengan contoh myscript.sh sebagai skrip yang ingin Anda jalankan.

Metode 1

jalankan skrip sebagai sub proses, yang akan memicu masalah izin jika bukan pemilik tulis. Anda dapat mengubah izin dengan chmod.

$ chmod + x myscript.sh

$ ./myscript.sh

Metode 2

jalankan skrip sebagai pengguna saat ini. jika skrip bash ditulis dengan baik, seharusnya tidak ada kesalahan.

$ bash myscript.sh

Metode 3

mirip dengan metode 2 tetapi jalan pintas. perhatikan bahwa ini didasarkan pada asumsi bahwa Anda menggunakan bash shell di sesi saat ini.

$. myscript.sh

semoga ini membantu!:)

Jimmy MG Lim
sumber