很多时候,我想要执行的脚本不在我当前的工作目录中,而且我也不想离开它。
从另一个目录运行脚本(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 来说,情况有点不同,因为你将要必须定义脚本文件的完整路径。