Saya telah mengerjakan naskah yang mengotomatiskan pengaturan lingkungan pengembangan untuk pengembangan Raspberry Pi (detail langkah demi langkah yang berfungsi ada di sini ). Script ini ditautkan dalam artikel tersebut tetapi Anda juga dapat menemukannya di sini . Sekarang ketika menjalankan skrip ini instal dan atur lingkungan tanpa kesalahan tetapi Anda harus memasukkan kata sandi sudo Anda lebih dari sekali karena nilai batas waktu sudo secara default. Jadi saya mulai bereksperimen dengan menghapus semua baris sudo dan menjalankan seluruh skrip via sudo di baris perintah seperti:
kemra102@ubuntuvm:~$ sudo ./pi_dev_env_install.sh
Ini berfungsi dengan baik seperti yang diharapkan dan mendapatkan sebagian besar jalan sampai titik ini:
./pi_dev_env_install: 68: ./pi_dev_env_install.sh: Syntax error: "(" unexpected
Sekarang baris ini bekerja dengan baik sebelumnya ketika tidak menjalankan seluruh skrip dengan sudo. Tidak ada yang berjalan di baris ini sebagai sudo yang seharusnya berhenti bekerja sesuai pengetahuan saya, apakah ada yang punya ide?
sumber
dash
sebagai gantibash
. Cobalah untuk memindahkan shebang di baris 1.Jawaban:
Script tidak dimulai dengan baris shebang , jadi sistem menjalankannya dengan
/bin/sh
. Di Ubuntu,/bin/sh
adalah dash , shell yang dirancang untuk startup cepat dan eksekusi dengan hanya fitur standar. Ketika tanda hubung mencapai garis 68, ia melihat kesalahan sintaks: tanda kurung itu tidak berarti apa-apa dalam konteks.Karena tanda hubung (seperti semua shell lain) adalah juru bahasa, ia tidak akan mengeluh sampai eksekusi mencapai garis yang bermasalah. Jadi, bahkan jika skrip berhasil dimulai pada beberapa titik dalam pengujian Anda, itu akan dibatalkan setelah baris 68 tercapai.
Baris shebang harus menjadi hal pertama dalam file. Karena Anda menggunakan fitur bash, baris pertama file harus
#!/bin/bash
atau#!/usr/bin/env bash
.sumber
sonarqube.sh
di Ubuntu 15.10. Mengubah header seperti yang dikatakan. Mengeksekusisudo sh ./sonar.sh console
. Masih mendapatkan kesalahan.sonarqube.sh
atausonar.sh
? Putuskan. Lagi pula, jika Anda tidak dapat menyelesaikan masalah dengan informasi di utas ini, ajukan pertanyaan baru dengan konten lengkap skrip dan salin-tempel pesan galat lengkap.#! /bin/sh
dieksekusi dengan sempurna. Sekarang, itu membuat saya bingung.Jika shebang tidak di baris pertama, itu tidak akan dihormati, terlepas dari shell dari pengguna root,
SHELL
variabel atau-s
bendera. Anda dapat dengan mudah mengonfirmasi ini dengan contoh sederhana:Menjalankan skrip ini dengan sudo akan memunculkan kesalahan sintaksis dalam versi terbaru Ubuntu dan Debian.
Anda memiliki dua opsi untuk memastikan skrip ditafsirkan oleh
bash
:Pindahkan shebang ke baris pertama
Jalankan
sudo
seperti ini:sumber
Bagi saya memulai skrip dengan:
bekerja dengan baik.
sumber
Mungkin Anda memiliki "(" pada direktori atau nama file.
sumber
Coba dos2unix dalam file skrip. Kadang-kadang beberapa karakter tersembunyi ada di sumbernya.
perintah:
sumber
Ini bisa terjadi jika Anda mengganti penerjemah yang dimaksud. Misalnya ini akan dijalankan dengan sh, apa pun hash bang yang digunakan (berguna saat tidak menggunakan hash bang):
ATAU untuk menjalankan bash:
Untuk membiarkannya menggunakan nilai hash bang yang ditentukan skrip, gunakan ini:
sumber
Dalam kasus saya kesalahannya adalah kurangnya izin untuk mengeksekusi file. Hanya mendapat pesan kesalahan ketika saya memisahkan perintah:
sumber