Как вызвать функцию сценария оболочки в моем Perl? - PullRequest
1 голос
/ 14 января 2020

У меня есть некоторые функции в util. sh, я хочу вызвать функцию в util. sh и получить возвращаемое значение. Кто-нибудь знает, как это сделать?

util. sh

#!/bin/bash
sayhello()
{
    echo $1 "hello"
}

Я пытаюсь вызвать функцию в терминале, используя команду, как показано ниже, но получил вывод "не могу найти команда sayhello ":

sh /home/adnrew/code/test/util.sh sayhello test

и использование кода в моем perl, как показано ниже,

$returnvalue = system("/home/adnrew/code/test/util.sh sayhello test ");

тоже не может работать.

Как мне вызвать shell функция скрипта в моем Perl?

1 Ответ

2 голосов
/ 14 января 2020

Вы можете поместить сценарий оболочки в подпроцесс с помощью

$returnvalue = system(". /home/adnrew/code/test/util.sh; sayhello test");

Родительский процесс (оболочка bash или системный подпроцесс perl) создает дочерний процесс bash при попытке выполнение bash оболочки. Таким образом, все, что определено в сценарии, ограничено только дочерним процессом и не будет отражаться в самом родительском процессе. С другой стороны, поиск сценария (команда 'dot' или просто source) запускает определение в том же процессе bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...