2014-09-07 4 views
0

Я пытаюсь импортировать строку из оболочки unix в пространство программы specman. Строка, которую я хочу импортировать, содержит кавычки («») - например «привет». В этих случаях строка не обрабатывается должным образом. например предположим, я хочу, чтобы «эхо» некоторые строки в кавычки, я хотел бы сделать следующее:вопрос о specman с разборными цитатами

%> echo echo \"\"hi\"\" 

Выведет

""hi"" 

, но если я использую следующую программу, написанную в е:

<' 
extend sys { 
    run() is also{ 
    print output_from("echo \"\"hi\"\""); 
    stop_run(); 
      }; 
    }; 
'> 

я получаю следующий результат:

output_from("echo \"\"hi\"\"") = 
0.  "hi" 

, как вы можете видеть - кавычки исчезли. те, которые мы видим здесь, исходят от стандартной печати значений списка по умолчанию.

ответ

1

Я не знаком с действием output_from, но я предполагаю, что он обрабатывает входную строку как команду оболочки.

Написав "echo \"\"hi\"\"", вы получите по существу строку, содержащую echo ""hi"". Это связано с тем, что \ будет «съеден» (это символ побега в e). Результирующая строка - это то, что будет выполнено, которое, если вы попробуете в оболочке, также выдаст то же самое. Попробуйте добавить сбежавший \. У меня нет возможности запустить Specman в ближайшее время, поэтому вам придется попробовать его.

Чтобы проверить свою гипотезу:

// just to see what happens with your original string 
var some_string : string = "echo \"\"hi\"\""; 
print some_string; // should output echo ""hi"" 

Чтобы попробовать мое решение сделать что-то вроде этого:

// might need to fiddle with the escaping here 
var some_other_string : string = "echo \\\"\\\"hi\\\"\\\""; 
print some_other_string; // should output echo \"\"hi\"\" 
0

вы передаете вашу строку через несколько строк переводчиков. Первый Specman, а затем интерпретатор строк вашей оболочки.

Вы можете отлаживать получать вашу строку через переводчик Specman в первую распечатав команду, которую вы хотите передать в оболочку первого

message(None,"echo [...]")` 

После печатной команды выглядит, как это будет, когда вы выполняете его оболочку, то он готов к включению в команду output_from. Вы можете создать команду оболочки, используя обычные функции манипуляции со строками Specman.