Я анализировал файл скрипта и наткнулся на строку ниже
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh
Я все еще не могу понять, что делает эта команда. Я знаю, -i
что это означает встроенную операцию. Но что она делает, мне все еще неизвестно. Пожалуйста, помогите мне понять эту строку.
решение1
sed -i
-i
говорит о необходимости редактировать файл на месте, то есть записать новую версию поверх того же имени
/JBOSS_HOME\/bin\/run.sh/
Шаблон, разделенный косыми чертами, косые черты, содержащиеся в шаблоне, заключены в обратные косые черты, поэтому он соответствует любой строке, содержащей JBOSS_HOME/bin/run.sh
. (На самом деле, поскольку это регулярное выражение, точка соответствует любому символу.)
i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '
Команда, которая запускается при совпадении шаблона, i
предназначена для вставки строки (перед текущей). Добавляемая строка отделяется обратной косой чертой, поэтому добавляется строка export TMP_FOLDER=$JBOSS_HOME/server/default/tmp
.
/home/jboss/runJBOSSEAP.sh
Имя целевого файла.
например
$ echo JBOSS_HOME/bin/run.sh > pla
$ sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' pla
$ cat pla
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp
JBOSS_HOME/bin/run.sh
Это почти то же самое, что и в примерездесь
решение2
Ответ ilkkachu отличный и обширный, голосование за него дано. Вот просто примечание, если вы используете BSD sed (как в OS X). Это:
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
sed: 1: "foo": invalid command code f
Не работает. Для того, чтобы это работало с BSD sed, вам сначала нужно исправить -i
опцию следующим образом: sed -i.""
. Кроме того, вам нужно разместить вставку на отдельной строке, например:
sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
Но, опять же, это касается только BSD sed, как он есть в OS X. Не относится к GNU sed.