更具体一点: 假设当前目录是〜/ Bash /并且其中包含〜/ Bash / test /
myscrip.sh .
应该输出“Generating Bash.html”
myscrip.sh ../Bash/test
或
myscrip.sh test/
两者都应该获得“Generating ./test.html”
这是我尝试获取相对路径,但这是我的第一个脚本, 所以我还没有足够的资源。
#! /bin/bash
[ $# -ne 1 ] \
&& echo -e " Script usage: \n\t `basename $0` <folder>" \
&& exit 1
[ -d "$1" ] || { echo "Folder doesn't exist" && exit 2; }
folder=`find -maxdepth 1 -name "${1%/}"`
echo -e "Generating $folder.html"
答案 0 :(得分:0)
而不是
folder=`find -maxdepth 1 -name "${1%/}"`
使用
folder=$(basename "$(realpath -s "$1")")
其余的看起来还不错。
realpath
(GNU coreutils的一部分)将为您提供作为参数给出的路径的规范化版本。 realpath .
的打印方式与pwd
相同,realpath ../Bash/test
将为您提供/home/user/Bash/test
等等。 -s
参数阻止了符号链接的解析。basename
将最里面的目录名称与之隔离,这是您想要的名称。$()
执行命令替换;它类似于反引号,但更容易嵌套。有一点需要注意:您需要检查"$1" == "/"
,此逻辑最终会失效(folder
变为/
,如果没有特殊处理,您会尝试撰写到/.html
)。无论你是想禁止它还是做一些特别的事情都是你必须自己回答的设计问题。