Да, конвейерная передача вывода source
запустит эту часть конвейера в подоболочке, что означает, что любые переменные среды, установленные источником другого файла, не повлияют на среду скрипта.
Пример:
environment.csh
:
setenv string "hello world"
echo 'The environment is now set up'
script.csh
:
#!/bin/csh
source environment.csh | tee output
printf 'string is "%s"\n' "$string"
Результат работы script.csh
будет
The environment is now set up
string: Undefined variable.
Удаление трубы к tee
приведет к выходу
The environment is now set up
string is "hello world"
Подход KISS:
sed -e 's|cds.|ID=|g' -e 's|p1;|p1.cds;|g' file
Это использует sed для замены cds.
на ID=
, а затем заменяет p1;
на p1.cds;
.
Выход:
ID=STRG.1.1.p1.cds;Parent=STRG.1.1.p1
Если это делает то, что вы хотите, и исходит из файла, который вы хотите изменить, вы можете отредактировать его на месте с помощью
sed -i -e 's|cds.|ID=|g' -e 's|p1;|p1.cds;|g' string