Могу ли я определить псевдонимы (используя `export`), которые находятся в моем текущем каталоге? Это дает сообщение «не найдено»

Самый простой способ — сначала удалить все экземпляры XYZ12-и заменить первый -на-XYZ12-:

$ echo 20170223_LibError.log-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz | sed -E 's,XYZ12-,,g' | sed 's,-,-XYZ12-,'
20170223_LibError.log-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz

РЕДАКТИРОВАТЬ:Если вы не знаете XYZ12заранее, вы можете извлечь его, используя cut. Например, создайте do.shтакой скрипт:

#!/usr/bin/env sh

pattern=$(echo "$1" | cut -d- -f2)

echo "$1" | sed -E "s,$pattern-,,g" | sed "s,-,-$pattern-,"

Использование:

$./do.sh  20170223_LibError.log-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz
20170223_LibError.log-XYZ12-SAE066.log_compressed_at_2017-09-27_03-32-55.gz

И с другим узором:

$./do.sh  20170223_LibError.log-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-NMNM-SAE066.log_compressed_at_2017-09-27_03-32-55.gz
20170223_LibError.log-NMNM-SAE066.log_compressed_at_2017-09-27_03-32-55.gz
0
18.10.2019, 15:15
1 ответ

Я ничего не упоминаю, даже экспортную директиву .

FREESURFER_HOME=freesurfer

В других языках это было бы просто $FREESURFER_HOME = "freesurfer", присвоение строки. В bash вы решаете при каждом использовании, имеете ли вы в виду строку или значение переменной

$  echo FREESURFER_HOME
FREESURFER_HOME

$  echo $FREESURFER_HOME
freesurfer

Знак доллара — это способ сообщить bash, что вы имеете в виду значение/содержимое этого имени.

После установки переменной вы можете использовать ее (со знаком доллара)

source $FREESURFER_HOME/SetUpFreeSurfer.sh— это то, для чего вам нужна эта переменная. Вы хотите запустить/использовать определенный скрипт в модифицированном домашнем каталоге fs -. Для одного вызова это точно так же, как source freesurfer/SetUpFreeSurfer.sh, если "freesurfer" является содержимым.

Если вы наберете $FREESURFER_HOMEв качестве команды, (первое слово будет командой! ), оно расширяется до своего значения "freesurf" (или любого другого значения ), и это не существующая команда (-> не найдена ).

В других ситуациях с допустимыми командами в переменных случались плохие вещи.

$  cmd='echo hello'
$  $cmd
hello

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

$  alias cmd='echo hello'
$  cmd
hello

(Здесь нет $знака --намного лучше!)


(Экспорт может потребоваться для распространения переменной. Нисколько не меняет этих фактов. Положил его обратно!)

0
28.01.2020, 03:11

Теги

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