View Full Version : [SHELL] + comandi x linea è possibile?
Matrixbob
12-07-2007, 14:22
Esperti di Shell a me! :)
Dite che è possibile dare + comandi x linea di comando?
Ne sto parlando QUI (http://www.hwupgrade.it/forum/showpost.php?p=17894410&postcount=19), perchè poi vorrei mandare la riga in esecuzione con questo codice C:
// inizializzo la stringa vuota col carattere \0
memset(comando, 0, SIZEBUF);
sprintf(comando, "RIGA_DI_COMANDI");
printf("Lanciato comando> %s\n", comando);
system(comando);
PERCHE'
Tutto questo perchè devo creare dinamicamente una cartella data contenente altre cartelle che si verranno a creare, es: canale1, canale2, etc...
IN SOSTANZA
Shell> mkdir ./data/canale1
, ma questo mi viene riconosciuto come sintatticamente errato.
AnonimoVeneziano
12-07-2007, 14:55
Fammi capire, vuoi che "mkdir" ti crei una gerarchia di directory multipla? (tipo /data/canale1 crea prima "/data" e poi "/data/canale1")
In quel caso basta dare "mkdir -p ./data/canale1" L'opzione -p fa proprio quello che cerchi.
Per lanciare + comandi da linea di comando basta comunque usare l'espressione "&&" tipo :
"tar xvzf programma-src.tar.gz && cd programma-src && ./configure && make && make install"
Scompatta , configura, compila e installa un programma :)
Ciao
Matrixbob
12-07-2007, 15:09
In pratica tutto nasce da questo POST:
[C] System: "rm" di Linux diventa "del" su Win32?! (http://www.hwupgrade.it/forum/showthread.php?p=17894410)
Ho fatto 1 "quasi-parser" RSS. :)
Cosa voglio?
Voglio che ora il parser crei dentro la cartella "data" le cartelle "canaleX" ogni qual volta incotra 1 canale RSS.
Ovviamente devo dargli un comando che con l'automatizzazione del programma non crei side-effect come piantarsi o far crashare il programma principale.
In sostanza ogni qual volta trovo 1 canale vorrei lanciare un "mkdir ./data/canaleX" dove mettere tutto il contenuto del canaleX.
Matrixbob
12-07-2007, 15:14
Se per "gerarchia di directory multipla" intendi che da FileSystem pulito mi crei la cartella "canale1" dentro la cartella "data" si.
Ma al ciclo seguente ci sarà "canale2" da creare dentro "data".
non mi è chiarissimo cosa vuoi ottenere ma forse...
prova a lanciare:
> mkdir -p data/canale{1,2,3}/
e guarda cosa succede, forse è cio che cerchi!
ciao!
Matrixbob
12-07-2007, 15:25
Eh quello che chiedo è aimè sul confine programmazione/linux.
Voglio lanciare 1 comando shell con la funzione di C chiamata:
system("STRINGA DI COMANDO");
- Quando lo lancio il comando?
- Quando incontro un TAG-RSS.
- Che comando devo lanciare?
- Un comando che mi crei la cartella "canale1" dentro una cartella "data".
- Accorgimenti?
- Che alla II volta che ripete il loop la cartella "data" esistente non venga rimossa, ma solo riempita con un'altra cartella "canale2" e così via...
[NB]
Al (loop = 0) la cartella "data" NON esiste e devo crearla.
---
Adesso dovrei essere stato esaustivo no?
Eh quello che chiedo è aimè sul confine programmazione/linux.
Esagerato! :D
comunque se esegui
mkdir -p data/dirA
e poi
mkdir -p data/dirB
ottieni una cartella data con dentro dirA e dirB, se poi esegui
mkdir -p data/dirC
in data ci sarà anche dirC e così via...
eseguire mkdir -p data/dirA se data/dirA esiste già non è un problema, non solleva errori.
Matrixbob
12-07-2007, 17:59
http://img517.imageshack.us/img517/2696/asdav8.gif
Mi sento mongolino. :stordita:
Sono su WinXP e sto usando il MinGW ovvero il compilatore GCC x Winzoz.
Perchè NON riesco a creare ste cacchio di direcotry?
E' una limitazione della mia piattaforma?! :mbe:
void scaricare_enclosure(char *input)
{
extern char enclosure_nomefile[];
extern int canale_numero, count_item;
char comando[SIZEBUF];
// inizializzo la stringa vuota col carattere \0
memset(comando, 0, SIZEBUF);
sprintf(comando, "mkdir -p data/canale%d", canale_numero);
printf("Lanciato comando> %s\n", comando);
system(comando);
// inizializzo la stringa vuota col carattere \0
memset(comando, 0, SIZEBUF);
sprintf(comando, "wget \"%s\" -T 30 -o ./log/enclosure_item%d.log -O ./data/canale%d/%s", input, count_item, canale_numero, enclosure_nomefile);
printf("Lanciato comando> %s\n", comando);
system(comando);
}
Sto cornutazzo mi crea anhe la directory "-p" e "data" e poi si pianta. :(
Matrixbob
12-07-2007, 19:10
A chi interessa, pare che ho risolto così:
// inizializzo la stringa vuota col carattere \0
memset(comando, 0, SIZEBUF);
#ifdef WIN32
printf("Rilevato SO Windows.\n");
sprintf(comando, "md .\\data\\canale%d", canale_numero);
#else
printf("Rilevato SO non Windows.\n");
sprintf(comando, "mkdir /p ./data/canale%d", canale_numero);
#endif
printf("Lanciato comando> %s\n", comando);
system(comando);
A chi interessa, pare che ho risolto così:
printf("Rilevato SO non Windows.\n");
sprintf(comando, "mkdir /p ./data/canale%d", canale_numero);
se lanci "mkdir /p" non ti crea la dir "p" nella root del filesystem?
Matrixbob
12-07-2007, 19:59
se lanci "mkdir /p" non ti crea la dir "p" nella root del filesystem?
Si, adesso che guardo si.
Ora lo lancio così:
mkdir dir1/dirA
mkdir dir1/dirB
e le crea.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.