m4tx |
» 2012-09-03 14:04:48 @up w ostateczności możesz zrobić coś takiego, że w cmd.exe wykonujesz sobie te pkg-configi, a potem dodajesz te opcje, które to Ci wyrzuci, do ustawień kompilatora i linkera. Aczkolwiek ładnie będziesz miał wtedy zawalone, zwłaszcza kompilator :P |
|
Mrovqa Temat założony przez niniejszego użytkownika |
» 2012-09-03 14:20:28 m4tx, to jest ten 'nieelegancki' sposób, o którym napisałem... Btw jest jeszcze jeden sposób, którego raczej nie uda mi się zrealizować (nie zamierzam), aczkolwiek jest możliwy - przechwytywanie wiersza poleceń/modyfikacja windowsowskiego interpretera (gyn jakoś zrobił swojego ansi hacka :D). |
|
DejaVu |
» 2012-09-03 14:36:47 A co to za problem napisać własną aplikację i wywołać ją:
myapp echo `echo ble`
Istotą jest znalezienie rozwiązania, które jest standardowo wspierane przez system, a nie implementowanie własnych tricków. |
|
Mrovqa Temat założony przez niniejszego użytkownika |
» 2012-09-03 15:14:14 @up wiem, ale nie chodziło mi o własną aplikację (chodź muszę przyznać - fajny pomysł; może napiszę sobie taką 'nakładkę' na gcc), ale o modyfikację obsługi wiersza poleceń przez system (co pisałem, że robić nie będę :P). |
|
ison |
» 2012-09-03 15:49:05 #include <cstdio> #include <string> #include <windows.h>
int main( int argc, char ** argv ) { if( argc < 2 ) { printf( "No arguments given.\n" ); return 0; } std::string command; for( int i = 1; i < argc; ++i ) { command += argv[ i ]; if( i != argc - 1 ) command += ' '; } std::string output; int gravisIndex = - 1; for( size_t i = 0; i < command.size(); ++i ) { if( command[ i ] == '`' ) { if( gravisIndex >= 0 ) { TCHAR tempPath[ MAX_PATH ]; DWORD tempPathRet = GetTempPath( MAX_PATH, tempPath ); if( !tempPathRet || tempPathRet > MAX_PATH ) { printf( "Getting temp path failed.\n" ); return 0; } std::string fileName = tempPath; fileName += tmpnam( NULL ) + 1; fileName += "tmp"; std::string sys = command.substr( gravisIndex + 1, i - gravisIndex - 1 ); sys = sys + " > " + fileName; system( sys.c_str() ); FILE * file = fopen( fileName.c_str(), "r" ); if( !file ) { printf( "Opening temp file failed.\n" ); return 0; } char buff[ 100 ]; while( !feof( file ) ) { if( fgets( buff, 100, file ) ) { output += buff; } } fclose( file ); while( output.size() &&( output[ output.size() - 1 ] == '\n' || output[ output.size() - 1 ] == '\r' || output[ output.size() - 1 ] == ' ' ) ) { output = output.substr( 0, output.size() - 1 ); } gravisIndex = - 1; } else gravisIndex = i; } else if( gravisIndex < 0 ) output += command[ i ]; } system( output.c_str() ); }
rozwiązanie trochę brzydkie bo żeby pozyskać output muszę przekierowywać go do pliku tymczasowego i z niego czytać, zapewne jakoś się da pipe'ami to zrobić ładniej, ale grunt, że działa :D przynajmniej u mnie program echo a - a program echo `echo a` - a program echo `echo 1``echo 2`abc - 12abc tu kod normalnie sformatowany: http://pastebin.com/5JqtRHpy(pod niektórymi kompilatorami trzeba ręcznie jakoś przekonwertować TCHAR* na char*, pod najnowszym mingw się nie czepia) |
|
pekfos |
» 2012-09-03 18:10:19 Można też napisać program generujący makefile |
|
Mrovqa Temat założony przez niniejszego użytkownika |
» 2012-09-03 18:27:38 @ison dzięki, ale ja już zacząłem pisać własny programik ;) Co do zapisywania do pliku - myślałem o przekierowaniu strumienia gdzieś do pamięci (tylko jak to zrobić tak, by do stdout nic nie trafiło...). @pekfos akurat w sprawie makefile to mam zaległości, nigdy tego nie używałem i nie wiem dokładnie co to jest, ale jakieś podstawowe pojęcie mam ;)
/edit: Póki co zmodyfikowałem lekko kod isona. Ten sposób ma pewną wadę --> ec`echo ho` abc <-- normalnie pod linuxem główne polecenie można też złożyć, ale to żaden problem dla mnie ;) Ehh ten windows i jego konsola...
Btw jakby ktoś miał coś ciekawego związanego z głównym problemem, tj. odpowiednikiem operatora, to chętnie wysłucham :) Temat pozostawiam otwarty. |
|
ison |
» 2012-09-03 21:24:15 Póki co zmodyfikowałem lekko kod isona. Ten sposób ma pewną wadę --> ec`echo ho` abc <-- normalnie pod linuxem główne polecenie można też złożyć, ale to żaden problem dla mnie ;) Ehh ten windows i jego konsola...
|
przecież u mnie też można ;) ec`echo ho` abc - abc |
|
1 « 2 » 3 |