我希望有人可以帮助我。在过去一个月左右的时间里,我一直在学习Bash ...我有一个程序(一个简单的语言学习程序),我希望能够从脚本安装和运行。
我有一个脚本可以创建一个新文件夹并将其移入其中。我现在这样做的方式如下,虽然我以后使用的数组有问题。我想知道是否有更简洁的方法来获取文件名的新路径。任何帮助或见解将不胜感激。
#!/bin/bash
echo "# path to me ---------------> ${0} "
echo "# parent path --------------> ${0%/*} "
echo "# my name ------------------> ${0##*/} "
if [[ ! -d ${0%/*}/SomeNewFolder ]] && [[ ! -d ${0%/*}/../SomeNewFolder ]]
then
mkdir ${0%/*}/SomeNewFolder
mv ${0} ${0%/*}/SomeNewFolder/${0##*/}
fi
echo ${0%/*}
newpath=$(echo "${0%/*}/SomeNewFolder")
echo $newpath
一切顺利,本
出口
答案 0 :(得分:2)
为清楚起见,我可能会为您的公共值声明命名变量,而不是不断重用$ {0}数组。引用变量和字符串也是一种好习惯。
我看到的唯一主要问题是运行./script.sh会使$ 0等于文件名,所以我在这种情况下将“./”添加到开头。
#!/bin/bash -u
ME="${0}"
if [[ ! "$ME" =~ /^\// ]]; then
ME="./$ME"
fi
PARENT="${ME%/*}"
FILENAME="${ME##*/}"
FOLDER="SomeNewFolder"
NEW="$PARENT/$FOLDER"
if [[ ! -d "$NEW" ]] && [[ "${PARENT%/*}" != "$FOLDER" ]]; then
mkdir "$NEW"
mv "$ME" "$NEW"
fi
echo "$PARENT"
echo "$NEW"
答案 1 :(得分:0)
嗯,你可以做这样的事情来获得绝对的路径:
PARENTPATH=$( cd "$( dirname "$0" )" && pwd )
NEWPATH=${PARENTPATH}/SomeNewFolder
答案 2 :(得分:0)
从make文件更适合安装和设置程序。当然,一开始看起来很吓人,但基本知识,比如你想要的东西,都很简单。对于您的项目,理想情况下您有三个项目:
这打破了这些不同组件中的每一个,使每个组件更易于管理。如果将它们放在一起,则可以将tar文件移动到新计算机并重新安装而不进行任何更改。 Bash是一个很棒的工具,但它不是安装程序。
下面的示例make脚本:
.PHONY: all clean
SCRIPT=yourScriptName.sh
SUBFOLDER=someFolder
all: $(SCRIPT)
$(SCRIPT): $(SUBFOLDER)
cp $(SCRIPT) $(SUBFOLDER)
$(SUBFOLDER):
mkdir $(SUBFOLDER)
clean:
-rm -f $(SUBFOLDER)/$(SCRIPT)
-rmdir $(SUBFOLDER)
重要! make是空格敏感的!那些缩进是标签而不是四个空格。
答案 3 :(得分:0)
me="$0"
newdir=SomeNewFolder
if [[ $me =~ ^/ ]] ; then
full_path="$me"
else
full_path="$PWD/$me"
fi
full_path="${full_path//\/\.\///}" # prettify
path_to_me="${full_path%/*}"
parent_dir="${path_to_me##*/}"
if [ ! "$parent_dir" = "$newdir" ] ; then
mkdir -p "$path_to_me/$newdir"
mv -f "$full_path" "$path_to_me/$newdir/"
fi
基本上类似于lunixbochs正在做的事情,但有一些小的改动
-f
和-p
因为交互性永远不会很酷,为什么不呢?