2016-11-18 4 views
0

Я встречаюсь с проблемой о системной функции. Если я бегуПочему функция «system» в Linux не запускает этот shellscript?

echo -e '\x2f' 

в оболочке, выход /, но когда я поставил команду в программе C, как:

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

выходе:

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

Почему функцию system выход '-e \x2f' вместо '/'

BTW, я использую Python для ввода 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

Поскольку сценарий запускается '/ bin/sh', а не'/bin/bash', а '/ bin/sh' не интерпретирует вещи так же, как'/bin/bash'. –

ответ

1

Во-первых, echo команда может выводить по-разному между sh и 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/

Для того, чтобы иметь Python выплюнуть то же самое, что-то вроде ниже должно работать.
(Для справки, включенный в том же реализацию с подпроцессом)

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 :/

Я уверен в том, как вы получили -e \x2f в качестве выхода, хотя.

+0

'bash -c \" echo -e '\ x2f' \ "' может работать, но моя ситуация в том, что переменная PATH была опустошена, поэтому я использую 'echo -e '\ x2f'' для построения'/', но'/bin/bash' также есть '/', Может быть, я должен попробовать другим способом – ETenal

+0

Вы пытаетесь установить переменную PATH на землю? Возможно, стоит проверить [это] (http://stackoverflow.com/a/1681244/7153181). В любом случае, «эхо», вероятно, не так, как вы хотите ... – Ryota