По умолчанию правая часть подстановки (s///
) работает как строка в двойных кавычках. "`cat whatever`"
не делает ничего особенного в строке; он не запускает никаких команд.
Вам необходимо использовать флаг /e
:
s/%FIREBASE_ENV%/`cat testEnvConfig`/eg
Это говорит Perl, что правая часть должна быть оценена как блок кода, а не как строка.
В качестве альтернативы вы можете избежать вывода на cat
, читая файл в Perl:
perl -pi -e 'BEGIN { my $file = "testEnvConfig"; open my $fh, "<", $file or die "$file: $!\n"; local $/; $config = readline $fh } s/%FIREBASE_ENV%/$config/g'
Это также позволяет избежать повторного чтения файла для каждого вхождения %FIREBASE_ENV%
.