我想执行这个 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,无需先设置权限:

     bash <filename>
    

    要查看每行执行,请使用-x

     bash -x <filename>
    

相关内容