У меня есть функция с именем directory_chooser
, и она содержит код для обновления переменной serial
в ней несколько раз. Теперь это обычно работает нормально, но теперь я передаю всю эту функцию в column
, и значение, обновленное функцией directory_chooser
, не сохраняется.
Вот строка кода, где возникает проблема :
directory_chooser $1 | column -t -s $'\t'
Если я не перенесу функцию на column
, код работает отлично. Однако передача в столбец приводит к тому, что значение serial
, обновленное directory_chooser
, не сохраняется. Я полагаю, это потому, что все конвейерные команды выполняются в подоболочке?
Поскольку мне нужно использовать значение serial
позже в сценарии, для меня важно, чтобы значение serial сохраняется после того, как функция directory_chooser
увеличивает его.
Какой может быть обходной путь для этого? Если вы хотите посмотреть весь код, вы можете посмотреть его здесь . Я не смог найти никакого решения, которое бы подходило к моей ситуации. Придется ли мне переписывать весь сценарий?
Первоначально я пытался записать весь вывод directory_chooser
в файл, а затем перенаправить весь файл в column
, чтобы добиться того же самого, и все работало хорошо, но я хочу более элегантное решение. Кроме того, запись в файл при каждом запуске скрипта приводит к тому, что он становится намного медленнее, чем если бы я мог просто перенаправить всю функцию в column
.
Вот рабочая версия скрипта где я писал в файл. Вы также можете прочитать другое, более короткое объяснение проблемы здесь .