Bagaimana cara menjalankan skrip bash di Terminal?


108

Saya memiliki skrip bash seperti:

#!/bin/bash

echo Hello world!

Bagaimana cara menjalankan ini di Terminal?


27
Apakah itu memiliki izin eksekusi? Coba chmod +x scriptnamedan kemudian ./scriptname.
dirkgently

Jawaban:


49

$prompt: /path/to/scriptdan tekan enter. Perhatikan bahwa Anda perlu memastikan skrip memiliki izin eksekusi.


1
Jika Anda sudah berada di /path/to direktori, misalnya dengan cd /path/toperintah, Anda dapat masuk ./scriptuntuk menjalankan skrip Anda. Jangan lupa, dalam hal ini './' sebelum 'skrip'
FrViPofm


26

cd ke direktori yang berisi script, atau taruh di folder bin yang ada di $ PATH Anda

lalu ketik

./scriptname.sh

jika dalam direktori yang sama atau

scriptname.sh

jika ada di folder bin.


9
Ini hanya akan berfungsi jika skrip memiliki set bit eksekusi. Itu mungkin perlu ditangani.
Bryan Oakley

./scriptname.shbekerja untuk saya tetapi scriptname.shmemberi scriptname.sh: command not found. -rwxr-xr-xadalah izinnya.
Spikatrix

1
Nasihat ke cdmana saja sama sekali melakukan kesalahpahaman pemula umum lainnya. Kecuali skrip secara internal memiliki ketergantungan yang memerlukannya untuk dijalankan di direktori tertentu (seperti, perlu membaca file data yang skripnya tidak memberikan opsi untuk ditunjukkan) Anda tidak perlu ke cdmana pun untuk menjalankannya, dan sangat sering tidak mau.
tripleee

24

Anda bisa melakukan:
sh scriptname.sh


6
Suara negatif: Itu salah jika itu benar skrip Bash.
tripleee

1
Suara positif: Ini baik-baik saja di Mac OS X jika skrip bash Anda ada di direktori yang sama
Karl Taylor

30
@kot "Kebetulan bekerja untuk saya" sangat jauh dari "ini adalah jawaban yang benar". Ini dapat berfungsi jika shmerupakan symlink ke bash, atau jika skrip tidak menggunakan konstruksi khusus Bash. Dalam kasus sebelumnya, menggunakan bashalih-alih shmerupakan satu-satunya solusi portabel yang benar; dalam kasus terakhir, ini bukan jawaban yang benar untuk pertanyaan khusus ini, karena OP menanyakan saran untuk skrip Bash secara khusus. Mengabaikan jawaban yang salah adalah tidak bertanggung jawab; pengguna yang gagal memahami perbedaannya sering kali memposting di sini, dan perlu diperlihatkan mengapa jawaban "berhasil untuk saya" ini tidak berhasil untuk mereka.
tripleee

@kraftydevil too ^ Salah satu dari beberapa target duplikat populer tentang topik ini: stackoverflow.com/questions/5725296/…
tripleee

5
@ kot Saya ulangi: Ada situasi di mana ini berfungsi (seperti yang Anda ketahui) tetapi ini bukan jawaban yang benar dalam kasus umum untuk pertanyaan di judul. Setidaknya, jawaban ini harus menjelaskan kondisi di mana ia bekerja; tetapi saran saya adalah menghapus jawaban ini.
tripleee

14

Pertama Anda harus membuatnya executable menggunakan: chmod +x name_of_your_file_script.

Setelah Anda membuatnya dapat dieksekusi, Anda dapat menjalankannya menggunakan ./same_name_of_your_file_script


10

Ubah direktori Anda ke tempat skrip berada dengan menggunakan perintah cd

Lalu ketik

bash program-name.sh

6
Tidak perlu cdkemana - mana; Anda dapat menentukan nama jalur kompleks yang sewenang-wenang sebagai argumen untuk bash; memang, program apa pun yang menggunakan argumen nama file bekerja dengan cara ini (atau yang mengerikan, rusak total).
tripleee

10

Ini adalah utas lama, tetapi saya kebetulan menemukannya dan saya terkejut belum ada yang memberikan jawaban lengkap. Jadi begini ...

Tutorial Menjalankan Script Baris Perintah!

T: Bagaimana saya menjalankan ini di Terminal?

Kebingungan dan Konflik:

  • Anda tidak memerlukan 'ekstensi' (seperti .sh atau .py atau apa pun), tetapi itu membantu untuk melacak berbagai hal. Tidak akan sakit. Namun, jika nama skrip berisi ekstensi, Anda harus menggunakannya.
  • Anda tidak perlu berada di direktori tertentu dengan alasan apapun.
  • Anda tidak perlu mengetikkan nama program yang menjalankan file tersebut (BASH atau Python atau apapun) kecuali Anda mau. Tidak akan sakit.
  • Anda tidak perlu sudomelakukan semua ini. Perintah ini disediakan untuk menjalankan perintah sebagai pengguna lain atau pengguna 'root' (administrator). Posting yang bagus di sini .

