Estaba analizando el archivo de script y encontré la siguiente línea
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh
Todavía no puedo entender qué hace este comando. Lo sé -i
significa que es una operación en línea. Pero aún no conozco lo que hace. Por favor ayúdame a entender esta línea.
Respuesta1
sed -i
-i
dice editar el archivo en el lugar, es decir, escribir la nueva versión con el mismo nombre
/JBOSS_HOME\/bin\/run.sh/
Un patrón, separado por barras, las barras contenidas en el patrón están entrecomilladas con barras invertidas, por lo que coincide con cualquier línea que contenga JBOSS_HOME/bin/run.sh
. (En realidad, como es una expresión regular, el punto coincide con cualquier carácter).
i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '
El comando a ejecutar cuando el patrón coincide, i
es para insertar una línea (antes de la actual). La línea que se agregará está separada por una barra invertida, por lo que esto agrega la cadena export TMP_FOLDER=$JBOSS_HOME/server/default/tmp
.
/home/jboss/runJBOSSEAP.sh
Nombre del archivo de destino.
p.ej
$ 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 más o menos lo mismo que, por ejemplo, el ejemplo.aquí
Respuesta2
La respuesta de ilkkachu es excelente y extensa, se ha votado a favor. Aquí hay solo una nota al margen si está utilizando BSD sed (como en OS X). Este:
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
sed: 1: "foo": invalid command code f
No funciona. Para que funcione con BSD sed, primero debes arreglar la -i
opción como esta: sed -i.""
. Además, debe tener su inserción en una línea separada, como esta:
sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
Pero, nuevamente, esto es solo si está utilizando BSD sed como se encuentra en OS X. No se aplica a GNU sed.