Di sistem sekolah kami, kami dapat menjalankan file skrip tanpa mengetik bash
atau csh
atau apa pun yang Anda miliki tanpa menunjukkan jenis skrip apa itu. Di Ubuntu, saya diminta mengetik bash script.bash
misalnya. Apakah ini selalu diperlukan di Ubuntu, atau itu beberapa pengaturan yang dapat saya ubah?
11
.sh
skrip bash. Namun, umumnya ekstensi file tidak digunakan untuk skrip yang dapat dieksekusi di dunia UNIX.Jawaban:
Pastikan Anda memulai skrip dengan
./script
atau path lengkap atau apa pun.script
Mungkin saja tidak berfungsi (itu berfungsi jika direktori ada di$PATH
, seperti/usr/bin
), karena pada sistem UNIX itu bukan kebiasaan untuk memiliki direktori saat ini di jalur Anda (untuk alasan keamanan, dan itu bagus!)Pastikan skrip dapat dieksekusi, misalnya:
chmod +x script
akan membuatnya dapat dieksekusi.Pastikan, Anda memiliki
#!/bin/bash
sebagai baris pertama dalam skrip Anda. Juga pastikan, bahwa itu tidak diedit dengan semacam editor Windows, karena yang sering menggunakan "tipe DOS" dari eol (end of line) yang berbeda dari yang UNIX (jika daftar periksa di atas OK, tetapi Anda mendapat "buruk interpreter: tidak ada file atau direktori "atau lebih, bahkan jika itu / bin / bash, ini sering menjadi alasan, karena tidak dapat dicetak - jadi Anda biasanya tidak melihatnya - akan diperlakukan sebagai bagian dari jalur penerjemah)Yang lain telah disebutkan: sangat penting untuk dimiliki
/bin/bash
jika Anda menggunakan fitur bash, juga/bin/sh
dikaitkan dengan/bin/bash
, tetapi sekarang-a-hari (sejauh yang saya perhatikan) itu terhubung kedash
yang tidak akan memberikan kompatibilitas bash, hanya POSIXsh
. Ini cukup penting, bahkan perangkat lunak yang cukup mahal di perusahaan kami memiliki masalah ini: skrip berisi#!/bin/sh
sebagai baris pertama tetapi tergantung pada fungsi bash juga.sumber
#!/usr/bin/env bash
, yang sedikit lebih portabel.Pastikan baris pertama file berbunyi:
Jika shebang adalah
#!/bin/sh
, Anda tidak harus menggunakan fitur spesifik bash, hanya fitur POSIX. Bahkan jika/bin/sh
symlink adalah untukbash
, bash akan berjalan dalam mode kompatibilitas POSIX ketika dijalankan sebagai sh, menonaktifkan beberapa (tetapi tidak semua) fitur bash.Anda juga harus memastikan skrip dapat dieksekusi, tentu saja.
sumber
Alternatif, sangat kecewa dengan cara menambah
.
kePATH
.atau
Masalah dengan pendekatan ini adalah bahwa dalam kasus sebelumnya, perintah sistem apa pun bisa ditimpa dengan executable dari direktori saat ini, dan dalam kasus terakhir, perintah yang tidak diketahui masih bisa ditimpa.
Pertimbangkan yang berikut ini:
File: ls
Kemungkinan besar Anda bahkan tidak akan menyadarinya sampai terlambat.
sumber
echo
misalnya, yang ada di direktori Anda akan digunakan hanya karena direktori tersebut diatur dalamPATH
variabel sebelum/bin
. Shell hanya mencari perintah di direktori tertentu tergantung pada urutannyaPATH
, dan tidak menimpa / menghancurkan apa pun. Tapi ya, ini memiliki implikasi