从另一个目录运行脚本

Des*_*ume 4 command-line scripts

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

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

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

. /path/to/script
Run Code Online (Sandbox Code Playgroud)

或者

sh /path/to/script
Run Code Online (Sandbox Code Playgroud)

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

sudo . /path/to/script
Run Code Online (Sandbox Code Playgroud)

Yam*_*eko 6

您可以仅使用整个路径调用脚本,而无需使用点.

/path/to/script
Run Code Online (Sandbox Code Playgroud)

sudo 也工作正常:

sudo /path/to/script
Run Code Online (Sandbox Code Playgroud)

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

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

#!/bin/bash
ls
Run Code Online (Sandbox Code Playgroud)

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

test@ubuntu:~:/tmp/test.sh
Desktop     Dropbox         Imagens  NetBeansProjects     Público     
Documentos  Modelos    R          Vídeos
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
current=$(dirname $0)
ls $current
Run Code Online (Sandbox Code Playgroud)

从您的主文件夹运行它,它提供:

test@ubuntu:~:/tmp/test.sh
acroread_1000_1000     hiRF7yLSOD              pulse-2L9K88eMlGn7   
unity_support_test.0    clementine-art-jt5332.jpg
Run Code Online (Sandbox Code Playgroud)

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