스크립트 파일을 분석하다가 아래 줄을 발견했습니다.
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
그러나 이는 OS X에서 볼 수 있는 BSD sed를 사용하는 경우에만 해당됩니다. GNU sed에는 적용되지 않습니다.