Ich habe die Skriptdatei analysiert und bin auf die folgende Zeile gestoßen
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh
Ich kann immer noch nicht herausfinden, was dieser Befehl macht. Ich weiß, -i
dass es sich um eine Inline-Operation handelt. Aber was er macht, ist mir immer noch unbekannt. Bitte helfen Sie mir, diese Zeile zu verstehen.
Antwort1
sed -i
-i
sagt, die Datei direkt zu bearbeiten, d.h. die neue Version über den gleichen Namen zu schreiben
/JBOSS_HOME\/bin\/run.sh/
Ein durch Schrägstriche getrenntes Muster. Die im Muster enthaltenen Schrägstriche werden mit Backslashes in Anführungszeichen gesetzt, sodass dies auf jede Zeile zutrifft, die enthält JBOSS_HOME/bin/run.sh
. (Da es sich um einen regulären Ausdruck handelt, entspricht der Punkt tatsächlich jedem Zeichen.)
i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '
Der Befehl, der ausgeführt werden soll, wenn das Muster übereinstimmt, i
dient zum Einfügen einer Zeile (vor der aktuellen). Die hinzuzufügende Zeile wird durch den Backslash getrennt, daher wird die Zeichenfolge hinzugefügt export TMP_FOLDER=$JBOSS_HOME/server/default/tmp
.
/home/jboss/runJBOSSEAP.sh
Zieldateiname.
z.B
$ 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
Es ist so ziemlich das gleiche wie zB das BeispielHier
Antwort2
Die Antwort von ilkkachus ist großartig und ausführlich, dafür gibt es ein Upvote. Hier ist nur eine Randbemerkung, falls Sie BSD sed (wie in OS X) verwenden. Dies:
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
sed: 1: "foo": invalid command code f
Funktioniert nicht. Damit es mit BSD sed funktioniert, müssen Sie zuerst die -i
Option wie folgt korrigieren: sed -i.""
. Außerdem müssen Sie Ihren Einschub in einer separaten Zeile platzieren, wie folgt:
sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
Aber noch einmal: Dies gilt nur, wenn Sie BSD sed verwenden, wie es unter OS X zu finden ist. Gilt nicht für GNU sed.