使 Bash 脚本在 Ubuntu 20.04 LTS 服务器的任何地方都可执行

使 Bash 脚本在 Ubuntu 20.04 LTS 服务器的任何地方都可执行

我遇到了很多麻烦,无法让我的脚本(具有讽刺意味的是,它被称为“script.sh”)在任何地方运行。我遵循了互联网上的许多指南和视频,但无法让它运行。我尝试在脚本位于 /usr/bin 时执行 chmod u+x script.sh,但无论哪种方式都行不通。

它一直说“scrips.sh 不是可执行文件”。

脚本如下:

    #!/usr/bin

# Command Options
headname=unlac.net
commandenabled=true
commandname=main
version=0.0.1
author=a-human
servername=ulctesting
server=ulc-testing
guideref=none


if [ $commandenabled = false ]; then
        echo "\e[4m\e[1mErr: ULC-001, Command Disabled.\e[0m"
else
if [ $1 = help ]; then
         echo "\e[2m=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=[$headname]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\e[0m"
         echo "\e[7mㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ ㅤㅤㅤ ㅤHelp System * ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ\e[0m"
         echo "Coming Soon"
else
if [ $1 = ver ]; then
        echo "\e[2m=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=[$headname]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\e[0m"
        echo "\e[7mㅤㅤㅤㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤSystem Versionㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ\e[0m"
        echo "Coming Soon"

if [ $1 = guide ]; then
        echo "\e[2m=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=[$headname]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\e[0m"
        echo "\e[7mㅤㅤㅤㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤSystem Guides ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ\e[0m"
        echo "Welcome to the system guides for $headname. Please refer to the online guides"
        echo "which are listed on the given manual document for the system found on the"
        echo "provided url: \e[4mhttps://unlac.net/guide/manual/ \e[0m Please note that"
        echo "we try our very best to update this and add sections per server and system."
        echo "\e[1mGuide Ref:\e[0m\e[2m $guideref\e[0m\e[1m Server Name\e[0m\e[2m $server\e[0m"
else
        echo "\e[2m=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=[$headname]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\e[0m"
        echo "\e[7mㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤWelcome, $USERㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ\e[0m"
        echo "\e[1mULC Version:\e[0m \e[2m$version | \e[1mAuthor:\e[0m \e[2m$author"
        echo " ______ "
        echo "| |__| |   \e[1m(C) $author, all rights reserved.\e[0m"
        echo "|  ()  |   \e[1mFor the use of $headname only, please read the\e[0m"
        echo "|______|   \e[1mulc-net system guide for more information.\e[0m\n"
        echo "\e[7mㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤChange Logsㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ\e[0m"
        echo "\e[100m05/04/2022 by root,\e[0m\e[1m Welcome to the ULC Systems!\e[0m"
        echo "Cheese"
fi
fi
fi
fi

我赋予了它能够被禁用的功能等等。无论如何,每当我运行脚本(例如 sh script.sh)时,它都能工作,但是当我尝试让它在 Ubuntu 的任何地方运行时,它却无法运行。

答案1

尝试将第 1 行从 更改#!/usr/bin#!/usr/bin/env bash

第一行告诉 shell 使用哪个程序来运行文件。现在它告诉 shell 使用目录/usr/bin

由于/usr/bin不是一个有效的解释器,您会收到此错误。

script.sh: /usr/bin: bad interpreter: Permission denied

请注意,Permission denied错误消息与/usr/bin您的脚本无关。

之所以sh script.sh有效是因为您将脚本作为参数提供给了有效的解释器。

为了避免此类问题,我建议shellcheck定期安装并针对脚本运行它。它让我避免了很多愚蠢的错误。

相关内容