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>