我有一个我想在许多目录中复制的shell脚本
在此脚本中,如何初始化变量
PARENT_FOLDER
以某种方式在其中存储包含此脚本的文件夹的名称(而不是绝对路径)?
请注意,此脚本可以从任何文件夹运行。
提前致谢。
答案 0 :(得分:2)
在大多数情况下,以下内容获取脚本所在目录的绝对路径:
PARENT_FOLDER=$(dirname "$(readlink -f "$0")")
(OSX和BSD可能缺少-f
选项,否则路径可能仍包含符号链接。)
如果您只想要路径中最终目录的名称,只需添加一步:
PARENT_FOLDER=$(dirname "$(readlink -f "$0")")
PARENT_FOLDER=${PARENT_FOLDER##*/}
在缺少readlink -f
但可用bash的系统上:
PARENT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PARENT_FOLDER=${PARENT_FOLDER##*/}
如果缺少readlink -f
和bash:
PARENT_FOLDER="$( cd "$( dirname "$0" )" && pwd )"
PARENT_FOLDER=${PARENT_FOLDER##*/}
答案 1 :(得分:2)
要获取Current Directory的父文件夹,您可以使用以下命令
PARENT_FOLDER=$(pwd | awk -F"/" 'OFS="/"{$NF=""}1')
更新
也可以在命令下面工作
来自命令dirname的手册页 打印NAME并删除其尾随/组件;如果NAME不包含/,则输出'。'(表示当前目录)。
PARENT_FOLDER = $(dirname“$ PWD”) 或
PARENT_FOLDER=$(dirname "$0")
答案 2 :(得分:1)
PARENT_FOLDER=$(pwd | awk -F / '{if ($NF!="") print $NF; else print "/"}')
答案 3 :(得分:0)
在mac和linux上为我工作的最佳解决方案是
PARENT_FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PARENT_FOLDER=${PARENT_FOLDER##*/}
这是此链接中给出的答案的组合:
Getting the source directory of a Bash script from within
@ John1024给出的答案