Может ли m4 выполнять пользовательские сценарии bash?

Может ли язык макрорасширения m4 выполнять определяемый пользователем bash сценарии? рассмотрим файл m4

define(`FOOBAR', `esyscmd(mycmd)') dnl
FOOBAR

где mycmd — это файл bash, определенный в том же каталоге, что и файл m4, который выглядит как

#!/bin/bash

echo "Hello World"

Однако при выполнении m4 во входном файле я получаю сообщение об ошибке

ш: 1: mycmd: не найдено

Означает ли это, что мне нужно изменить какую-то переменную, содержащую список каталогов, в которых m4 ищет определенные команды?

Я надеюсь, что смогу запускать сценарии awk (или даже python) и вставлять вывод этих сценариев вместо соответствующего имени макроса.


m4
person smilingbuddha    schedule 11.12.2018    source источник


Ответы (1)


m4 может выполнять внешние программы. Вы забыли только одно: PATH. Пожалуйста, попробуй:

define(`FOOBAR', `esyscmd(./mycmd)') dnl
FOOBAR

Обратите внимание ./mycmd!

person uzsolt    schedule 11.12.2018
comment
Я пробовал это. Я все еще получаю ту же ошибку. Ошибка возникает, даже когда я делаю m4 -I. foobar.m4 - person smilingbuddha; 11.12.2018
comment
-I m4 - это путь включения m4, а не $PATH оболочки. С правами на ./mycmd все в порядке? Можете ли вы запустить из оболочки (и из того же каталога) ./mycmd? - person uzsolt; 11.12.2018