Вообще говоря, если вы хотите запустить несколько команд в одной задаче cron, вам действительно следует поместить их в сценарий.
Вы не должны заключать подобное выражение в двойные кавычки. Скорее всего, это будет восприниматься буквально. Если вы действительно намерены запускать их встроенными, вы можете сделать что-то вроде следующего: bash -c 'whoami && which whoami'
Но опять же, на этом этапе вы действительно должны помещать свои команды в сценарий оболочки. .
Вы должны сохранить результат обратной кавычки в переменной скрипта и использовать его в вызове perl, например
REPL = `cat ~/foo/bar/file.txt`
perl -pe "s/loremipsum/$REPL/ge" -i ~/path/to/target.txt
Но я думаю, было бы лучше использовать сценарий perl только для замены строки содержимым файла, потому что содержимое foo / bar / file.txt может повредить вашу команду.
Попробуйте вместо этого:
#!/bin/bash
perl -pe "s/loremipsum/`cat ~/foo/bar/file.txt`/ge" -i ~/path/to/target.txt
Похоже, у вас проблемы с одиночными цитатами.
Проблема устранена путем замены ~
на путь к вашему домашнему каталогу.
Или вы можете использовать
perl -pe '$thing=`cat "$ENV{HOME}/file.txt"`;s/loremipsum/$thing/g' target.txt
или другую, более удобную , конструкцию, которая сначала считывает содержимое вашего файла, а затем заменяет строку этим значением.
sed
— еще один инструмент для этого, и у него даже есть специальная команда для чтения в другом файле:
sed '/loremipsum/{
r file.txt
d
}' target.txt
Это заменяет строку , содержащую текст loremipsum
, содержимым file.txt
.
Учитывая файл target.txt
,
some text
some text loremipsum
some more text
и файл file.txt
,
This text
is inserted
команда выдаст
some text
This text
is inserted
some more text