从另一个目录运行脚本

从另一个目录运行脚本

很多时候,我想要执行的脚本不在我当前的工作目录中,而且我也不想离开它。

从另一个目录运行脚本(BASH、Perl 等)是一种好习惯吗?它们通常会找到正确运行所需的所有内容吗?

如果是这样,运行“远程”脚本的最佳方法是什么?

. /path/to/script

或者

sh /path/to/script

在这种情况下如何使用sudo?例如,这个不起作用:

sudo . /path/to/script

答案1

您可以仅使用完整路径(不带点)来调用脚本.

/path/to/script

sudo也工作正常:

sudo /path/to/script

他们通常能找到正常运行所需的所有东西吗?

您的意思是“我的脚本会找到位于同一文件夹中的文件吗?”这取决于您的代码。例如,如果您有以下脚本/tmp/test.sh

#!/bin/bash
ls

如果您从主文件夹调用它,它将ls在您的主文件夹中运行:

test@ubuntu:~:/tmp/test.sh
Desktop     Dropbox         Imagens  NetBeansProjects     Público     
Documentos  Modelos    R          Vídeos

在这种情况下,dirname你的盟友是:

#!/bin/bash
current=$(dirname $0)
ls $current

从你的主文件夹运行它,它会给出:

test@ubuntu:~:/tmp/test.sh
acroread_1000_1000     hiRF7yLSOD              pulse-2L9K88eMlGn7   
unity_support_test.0    clementine-art-jt5332.jpg

这是我的文件夹的内容/tmp/

答案2

*nix 中常见的用户脚本做法是将它们放在 bin 目录中。这样,当您从命令行输入名称时,系统将默认搜索该脚本。

您的 bin(二进制)目录应位于您的主文件夹中,因此完整路径应为/home/yourusername/bin。(显然应更改yourusername为您的登录名。)

ls -lh如果从终端运行,bin 目录应该具有以下权限:drwxr-xr-x

默认情况下,当您使用终端创建目录时,您会设置以下权限:drwxrwxr-x

您唯一需要更改的是组权限,但我将引导您完成终端的每个步骤(假设您还没有 bin):

  • 打开终端([Ctrl] + [Alt] + t)

  • 创建二进制目录:mkdir bin

  • 现在使用 GUI 或 CLI 将脚本复制到/bin

  • 现在我们必须更改一些权限,以便一切都正确设置:

  • chmod -R 755 箱

  • 这将设置所有者(您)的读取、写入和执行权限,以及组和其他人读取和执行脚本的权限。-R 表示递归或设置目录中所有文件的权限。

有关文件权限的更多帮助,请参阅文档

现在,您只需键入myscript即可执行脚本 - 您不必在目录中。您不需要 . / 或任何东西!

对于 sudo 来说,情况有点不同,因为你将要必须定义脚本文件的完整路径。

相关内容