Miałem skrypt, który działał dobrze, ale kiedy go uruchomiłem dzisiaj, mówi declare: not found
. Używam powłoki bash, a ścieżka na początku skryptu jest poprawna.
Dwie oflagowane linie w moim skrypcie są następujące:
declare -a RESPONSE
RESPONSE=($RESULT)
Mówi także, że (
jest nieoczekiwany, ale myślę, że nadchodzi z powodu pierwszego błędu. Warto wspomnieć o tym, że kiedy wpisuję deklarację, działa to dobrze.
declare | grep USER
przedstawia
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Co się tu dzieje?
#!/bin/bash
tylko. Miałeś na myśli, jak to wykonuję? Właśnie próbowałem wykonać to./script.sh
i działało. Ale to nie działascript.sh
albosh script.sh
i jestem prawie pewien, że kiedyś używałem tylko dwóch ostatnich metod podczas Stworzyłem go tydzień temu. Co to może wyjaśnić?Podejrzewam, że twoja linia „shebang” (opcjonalna pierwsza linia pliku) odnosi się
sh
zamiastbash
. Powinno byćdla skryptów bash. Jeśli pierwsza linia skryptu to
oznaczałoby to, że należy zastosować powłokę ściśle zgodną z bourne; w przypadku Ubuntu
dash
jest używany. W wielu innych dystrybucjach nie powoduje to problemu, ponieważ łączą się/bin/sh
z/bin/bash
; jednak ubuntu prowadzi do linków/bin/dash
, aby umożliwić szybsze uruchamianie skryptów systemowych.declare
Wbudowane jest jednym zbash
„S wiele przedłużeń opisie skryptu powłoki Bourne;dash
po prostu implementuje tę specyfikację bez rozszerzeń.źródło
#!/bin/bash
sh thescript.sh
,sh
powłoka - tzn.dash
Zinterpretuje ją.sh script.sh
. Rozumiem, co powiedziałeś, ale przeczytałem gdzieś, że dzięki tej metodziebash
zinterpretuję to. Dlaczego miałobydash
się tutaj tak odnosić? Czy dotyczy tylko Ubuntu? Może to, co przeczytałem, było ogólnie dla Linuksa.sh script
tobą uruchamia poleceniesh
z argumentemscript
, co powoduje, że sh czyta i wykonuje polecenia z tego pliku. Shebang nie jest czytany przez sh, zaczyna się od a#
, więc jest traktowany jako komentarz. Jeśli zamiast tego uruchomisz./script
, jądro odczyta shebang, który w twoim przypadku jest#!/bin/bash
, i tak się wykonuje/bin/bash ./script
dash
zostanie wykorzystana, więc muszę to wyjaśnićJak odtworzyć powyższy błąd:
Używam Ubuntu 14.04 64 bit. Umieść ten kod w pliku:
Uruchom tak:
Aby to naprawić, zrób to zamiast tego:
Wydruki:
źródło
Miałem ten sam problem, a potem przypomniałem sobie, że musisz przypisać odpowiednie uprawnienia do wykonania skryptu powłoki.
Zmień uprawnienia do skryptu, na przykład:
źródło
Spróbuj uruchomić skrypt za pomocą
/bin/bash
wiersza polecenia, jeślish
(:Zamiast :
Próbować :
źródło
Na Ubuntu możesz mieć skrypt, który wykonuje inne skrypty, na które się natknąłem.
Zmieniam wszystko,
sh some_script.sh
aby$SHELL some_script.sh
to naprawić.źródło