在bash脚本获取(无需输入完整路径)当前目录名(Get current directory nam

2019-06-21 13:58发布

我将如何在bash脚本得到的只是当前工作目录名称,甚至更好,只是一个终端命令。

pwd给出当前工作目录,例如完整路径/opt/local/bin ,但我只是想bin

Answer 1:

无需基本名称,尤其是不需要一个子shell运行PWD(这增加了额外的,且价格昂贵,叉路操作 ); 外壳可以做到这一点内部使用参数扩展 :

result=${PWD##*/}          # to assign to a variable

printf '%s\n' "${PWD##*/}" # to print to stdout
                           # ...more robust than echo for unusual names
                           #    (consider a directory named -e or -n)

printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
                           # ...useful to make hidden characters readable.

请注意,如果你申请在其他情况下,这种技术(不PWD ,但其他一些变量保存目录名),你可能需要修剪任何尾随斜线。 下面的使用bash的extglob支持 ,甚至有多个尾随斜杠的工作:

dirname=/path/to/somewhere//
shopt -s extglob           # enable +(...) glob syntax
result=${dirname%%+(/)}    # trim however many trailing slashes exist
result=${result##*/}       # remove everything before the last / that still remains
printf '%s\n' "$result"

另外,不extglob

dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result="${result##*/}"                  # remove everything before the last /


Answer 2:

使用basename的程序。 对于您的情况:

% basename "$PWD"
bin


Answer 3:

$ echo "${PWD##*/}"



Answer 4:

您可以使用PWD和基名的组合。 例如

#!/bin/bash

CURRENT=`pwd`
BASENAME=`basename "$CURRENT"`

echo "$BASENAME"

exit;


Answer 5:

如何grep的:

pwd | grep -o '[^/]*$'


Answer 6:

我喜欢选择的答案(查尔斯·达菲),但如果你是在一个符号链接目录和你想要的目标目录的名称要小心。 不幸的是,我不认为它可以在一个单一的参数扩展表达来完成,也许是我错了。 这应该工作:

target_PWD=$(readlink -f .)
echo ${target_PWD##*/}

看到这一点,一个实验:

cd foo
ln -s . bar
echo ${PWD##*/}

报告“栏”

DIRNAME

要显示的路径的主要目录(不产生在/ usr / bin中/目录名的叉EXEC):

echo ${target_PWD%/*}

这将如变换富/酒吧/巴兹 - >富/酒吧



Answer 7:

echo "$PWD" | sed 's!.*/!!'

如果您使用的是Bourne shell或${PWD##*/}不可用。



Answer 8:

这个线程是伟大的! 这是一个多味:

pwd | awk -F / '{print $NF}'


Answer 9:

出人意料的是,没有人提到这个替代方案,仅使用内置在bash命令:

i="$IFS";IFS='/';set -f;p=($PWD);set +f;IFS="$i";echo "${p[-1]}"

作为额外的奖励 ,你可以很容易地获得与父目录的名称:

[ "${#p[@]}" -gt 1 ] && echo "${p[-2]}"

这些将在猛砸4.3-α或新工作。



Answer 10:

basename $(pwd)

要么

echo "$(basename $(pwd))"


Answer 11:

我通常在sh脚本使用

SCRIPTSRC=`readlink -f "$0" || echo "$0"`
RUN_PATH=`dirname "${SCRIPTSRC}" || echo .`
echo "Running from ${RUN_PATH}"
...
cd ${RUN_PATH}/subfolder

你可以使用这个自动化的东西...



Answer 12:

对于发现骑师那里和我一样:

find $PWD -maxdepth 0 -printf "%f\n"


Answer 13:

下面的正则表达式的grep也在努力,

>pwd | grep -o "\w*-*$"


Answer 14:

basename "$PWD"

要么

IFS=/ 
var=($PWD)
echo ${var[-1]} 

打开内部文件名分隔符(IFS)回到空间。

IFS= 

还有就是IFS =后一个空间。



Answer 15:

您可以使用基名的实用工具,删除结尾的任何前缀/和后缀(如果存在的串)从字符串,并打印在标准输出结果。

$basename <path-of-directory>


Answer 16:

只需使用:

pwd | xargs basename

要么

basename "`pwd`"


Answer 17:

我强烈地倾向于使用gbasename ,这是GNU的coreutils的一部分。



Answer 18:

下面的命令将导致打印您的当前工​​作目录在bash脚本。

pushd .
CURRENT_DIR="`cd $1; pwd`"
popd
echo $CURRENT_DIR


Answer 19:

我使用这个命令:

dirname "$0"



文章来源: Get current directory name (without full path) in a Bash script
标签: bash shell