(Seseorang yang baru belajar bagaimana mengeksekusi skrip tidak boleh menggunakan perintah ini kecuali ada kebutuhan nyata, seperti menginstal program baru. Tempat yang baik untuk meletakkan skrip Anda ada di folder ~ / bin Anda. Anda bisa sampai di sana dengan mengetik cd ~/binatau cd $HOME/bindari prompt terminal. Anda akan memiliki izin penuh di folder itu.)

Untuk "menjalankan skrip ini" dari terminal pada sistem tipe Unix / Linux, Anda harus melakukan tiga hal:

  1. Beri tahu sistem lokasi skrip. (Pilih salah satu)

    • Ketik jalur lengkap dengan nama skrip (misalnya /path/to/script.sh). Anda dapat memverifikasi jalur lengkap dengan mengetik pwdatau echo $PWDdi terminal.
    • Jalankan dari direktori yang sama dan gunakan ./untuk jalur (mis ./script.sh.). Mudah.
    • Letakkan script di direktori yang ada di sistem PATHdan ketikkan saja namanya (mis script.sh.). Anda dapat memverifikasi sistem PATHdengan mengetik echo $PATHatau echo -e ${PATH//:/\\n}jika Anda ingin daftar yang lebih rapi.
  2. Beri tahu sistem bahwa skrip memiliki izin untuk dijalankan. (Pilih salah satu)

    • Setel "bit eksekusi" dengan mengetik chmod +x /path/to/script.shdi terminal.
    • Anda juga dapat menggunakan chmod 755 /path/to/script.shjika Anda lebih suka angka. Ada diskusi hebat dengan bagan keren di sini .
  3. Beri tahu sistem jenis skripnya. (Pilih salah satu)

    • Ketik nama program sebelum skrip. (mis. BASH /path/to/script.shatau PHP /path/to/script.php) Jika skrip memiliki ekstensi, seperti .php atau .py, itu adalah bagian dari nama skrip dan Anda harus memasukkannya.
    • Gunakan shebang , yang menurut saya Anda miliki ( #!/bin/bash) dalam contoh Anda. Jika Anda memilikinya sebagai baris pertama skrip Anda, sistem akan menggunakan program itu untuk mengeksekusi skrip. Tidak perlu mengetik program atau menggunakan ekstensi.
    • Gunakan shebang "portabel" . Anda juga dapat meminta sistem untuk memilih versi program yang pertama PATHdengan menggunakan #!/usr/bin/envdiikuti dengan nama program (misalnya #!/usr/bin/env bashatau #!/usr/bin/env python3). Ada pro dan kontra yang dibahas secara menyeluruh di sini .

1
Ringkasan yang cukup bagus. Mungkin pada contoh terakhir mengingatkan orang bahwa script.shdan script.phpmerupakan nama file literal dari skrip ini, dan bahwa jika Anda meletakkan ekstensi di nama file, Anda perlu memasukkannya saat Anda menjalankan skrip (dan sebaliknya; jika skrip tidak ' t memiliki ekstensi, jangan letakkan satu). Ini tidak seperti misalnya DOS di mana Anda dapat menghilangkan .batatau .exedari nama file, dan file perlu memiliki ekstensi dari kumpulan kecil agar dianggap dapat dieksekusi.
tripleee

1
Kesalahan umum pemula lain kesalahpahaman perbedaan antara path, /path, ./path, dan ~/path. Saya kira Anda mungkin tidak ingin menjelaskannya di sini, tetapi mungkin tautan ke penjelasan seperti ... oh dang, saya harus memposting ini.
tripleee


-2

Jika Anda berada di direktori atau folder tempat file skrip tersedia, cukup ubah izin file dalam mode yang dapat dieksekusi dengan melakukan

chmod +x your_filename.sh

Setelah itu Anda akan menjalankan script dengan menggunakan perintah berikut.

$ sudo ./your_filename.sh

Di atas "." mewakili direktori saat ini. Catatan! Jika Anda tidak berada di direktori tempat file skrip bash berada, maka Anda mengubah direktori tempat file tersebut berada dengan menggunakan

cd Directory_name/write the complete path

perintah. Jika tidak, skrip Anda tidak dapat dijalankan.


Semoga sepenuhnya semua akan melakukan ini karena saya menyebutkan semua konsep terkait tentang masalah khusus ini.
Hassan Shamshir

Seperti yang dijelaskan dalam jawaban lain di sini, sudoadalah salah dan berpotensi sangat salah jika Anda menggunakannya pada skrip yang tidak tepercaya yang menyalahgunakan kekuatan yang Anda berikan secara tidak perlu.
tripleee

Nasihat ke cdsuatu tempat sulit dimengerti, tapi mungkin juga salah.
tripleee
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.