스크립트 파일을 분석하다가 다음 줄을 발견했습니다.
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에서는 작동하지 않습니다.