이 bash 스크립트를 실행하고 싶지만 실패했습니다.

이 bash 스크립트를 실행하고 싶지만 실패했습니다.

ufw이 스크립트는 컨테이너 이름을 다시 입력할 필요 없이 컨테이너 이름을 사용하여 새 규칙을 추가하는 데 사용됩니다 . grep컨테이너 이름을 가져오는 데 사용됩니다 .

Bash 스크립트는 다음과 같습니다.

#!/bin/bash
echo -e "\e[92m[Docker-compose] Deleting old ufw rules...\e[0m"
sudo ufw-docker delete allow ${grep container_name: ./docker-compose.yml | awk '{print $2}'}
echo -e "\e[92m[Docker-compose] Successfully deleting old ufw rules.\e[0m"
sleep 3
echo -e "\e[92m[Docker-compose] Adding new ufw rules...\e[0m"
sudo ufw-docker allow ${grep container_name: ./docker-compose.yml | awk '{print $2}'}
echo -e "\e[92m[Docker-compose] Successfully adding new ufw rules.\e[0m"

이 bash 스크립트를 실행하는 올바른 방법은 무엇입니까?

답변1

이 스크립트는 어디서 구하셨나요? 왜 노력하는 것 같지?명령 대체with 대신 ${ ... }(이것은 bash에서 "잘못된 대체" 오류를 발생시킵니다) $( ... )다음을 시도해 보세요.

$(grep container_name: ./docker-compose.yml | awk '{print $2}')

grep또한 사용할 때 필요하지 않습니다 awk(awk는 자체 정규식 일치를 수행할 수 있음). 다음과 같이 작성하는 것이 좋습니다.

$(awk '/container_name:/ { print $2 }' ./docker-compose.yml)

답변2

스크립트를 실행하려면 다음 중 하나를 수행하십시오.

  • 파일의 실행 권한을 설정합니다.

    chmod 755 <filename>
    

    그런 다음 실행

    ./<filename>
    
  • bash먼저 권한을 설정하지 않고 as 인수로 호출하세요 .

     bash <filename>
    

    실행된 각 줄을 보려면 다음을 사용하세요.-x

     bash -x <filename>
    

관련 정보