G++ wołany z poziomu skryptu


(r_jaro) #1

Witam,

Mam skrypt który pobiera mi pliki cpp z serwera ftp a następnie ma je skompilować.

Problem w tym że skrypt nie wie co to jest gcc lub g++. Bezpośrednio w konsoli podanie g++ nazwa_pliku.cpp idzie ok i kompiluje.

Zamieszczam skrypt.

plik fget.sh uruchamiany jako [kropka][spacja]fget.sh

#!bin/bash 

lftp -u user,password! ftp://192.168.100.101 <
lftp -c "get /serwer/serwer.cpp"

g++ serwer.cpp -o serwer -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient

echo "zrobione"

echo "------------------------"

exit

Skrypt pobiera plik i wyświetla - nieznana komenda g++.

Pozdrawiam.


(dragonn) #2

Spróbuj może tak:

#!bin/bash

lftp -u user,password! ftp://192.168.100.101 <
lftp -c "get /serwer/serwer.cpp"

/usr/bin/g++ serwer.cpp -o serwer -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient

echo "zrobione"

echo "------------------------"

exit

(r_jaro) #3

Z tym też próbowałem na początku to mam taki komunikat:

Nieznana komenda `/usr/bin/g++'.

Oczywiście pobiera tylko plik.


(Johny) #4

Spróbuj dodać ścieżkę

chyba PATH='/usr/bin/':

poczytaj gdzieś na temat PATH bo chyba tu o to chodzi

w google zmienne środowiskowe w linuxie

w skrypcie trzeba dać zmienna środowiskową wskazującą na katalog,a potem się nią posługiwać,albo ścieżkę gdzie ma szukać g++,wpis na początku skryptu


(dragonn) #5

Bardzo dziwne :shock: , to może spróbuj tak:

#!bin/bash

lftp -u user,password! ftp://192.168.100.101 <
lftp -c "get /serwer/serwer.cpp"

cd /usr/bin

./g++ serwer.cpp -o serwer -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient

echo "zrobione"

echo "------------------------"

exit

EDIT

Johny chyba tego nie doczytałeś:


(r_jaro) #6

g++ zainstalowany - (no input files)

Plik zwyczajnie w konsoli mogę skompilować.

Poprzez skrypt to wiadomo

nieznana komenda './g++'

Nie mam pojęcia o co mu chodzi z tym wszystkim


teraz inaczej - jesli zawartoś pliku skryptowego jest taka

g++ serwer.cpp -o serwer -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient

echo "zrobione"

echo "------------------------"

exit

To po wykonaniu ./fget.sh następuje kompilacja. Jeśli dodam do pliku

lftp

to objawy jak wcześniej.

Więc może lftp traktuje g++ jako swój parametr lub coś w tym stylu.

Sam już nie mam pojęcia.


(dragonn) #7

Widocznie to lftp się kłóci z g++ (albo trzeba wydać jakieś dodatkowe polecenie zamykające działanie lftp). A może spróbuj do tego użyć wget, powinie dać radę.


(roobal) #8

U mnie g++ w skrypcie działa normalnie, z tym lftp niestety nie mam jak sprawdzić. Możesz spróbować zrobić tak:

#!/bin/sh

#!bin/bash

lftp -u user,password! ftp://192.168.100.101 <
lftp -c "get /serwer/serwer.cpp && exit"

sleep 4s

g++ serwer.cpp -o serwer -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient

echo "zrobione"

echo "------------------------"

exit

A g++ nie działa i jest nierozpoznane dlatego, że uruchamiasz g++ na serwerze w programie lftp, na którym jesteś zalogowany, więc musisz się najpierw z niego wylogować i dopiero możesz kompilować pobrany plik.

Pozdrawiam!


(r_jaro) #9

Dziwna to przypadłość.

Nadal nieznana komenda 'g++'.

Pobiera pliczek i kompiluje.

A jak tu zrobić jeśli tych plików będzie już kilka?

Za każdym razem podawane hasło i login oraz nazwa pliku czy dalej to już inaczej leciało?

Dzięki za pomoc i za sugestie wykorzystania wget-a

Pozdrawiam.


(roobal) #10

To robisz:

wget --user=user --password='password!' ftp://192.168.100.101/serwer/*.cpp

Albo piszesz w skrypcie jaki rodzaj plików albo o jakich nazwach ma pobrać :slight_smile:

Pozdrawiam!


(Xwars) #11

Może się mylę ale czy wszystkie linie po tej nie zostaną wysłane do programu lftp? A to nic dziwnego, że w nim komendy "g++" nie ma. Przed użyciem g++ powinno być w osobnej lini "EOF" które zakończy ten blok


(przemo_li) #12

Po pierwsze polecam program "make". Jest on dużo lepszy od zwykłego skryptu Shella.

Po drugie wpisz w konsoli te komendy i sprawdź czy się wykonują. Tzn wpisz dokładnie te polecenia których używasz w skrypcie w dokładnie tej kolejności.

Co do nieznanej komendy to wpisz jeszcze:

find g++

powinien pokazać gdzie jest g++ w twoim systemie jeżeli podane ścieżki są inne niż twoje to wpisz

/podana/ścieżka/g++ jeżeli się uruchomi g++ to zmień ścieżki w skrypcie


(roobal) #13

Problem z nierozpoznaniem g++ jest taki, że sesja w Lftp jest niezakończona i program nie skończył swojego działa. W programie tym można używać poleceń powłoki Bash, właśnie w tej sesji skrypt próbuje użyć g++ do kompilacji i próbuje to robić na serwerze , do którego jest zalogowany a na serwerze nie ma zainstalowanego kompilatora.

Pozdrawiam!