Как определить и использовать глобальные имена файлов в скрипте bash

Как определить и использовать глобальные имена файлов в скрипте bash

EDIT: Изменено требование к динамически вычисляемым именам переменных, поскольку в моем случае это не так уж и необходимо, и было предоставлено решение, которое мне подходит.

Это, вероятно, невозможно сделать, но вот что получится:

У меня есть скрипт bash, который выполняет некоторое форматирование и преобразование типов файлов для входного файла, который является ASCII xyz (широта, долгота, глубина) тройками, и создает различные типы выходных файлов. Я пытаюсь избежать необходимости возиться с именами выходных файлов каждый раз, когда я пишу скрипт, подобный этому; я полагаю, я пытаюсь найти способ вычислить имена выходных файловглобальнов моей системе задано любое имя входного файла, либо путем exportдобавления суффиксов к имени выходного файла в bashrc, либо в каком-либо другом файле, который используется в моих скриптах.

Так, например, в типичном скрипте я бы создавал выходные имена файлов динамически из входного файла, указанного в командной строке:


INPUT=$1

INPUT_SUFFIX=`echo $INPUT | cut -d. -f2`
INPUT_BASE=$(basename $INPUT .$INPUT_SUFFIX)
OUTPUT_TEXT="${INPUT_BASE}txt"
OUTPUT_TIFF="${INPUT_BASE}tif"
OUTPUT_GRID="${INPUT_BASE}grd"

#...etc, plus other output formats

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

Так что влюбойскрипт, который я пишу, для любого значения $1переменной, $OUTPUT_TIFFнапримеружебыть динамически рассчитано на основе входных данных и будет иметь значение "${1}.tif".

решение1

Простой способСУХОЙэто записать общий код в обычный файл и использовать файл каждый раз, когда он вам нужен. В Bashвы даже можете передавать аргументы. Это происходит «по требованию», а не «динамически вычисляется»; то есть, если $1по какой-либо причине что-то изменится, вам придется снова обратиться к источнику, чтобы обновить переменные.

Связанный контент