2017-07-28 100 views
-1

我尝试了多种场景,但这些事情更令人头疼。我试着写这个bash也是一样的,但需要在我需要执行的同一个文件中进行更改。有人可以帮助我。Linux - 如何从另一个文件夹访问/执行文件,而不是更改文件夹

#!/bin/bash -p 
if [ $# -lt 1 ]; then 
    echo "No arguments provided" 
    exit 0 
fi 
CURRENT_DIR=`pwd` 
EXEC_DIR=`dirname "$1"` 
FILENAME="`basename $1`" 
cd $EXEC_DIR 
CMD="./$FILENAME ${@:2}" 
$CMD 
cd $CURRENT_DIR 

我需要一些两个班轮与我需要执行的同一个文件一起工作。

+1

使用*子shell *来改变目录并执行程序?就像'(cd $ EXEC_DIR; ./$FILENAME $ {@:2})''?这将导致子shell在新目录中执行程序,但脚本仍然会继续而不会更改目录。 –

+0

另外,您能否详细说明您显示的脚本存在的问题?它出什么问题了? –

+0

不清楚,为什么不简单地使用'“$ 1”$ {@:2}'来执行文件,这可能是因为绝对路径与文件名一起传递。如果你不想永久改变为'EXEC_DIR',你总是可以使用'pushd'和'popd'(与你使用'cd'相同的方式,但是不需要返回目录需要指定。 –

回答

0

如果你的脚本存在于/ opt /而你在/ opt/dir /那么你可以从那里运行脚本 - > ../script.sh它将运行前一个文件夹中的脚本和当前文件夹

0

最简单的方法是使用文件/脚本的完整路径要执行在运行它:

/path/to/file/example.bash 

你会留在你的当前目录,但你的脚本example.bash会执行。

+0

在回答之前想想..我知道直接给出一个路径可以从任何文件夹执行脚本。但是如果在(。)内有另一个本地文件的引用,那么这个问题将如何解决。我还有其他一些本地依赖加入通过'。'当前目录解析的脚本。 我也得到了答案。我需要改变脚本本身而不是写一个新脚本。 EXEC_DIR ='dirname“$ 0”' cd $ EXEC_DIR –

相关问题