Eu estava analisando o arquivo de script e me deparei com a linha abaixo
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh
Ainda não consigo descobrir o que esse comando faz. Eu sei -i
que significa que é uma operação inline. Mas o que isso faz ainda é desconhecido para mim. Por favor me ajude a entender esta linha.
Responder1
sed -i
-i
diz para editar o arquivo no local, ou seja, escrever a nova versão com o mesmo nome
/JBOSS_HOME\/bin\/run.sh/
Um padrão, separado por barras, as barras contidas no padrão são citadas com barras invertidas, portanto, corresponde a qualquer linha que contenha JBOSS_HOME/bin/run.sh
. (Na verdade, como é uma regex, o ponto corresponde a qualquer caractere.)
i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '
Comando a ser executado quando o padrão corresponder, i
serve para inserir uma linha (antes da atual). A linha a ser adicionada é separada pela barra invertida, então isso adiciona a string export TMP_FOLDER=$JBOSS_HOME/server/default/tmp
.
/home/jboss/runJBOSSEAP.sh
Nome do arquivo de destino.
por exemplo
$ 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
É praticamente o mesmo que, por exemplo, o exemploaqui
Responder2
A resposta de ilkkachu é ótima e extensa, com voto positivo dado. Aqui está apenas uma observação se você estiver usando o BSD sed (como no OS X). Esse:
sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
sed: 1: "foo": invalid command code f
Não funciona. Para que funcione com BSD sed você primeiro precisa corrigir a -i
opção assim: sed -i.""
. Além disso, você precisa colocar sua inserção em uma linha separada, assim:
sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo
Mas, novamente, isso é apenas se você estiver usando o BSD sed conforme encontrado no OS X. Não se aplica ao GNU sed.