Как «экспортировать» функции в bash?

Используйте следующий подход:

grep -Po '(?<=\*B\*)[^*]+' tus.txt | sort -u

Вывод:

00081684
00081907
00082024
00082025
00082403
00082603
222791885833
2239681
262105589241-20172-31489016
36
4578873831221

Обратите внимание, sort -u изменит порядок начального grep вывода

0
07.06.2019, 11:28
1 ответ

Обратите внимание, что bashне является sh. export -fотносится к оболочке bash.

Если скрипт не имеет -челки, он будет интерпретирован оболочкой, подобной POSIX -, которая может не быть bash. Если вы намерены использоватьbash-определенные функции в своем скрипте, вы должны убедиться, что он имеет:

#! /path/to/bash -

она -удар или что вы вызываете его как bash path/to/the/script. Кроме того, использование расширений .shдля скриптов, написанных на языке bash, немного вводит в заблуждение.

Теперь bashявляется одной из тех немногих оболочек, которые способны экспортировать функции в среду (по сути, используя специальные переменные среды, понятные только командам bash). Это можно сделать с помощью специальной команды export -fbash -. bashтакже экспортирует все функции, объявленные при включенной опции allexport.

Но в любом случае ни то, ни другое не сработает в вашем случае. exportпередача чего-либо из одной оболочки, будь то переменная или функция, заключается в том, чтобы эта переменная/функция была доступна в других оболочках, выполняемых этой оболочкой(экспорт заключается в сохранении вещей при выполнении)].

Таким образом, даже если myfile1.shили myfile2.shэкспортируют функции, которые они объявили (с помощью export -fили имея set -o allexportперед объявлением переменной ), это повлияет только на те оболочки, которые оболочка интерпретация этих сценариев будет выполняться. Здесь myfile2.shне выполняет myfile3.sh, все наоборот.

Здесь вам понадобится ваш myfile3.shскрипт для выполнения:

source path/to/myfile2.sh

, чтобы одна и та же оболочка интерпретировала код во всех сценариях myfile1.sh, myfile2.shи myfile3.sh, и тогда вам не нужно было бы экспортировать какую-либо функцию.

Обратите внимание, что в системах, где shравно bash, вероятно, не стоит экспортировать функции, так как это влияет на все сценарии sh и bash и командные строки оболочки, которые ваш сценарий выполняет (рекурсивно ). Например,если бы ты сделал:

set -o allexport
uname() { echo Gotcha; }
somecmd

И somecmdвыполнял popen("uname", "r")для получения имени unix, он получал Gotchaв системах, где sh— это bashвместо реального имени системы (Darwin, Linux... ).

3
28.01.2020, 02:22

Теги

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