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##*/}
不可用。