この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>
    

関連情報