bash - windows7 - 终端控制台




在Bash脚本中获取当前目录名称(没有完整路径) (13)

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

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


grep怎么样:

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

下面的grep与正则表达式也在起作用,

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

令人惊讶的是,没有人提到这种只使用内置bash命令的选择:

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

作为额外的奖励,您可以通过以下方式轻松获取父目录的名称:

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

这些将在Bash 4.3-alpha或更新的版本上工作。


以下命令将导致在bash脚本中打印当前工作目录。

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

只需使用:

pwd | xargs basename

要么

basename "`pwd`"

寻找像我这样的骑师:

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

您可以使用basename实用程序删除以/结尾的任何前缀和字符串中的后缀(如果以字符串形式存在),并将结果输出到标准输出中。

$basename <path-of-directory>

您可以使用pwd和basename的组合。 例如

#!/bin/bash

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

echo "$BASENAME"

exit;

我喜欢选择的答案(Charles Duffy),但是如果你在一个符号链接的目录并且你想要目标目录的名字,那么要小心。 不幸的是,我不认为这可以在一个参数扩展表达式中完成,也许我错了。 这应该工作:

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

为了看到这个,一个实验:

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

报告“酒吧”

DIRNAME

要显示路径的主目录(不会产生/ usr / bin / dirname的fork-exec):

echo ${target_PWD%/*}

这将例如转换foo / bar / baz - > foo / bar


我通常在sh脚本中使用它

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

你可以使用它来自动化事物...


这个主题很棒! 这里有一个更多的味道:

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

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


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

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





terminal