脚本的非 sudo 位置

脚本的非 sudo 位置

我正在尝试将一个简单的批处理脚本转换为包。根据我对打包的(有限的)理解,这意味着我将把脚本存储在 中/usr/bin

问题是,批处理脚本使用了存储在其他地方的另一个 sh 脚本。sh 脚本无法作为 运行sudo,并且 sh 脚本需要读取/写入 sh 脚本目录中的文件。这意味着我需要有一个位置来存储此脚本(及其使用的文件),而不需要sudo。这可能吗?

(顺便说一句,由于该脚本还会将文件下载到用户主目录(~),我无法让某人运行该脚本,sudo因为文件所有权随后会被错误地处理下载的文件。除非这可以修复。)

答案1

手动执行

您可以使用 执行该命令bash /path/to/your.sh。如果您将文件设置为可执行文件 ( chmod +x /path/to/your.sh),那么您可以执行/path/to/your.sh该命令,它将自动在 bash 下运行。您需要确保您的脚本具有舍邦

$PATH

概述


$PATH是一个环境变量,列出了运行命令时想要搜索二进制文件的所有位置。

这就是/usr/bin二进制文件的使用方法。

您可以通过打开终端并运行来查看当前的 $PATH echo $PATH

/most/important/path:/less/important/path

如上例所示,路径具有优先级;第一个路径优先搜索。这意味着如果二进制文件有两个版本,则将使用第一个路径中的版本。一旦找到二进制文件,它将停止在 $PATH 中的其他目录中搜索。

如果您尝试运行banana,您的计算机将查找/most/important/path。如果找到banana,它将运行它。如果没有找到 ,它将继续搜索,并转到/less/important/path

修改


要将目录添加到用户路径中,您可以将其添加到文件中~/.bashrc。您应该将路径追加到其中,而不是覆盖并弄乱路径。例如:

export $PATH=${PATH}:/new/less/important/directory

或者您可以将其设置为最高优先级目录:

export $PATH=/new/more/important/path:${PATH}

为了防止出现问题,您可能只应附加(第一个例子)。

相关内容