2016-11-18 14 views
0

Ich habe ein Problem mit der Systemfunktion. Wenn ichWarum kann die Systemfunktion unter Linux dieses Shellskript nicht ausführen?

echo -e '\x2f' 

in Shell ausgeführt, ist der Ausgang / aber wenn ich den Befehl in C-Programm wie gesagt:

int main(int argc, char* argv[], char** envp) 
{ 
    printf("The command is :%s\n",argv[1]); 
    system(argv[1]); 
    return 0; 
} 

Ausgabe lautet:

The command is :echo -e '\x2f' 
-e \x2f 

Warum funktioniert die system Funktion Ausgabe '-e \x2f' anstelle von '/'

BTW, verwende ich Python zur Eingabe des argv:

# I used \\ because python will transfer \x2f to/automatially 
command="echo -e '\\x2f'" 
p=process(executable='/home/cmd2',argv= ['/home/cmd2',command]) 
print (p.readall()) 
+0

Da das Skript von '/ bin/sh' und nicht von'/bin/bash' und '/ bin/sh' ausgeführt wird, werden die Dinge nicht wie'/bin/bash' interpretiert. –

Antwort

1

Erstens echo Befehl ausgeben kann unterschiedlich zwischen sh und bash.
Ref: https://unix.stackexchange.com/questions/88307/escape-sequences-with-echo-e-in-different-shells

bash -c "echo -e '\x2f'" 
# Output :/
sh -c "echo -e '\x2f'" 
# Output : -e/

Um Python zu haben, spucken unten sollte funktionieren wie die gleiche, etwas aus.
(Zu Ihrer Information enthalten die gleiche Umsetzung mit subprocess)

import os 
import subprocess 

command = "echo -e '\\x2f'" 

os.system(command) 
# Output : -e/
subprocess.call(command , shell=True) 
# Output : -e/

bashcmd = "bash -c \"echo -e '\x2f'\"" 

os.system(bashcmd) 
# Output :/
subprocess.call(bashcmd , shell=True) 
# Output :/

Ich bin unsicher, wie Sie obwohl -e \x2f als Ausgabe bekam.

+0

'bash -c \" echo -e '\ x2f' \ "' kann funktionieren, aber meine Situation ist, dass die PATH-Variable geleert wurde, also benutze 'echo -e '\ x2f'', um'/', aber' zu konstruieren/bin/bash 'habe auch'/', Vielleicht sollte ich einen anderen Weg versuchen – ETenal

+0

Willst du PATH variable Masse aufstellen? Es lohnt sich, dies zu überprüfen (http://stackoverflow.com/a/1681244/7153181). In jedem Fall ist "echo" wahrscheinlich nicht die Art, die Sie nehmen möchten ... – Ryota

Verwandte Themen