Próbuję uruchomić plik .sh na RH6 i otrzymuję ten błąd ...
cannot open '' for reading: No such file or directory
Skrypt, który uruchamiam, wewnętrznie odwołuje się do innych skryptów znajdujących się w tym samym katalogu. Widzę ich za pomocą ls -la
.
Uwaga: ten skrypt działa doskonale na RH4. Mam nową świeżą maszynę RH6, na której próbuję uruchomić moje skrypty.
Mój abc.sh
skrypt, jak wspomniano poniżej
. fox_comm_server_details.sh
. fox_comm_topic_names.sh
. fox_comm_sh_tools.sh
odnosi się do innych .sh
plików script ( ).
Kiedy uruchamiam abc.sh (z ./abc.sh
), mówi
fox_comm_server_details.sh: cannot open [No such file or directory]
Potwierdziłem, że wymagane skrypty są obecne w katalogu i mam do nich uprawnienia. Jeśli zaktualizuję abc.sh
jak poniżej ...
. ./fox_comm_server_details.sh
. ./fox_comm_topic_names.sh
. ./fox_comm_sh_tools.sh
Tym razem nie narzeka na brakujące pliki, ale na inny błąd, jak wspomniano poniżej ...
read_fox_comm_servers_list[134]: read_fox_comm_servers_list_defaults[37]: local: not found [No such file or directory]
read_fox_comm_servers_list
i read_fox_comm_servers_list_defaults
są funkcjami, które są zdefiniowane w fox_comm_sh_tools.sh
następujący sposób ...
function read_fox_comm_servers_list
{
read_fox_comm_servers_list_defaults
read_fox_comm_servers_list_overrides
}
function read_fox_comm_servers_list_defaults
{
local tempfile=/tmp/read_fox_comm_servers_list_defaults.$$
}
i uzyskanie wyżej wymienionego błędu.
źródło
#!/bin/sh
, to czy wiesz, co/bin/sh
jest w twoim systemie (np. Czy to bash czy dash)? ... Myślę, że134
i37
w komunikacie błędu (-ów) są numery linii. Prawdopodobnie masz rację, nie rzucając na nas całego skryptu 135+, ale czy próbowałeś usunąć wiersze ze skryptu (działającej, debugowanej) skryptu, dopóki błąd nie zniknie? Spróbuj tego - ostatnia rzecz, którą usunąłeś, prawdopodobnie będzie dużą wskazówką dotyczącą problemu.Odpowiedzi:
Strzał w ciemność: edytuj swoje pytanie, klikając ten link, ponieważ jest to naprawdę trudne do zrozumienia.
Ogólnie wydaje się, że gdzieś w skrypcie (lub w indeksie dolnym) zmienna nie jest ustawiona z nazwą pliku.
Możesz zauważyć
''
bez nazwy w komunikacie o błędzieMożesz wyszukać, gdzie jest błąd aktywujący debugowanie w twojej powłoce
źródło
-x
w skrócie) nie są przekazywane z rodzica na dziecko, więc będzie to oznaczać tylko, że użytkownik działamyscript.sh
, ale nie to, co dzieje się w skrypcie. W tym celu potrzebujesz jednego z poniższych: (1)set -x; . myscript.sh; set +x
(prawdopodobnie nie jest to dobry pomysł), (2)(set -x; . myscript.sh)
(zwróć uwagę na nawiasy), (3)sh -x myscript.sh
lub (4) edytujmyscript.sh
i dołącz-x
do linii she-bang (#!/bin/sh
na pierwsza linia).