명령 문자열을 bash 변수에 저장

명령 문자열을 bash 변수에 저장

$OUTPUT저는 명령의 결과를 저장하는 변수를 사용하여 이와 같은 명령을 실행하고 있습니다 . 그러나 명령 자체를 변수에 저장하여 상태 이메일에 포함시키고 싶습니다.

OUTPUT=$(php -f $LOCATION/somefile.php -- -process "$INPUTFILE" 2>&1)

첫 번째 부분이 작동합니다. 그런 다음 이것을 시도했습니다.

IMPORTCOMMAND='php -f' "$LOCATION"'/somefile.php -- -process'"$INPUTFILE"

그러나 문자열을 변수에 저장하는 대신 명령을 두 번째로 실행하는 것 같습니다.

편집하다:

다음은 이메일 본문을 만드는 방법에 대한 모델입니다. 일반 문자열 주위에 작은따옴표를 넣은 다음 bash 변수 주위에 큰따옴표를 붙였습니다.

BODY='<b color="red">Output:</b><br />'"$OUTPUT"'<b color="red">Command:</b> '"$IMPORTCOMMAND"


그런 다음 개행 문자를 다음과 같이 html " "로 바꾸려고 합니다 .

BODY="${BODY//$'\n'/<br />}"
#changed $BODY="" to BODY="" per yaegashi's suggestion

yaegashi의 조언을 따랐더니 다음 오류가 사라졌습니다.

/usr/local/bin/some-script.sh: line 59: <b: command not found

IMPORTCOMMAND그러나 변수 할당 시 원래 오류가 여전히 존재합니다 .

답변1

너무 많이 인용하고 위치가 잘못된 것 같습니다.

somefile.php다음은 와 사이에 공백이 있기 때문에 IMPORTCOMMAND를 설정하지 않고 실행을 시도합니다.php -fsomefile.php.

IMPORTCOMMAND='php -f' "$LOCATION"'/somefile.php -- -process'"$INPUTFILE"

해야 한다:

import_command="php -f $LOCATION/somefile.php -- -process $INPUTFILE"
output=$( ${import_command} 2>&1 )

또는("LOCATION" 또는 "INPUTFILE"에 공백이 포함된 경우)

import_command=( php -f "$LOCATION/somefile.php" -- -process "$INPUTFILE" )
output=$( "${import_command[@]}" 2>&1 )

그리고 그것을 표시하십시오 :

BODY="<b color='red'>Output:</b><br />${output}
      <b color='red'>Command:</b>     ${import_command[*]}"

관련 정보