Perl не может `выполнить `в двоичный файл

Это делает то, что вы хотите, если вам нужно использоватьawk:

$ awk 'BEGIN{FS=":"; OFS=":"}{$1=$3=$4=$5="";gsub("^"FS,"",$0);gsub(FS"+",FS,$0)}1' <your file>
  • Приведенное выше работает, разбивая все на поля через BEGIN{FS=":"; OFS=":"}.
  • Затем он очищает поля 1,3,4 и 5, устанавливая для них значение "".
  • Команда 2 gsubнаводит порядок, удаляя все двоеточия (:), которые могут начинаться в начале. = Второй gsubудаляет любые последовательности двоеточий(:)из оставшейся строки в $0.
  • Наконец, мы печатаем результаты через 1.
1
29.07.2020, 22:37
2 ответа

... but cannot fork to it

execвообще не разветвляется, а заменяет текущий код приложения (, то есть perl ), на новый (a.out ).

Кроме того, неясно, какой вывод вообще ожидается от a.out, т.е. проблема может быть в a.out, а не в perl.

Также может случиться так, что система просто не ищет a.outв локальном каталоге для двоичного файла, поскольку переменная среды PATHявно не включает .. Для принудительного выполнения вместо этого выполните exec "./a.out".

1
18.03.2021, 23:16

Ответ содержится в документации exec, но трудно понять, если вы не знаете, что ищете.

If there is more than one argument in LIST, this calls execvp(3) with the arguments in LIST. If there is only one element in LIST, the argument is checked for shell metacharacters, and if there are any, the entire argument is passed to the system's command shell for parsing (…). If there are no shell metacharacters in the argument, it is split into words and passed directly to execvp (…).

Во всех случаях имя команды ищется в пути (либо Perl, либо оболочкой ):, если оно не содержит /, оно ищется в пути поиска команды($PATH), который обычно не содержит текущий каталог.

Изменить на

exec "./a.out"
1
18.03.2021, 23:16

Теги

Похожие вопросы