GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menjalankan skrip shell di konsol Unix atau terminal Mac?

Untuk memulai skrip shell 'file.sh':

sh file.sh

bash file.sh

Opsi lain adalah mengatur izin yang dapat dieksekusi menggunakan perintah chmod:

chmod +x file.sh

Sekarang jalankan file .sh sebagai berikut:

./file.sh

Untuk menjalankan sh yang tidak dapat dieksekusi skrip, gunakan:

sh myscript

Untuk menjalankan bash yang tidak dapat dieksekusi skrip, gunakan:

bash myscript

Untuk memulai file yang dapat dieksekusi (yang merupakan file apa pun dengan izin yang dapat dieksekusi); Anda cukup menentukannya dengan jalurnya:

/foo/bar
/bin/bar
./bar

Untuk membuat skrip dapat dieksekusi, berikan izin yang diperlukan:

chmod +x bar
./bar

Saat file dapat dieksekusi, kernel bertanggung jawab untuk mencari tahu bagaimana mengeksekusinya. Untuk non-biner, ini dilakukan dengan melihat baris pertama file. Itu harus berisi hashbang :

#! /usr/bin/env bash

Hashbang memberi tahu kernel program apa yang harus dijalankan (dalam hal ini perintah /usr/bin/env dijalankan dengan argumen bash ). Kemudian, skrip diteruskan ke program (sebagai argumen kedua) bersama dengan semua argumen yang Anda berikan pada skrip sebagai argumen berikutnya.

Artinya setiap skrip yang dapat dieksekusi harus memiliki hashbang . Jika tidak, Anda tidak memberi tahu kernel apa itu itu , dan karena itu kernel tidak mengetahui program apa yang digunakan untuk menginterpretasikannya. Bisa jadi bash , perl , python , sh , atau sesuatu yang lain. (Pada kenyataannya, kernel akan sering menggunakan shell default pengguna untuk menginterpretasikan file, yang sangat berbahaya karena itu mungkin bukan penerjemah yang tepat sama sekali atau mungkin dapat menguraikan sebagian tetapi dengan perbedaan perilaku yang halus seperti ini kasus antara sh dan bash ).

Catatan tentang /usr/bin/env

Paling umum, Anda akan melihat poni hash seperti ini:

#!/bin/bash

Hasilnya kernel akan menjalankan program /bin/bash untuk menafsirkan naskah. Sayangnya, bash tidak selalu dikirimkan secara default, dan tidak selalu tersedia di /bin . Sedangkan pada mesin Linux biasanya demikian, ada berbagai mesin POSIX lainnya di mana bash dikirimkan di berbagai lokasi, seperti /usr/xpg/bin/bash atau /usr/local/bin/bash .

Untuk menulis skrip bash portabel, oleh karena itu kita tidak dapat mengandalkan hard-coding lokasi bash program. POSIX sudah memiliki mekanisme untuk mengatasinya:PATH . Idenya adalah Anda menginstal program Anda di salah satu direktori yang ada di PATH dan sistem harus dapat menemukan program Anda saat Anda ingin menjalankannya dengan nama.

Sayangnya, Anda tidak bisa lakukan saja ini:

#!bash

Kernel tidak akan (beberapa mungkin) melakukan PATH mencarimu. Ada sebuah program yang dapat melakukan PATH mencari Anda, namanya env . Untungnya, hampir semua sistem memiliki env program terinstal di /usr/bin . Jadi kita mulai env menggunakan jalur hardcoded, yang kemudian menghasilkan PATH cari bash dan menjalankannya sehingga dapat menginterpretasikan skrip Anda:

#!/usr/bin/env bash

Pendekatan ini memiliki satu kelemahan:Menurut POSIX, hashbang dapat memiliki satu argumen . Dalam hal ini, kami menggunakan bash sebagai argumen untuk env program. Itu berarti kita tidak memiliki ruang tersisa untuk meneruskan argumen ke bash . Jadi tidak ada cara untuk mengonversi sesuatu seperti #!/bin/bash -exu untuk skema ini. Anda harus memasukkan set -exu setelah hashbang sebagai gantinya.

Pendekatan ini juga memiliki keunggulan lain:Beberapa sistem mungkin dikirimkan dengan /bin/bash , tetapi pengguna mungkin tidak menyukainya, mungkin menganggapnya bermasalah atau ketinggalan zaman, dan mungkin telah memasang bash miliknya sendiri di tempat lain. Hal ini sering terjadi pada OS X (Mac) di mana Apple mengirimkan /bin/bash yang kedaluwarsa dan pengguna menginstal /usr/local/bin/bash terbaru menggunakan sesuatu seperti Homebrew. Saat Anda menggunakan env pendekatan yang melakukan PATH pencarian, Anda mempertimbangkan preferensi pengguna dan menggunakan bash pilihannya daripada bash yang disertakan dengan sistemnya.


Untuk bourne shell:

sh myscript.sh

Untuk pesta:

bash myscript.sh

Linux
  1. Bagaimana Cara Memeriksa Substring Di Shell Script Bash?

  2. Bagaimana Cara Menjalankan Script Shell Di Latar Belakang?

  3. Bagaimana Anda menjalankan skrip saat login di * nix?

  1. Bagaimana menjalankan perintah bash Linux dalam skrip PERL?

  2. Bagaimana cara menjalankan skrip python di terminal (ubuntu)?

  3. Bagaimana cara menjalankan skrip .sh dari jalur mana pun di terminal?

  1. Bagaimana Cara Menyelesaikan Nama Host Ke Alamat Ip Dalam Skrip Bash?

  2. Bagaimana Menghentikan Skrip Loop Bash Di Terminal?

  3. Cara menjalankan skrip Python dari shell