명령 결과가 비어 있으면 대체 명령을 실행합니다(명령의 한 줄에서).

명령 결과가 비어 있으면 대체 명령을 실행합니다(명령의 한 줄에서).

호스트 파일에 특정 IP를 추가하려고 합니다. 이 IP는 두 가지 다른 명령을 사용하여 검색할 수 있지만 최상의 명령이 항상 이를 반환하는 것은 아닙니다.

첫 번째 명령을 확인하고 IP가 반환되면 해당 줄을 파일에 추가하고, 그렇지 않으면 두 번째 명령을 사용하는 명령을 작성하려고 합니다.

우선순위 명령:

docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'

대체 명령:

ifconfig docker | grep -oP 'inet:\K[^ ]+'

나는다른 것이라면명령은 -eq ''또는를 사용 -ne 0하지만 이를 매개변수로 사용하여 호스트 파일에 행을 추가하려고 하면 작동하지 않습니다.

다음과 같을 수 있습니다(그러나 쉘 명령의 한 줄에 있음).

if [ docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+' -ne 0 ] ;
  then sudo echo $(docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+') "symfony.dev" >> /etc/hosts;
  else sudo echo $(ifconfig docker0 | awk '/inet:/{ print substr($2,6); exit }') "symfony.dev" >> /etc/hosts;
fi

답변1

if다른 명령과 마찬가지로 명령문으로 수집된 출력은 리디렉션되거나 파이프될 수 있습니다.

if ! docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'; then
    ifconfig docker | grep -oP 'inet:\K[^ ]+'
fi | sudo tee -a /etc/hosts > /dev/null

루트 권한이 필요한 유일한 부분은 /etc/hosts쓰기를 위해 여는 것이므로 출력 리디렉션을 sudo tee.

관련 정보