eval 문과 함께 sed를 사용해 보시겠습니까? [복사]

eval 문과 함께 sed를 사용해 보시겠습니까? [복사]

eval 문과 함께 sed를 사용해 보시겠습니까?

#!/bin/bash
declare COMMAND="sudo sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config"
theResponse=$(${COMMAND} 2>&1)
echo "${theResponse}"

위 스크립트에서 다음 오류가 발생하는 이유를 알 수 없는 것 같습니다.

sed: -e 표현식 #1, 문자 1: 알 수 없는 명령: ""

sed 명령은 셸을 통해 제대로 작동합니다.

답변1

변수는 명령을 저장하는 데 적합하지 않습니다. 이를 위해 기능을 사용하십시오(필요한 경우). 스크립트를 좀 더 관용적으로 작성하는 방법은 다음과 같습니다.

#!/bin/bash
fixSshd() {
    sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
}

fixSshd

루트 사용자가 스크립트를 실행하는 경우 제거하십시오 sudo.

명령의 오류 출력을 캡처하려면 마지막을 다음으로 바꾸십시오.

response=$(fixSshd 2>&1)
echo "Response is: $response"

관련 정보