Выполнение процесса подстановки результата в виде скрипта - PullRequest
1 голос
/ 06 февраля 2020

Я хотел бы создать временный сценарий оболочки и передать его в качестве параметра другому сценарию, то есть ловушке обратного вызова. Возможно ли использовать подстановку процесса для этого?

В этом примере aria2 c разрешает перехват в качестве параметра. aria2 c вызовет этот хук с несколькими параметрами после загрузки страницы. В идеале я хотел бы, чтобы aria2 c вызывала мой «виртуальный» скрипт, не создавая предварительно никаких временных файлов, например:

aria2c \
  --on-download-complete <(echo '#!/bin/sh'; echo 'echo "Called with [$1] [$2] [$3]"') \
  https://aria2.github.io/

, но в результате я получаю ошибку разрешения:

Could not execute user command: /dev/fd/63: Permission denied

1 Ответ

0 голосов
/ 07 февраля 2020

Как указано в комментариях, aria2c ожидает, что аргументом перехватчика будет имя файла программы , которая будет выполняться в качестве обратного вызова. Однако имя файла, возникающее в результате подстановки процесса, не является такой программой; Подстановка процесса возвращает имя файла именованного канала .

. Вы не можете делать то, что хотите, не создавая любых файлов. Тем не менее, одна вспомогательная программа stati c и экспортированная функция bash закрываются:

/ my / odc / helper

#!/bin/bash
__aria2c_odc_helper_function "$@"
exit

используется как-то как:

__aria2c_odc_helper_function(){
    echo "Called with [$1] [$2] [$3]"
}
export -f __aria2c_odc_helper_function

aria2c --on-download-complete /my/odc/helper \
    https://aria2.github.io/
...