Próbuję stworzyć prosty skrypt, który skompiluje test.cpp, ale nie mogę go uruchomić. Uruchamiam skrypt w następujący sposób:
> bash make.sh
I pojawia się następujący błąd:
: No such file or directory
g++: no input files
make.sh: line 3: ./test.out: No such file or directory
Oto make.sh:
#!/bin/sh
g++ -o ./test.out ./test.cpp
./test.out
Próbowałem bez „./” i nadal nie działa. Używam Cygwin na Windows 7 z zainstalowanymi wszystkimi właściwymi pakietami (mogę skompilować i uruchomić z samej powłoki, ale nie ze skryptu).
Odpowiedzi:
Czy tworzysz za
make.sh
pomocą Notatnika? Jeśli tak, każda linia kończy się naCR
(powrót karetki) iLF
(przesunięcie linii). Cygwin i jego programy podobne do Uniksa nie mogą sobie z tym poradzić; Unix oczekuje, że linie w plikach tekstowych kończą się tylko znakiemLF
(który Unix nazywa znakiem „nowej linii”). Edytuj plik za pomocą edytora Cygwin (np.vi
Lubvim
) i napraw go. Jeśli nie możesz tego zrobić, spróbuj dodać „; #
” na końcu każdej linii; powinno to spowodowaćbash
potraktowanie przestępcówCR
jako komentarzy.Aby rozwinąć powyższe: jeśli moja teoria jest poprawna, druga linia
make.sh
wygląda następująco:plus te,
LF
które powinny tam być (cobash
wyklucza wzięcie pod uwagę). Tak więcg++
szuka pliku o nazwie „./test.cpp
CR”, który oczywiście nie istnieje. Więc mówi:Ale ze względu na to, co jest znakiem powrotu karetki, powoduje
: No such file or directory
to zastąpienie znaku./test.cpp
, więc: No such file or directory
wszystko, co widzisz.źródło