当脚本本身位于不同的目录中时,如何从我调用脚本的位置获取目录?

时间:2016-08-01 18:27:47

标签: bash

我正在制作一些自定义命令在我的debian服务器上使用,我将它们放在/ usr / bin文件夹中。

我想做的一个自定义命令涉及从我调用脚本的位置获取目录,而不是脚本所在的目录。

我在这里找到的几乎所有问题都涉及使用

获取工作目录
a=$PWD

a=$(pwd)

这只返回脚本所在的目录。

编辑:我知道

$OLDPWD

以上只会在某些时候有用。

有可能做我想做的事吗?

我的剧本的当前形式:

#!/bin/bash
if [ -z "$1" ]
then
    a=$(pwd)
    echo "Unlocking current directory."
    sudo chmod 777 -R $a
else
    echo "Unlocking directory at \"$1\""
    sudo chmod 777 -R $1
fi

1 个答案:

答案 0 :(得分:1)

  

我想做的一个自定义命令涉及从中获取目录   在哪里我调用脚本,

试试这个

#!/bin/bash
pwd

与您提到的内容相反pwd应该为您提供脚本调用的位置

示例运行

user@host:~/Documents/so$ ./myscript.sh
/home/me/Documents/so
user@host:~/Documents/so$ cd ..
user@host:~/Documents$ ./so/myscript.sh 
/home/me/Documents

相反,如果您希望从脚本中知道脚本的存在位置 - 无论从哪里调用 - 请执行

#!/bin/bash 
readlink -m "$(which $0)" #method1
readlink -m "${BASH_SOURCE}" #method2 , preferred for reasons mentioned by @CharlesDuffy's comments