В конце концов, я собрал его из исходников.
AFAIK, установщики могут иметь дело только со стандартными, предопределенными местоположениями для исполняемых файлов, и если вам нужно несколько версий одних и тех же инструментов, вам лучше собрать их в / usr / local /.
В основном у вас есть три варианта:
export -f
(это функция, не относящаяся к POSIX bash ) Вариант 1, вероятно, проще всего продемонстрировать, поэтому я покажу его:
$ f() { num=$1; echo "$num is an integer"; }
$ export -f f
$ cat Commands.txt
number=1; f "$number"
number=2; f "$number"
number=3; f "$number"
number=4; f "$number"
number=5; f "$number"
$ parallel :::: Commands.txt
1 is an integer
2 is an integer
3 is an integer
4 is an integer
5 is an integer
Обратите внимание, что ваша популяция Commands.txt
, скорее всего, ошибочна, вам нужно f "$ number"
в Commands.txt
, чтобы передать номер, а не ] f число
, которое передало бы буквальную строку «число». Ваш скрипт для его генерации должен выполнять echo "number = $ i; f \" \ $ number \ ""
(обратите внимание на escape-символы, которые важны, чтобы избежать интерпретации $ number
в echo
время или "
с завершающей строки).
Bash может экспортировать функции через переменные среды.
export -f f
Обратите внимание, что это функция bash, недоступная в других оболочках семейства sh.
Как вариант, можно сделать функцию скриптом. Сценарии и функции имеют одинаковый синтаксис, за исключением строки определения функции.
#!/bin/bash
num="${!1}"; echo $num is an integer;
Если вы это сделаете, вам нужно будет экспортировать переменную, которую вы передаете скрипту: строки в Command.txt
должен будет выглядеть как
export number=1; f number
или
number=1 f number