如何获取其中的目录路径的Bash脚本位于,里面那个脚本?
例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:
$ ./application
我四处寻找这个问题的答案,却找不到答案.
我编写了一个简单的脚本来执行初始服务器设置,我希望它在完成时从根目录中删除/取消链接.我已经尝试了一些我用Google搜索的解决方案(例如/ bin/rm $ test.sh),但脚本似乎总是保持不变.这可能吗?下面是我的脚本到目前为止.
#! /bin/bash
cd /root/
wget -r -nH -np --cut-dirs=1 http://myhost.com/install/scripts/
rm -f index.html* *.gif */index.html* */*.gif robots.txt
ls -al /root/
if [ -d /usr/local/psa ]
then
echo plesk > /root/bin/INST_SERVER_TYPE.txt
chmod 775 /root/bin/*
/root/bin/setting_server_ve.sh
rm -rf /root/etc | rm -rf /root/bin | rm -rf /root/log | rm -rf /root/old
sed -i "75s/false/true/" /etc/permissions/jail.conf
exit 1;
elif [ -d /var/webmin ]
then
echo webmin > /root/bin/INST_SERVER_TYPE.txt
chmod 775 /root/bin/*
/root/bin/setting_server_ve.sh
rm -rf /root/etc | rm -rf …
Run Code Online (Sandbox Code Playgroud) 我的bash脚本中有以下代码.现在我想在POSIX中使用它.那么如何转换呢?谢谢.
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
Run Code Online (Sandbox Code Playgroud) 我在同一个文件夹中有两个Bash脚本(由下载整个存储库的用户保存在某处):
script.sh
由用户运行helper.sh
是必需的并且由 script.sh
这两个脚本应该位于同一目录中.我需要第一个脚本来调用第二个脚本,但有两个问题:
/usr/bin/script.sh
,with ./script.sh
或者它可能是../Downloads/repo/scr/script.sh
)script.sh
在调用之前,脚本将更改为其他目录helper.sh
.我绝对可以通过将当前目录存储在一个变量中来实现这一目的,但是该代码似乎不必要地复杂化,因为我认为这是一个非常常见且简单的任务.
有可靠的helper.sh
内部可靠呼叫方式script.sh
吗?并且可以在任何支持Bash的操作系统中使用吗?
我正在使用卸载程序脚本删除安装脚本的父文件夹.
/usr/local/Myapplication/Uninstaller/uninstall.sh
Run Code Online (Sandbox Code Playgroud)
所以uninstall.sh必须这样做:
rm- rf /usr/local/Myapplication
Run Code Online (Sandbox Code Playgroud)
我可以检索卸载所在的文件夹
SYMLINKS=$(readlink -f "$0")
UNINSTALL_PATH=$(dirname "$SYMLINKS")
Run Code Online (Sandbox Code Playgroud)
但我仍然不确定获得父路径的漂亮方式.我想过使用sed去除这条路径的"Uninstaller"部分,但是有一种优雅的方法来获取Myapplication文件夹的路径来删除它吗?
谢谢
最近我想知道在 Bash 中获取当前正在运行的脚本/文件的路径的最佳方法。
我找到了很多答案。特别是其中之一是:
"${BASH_SOURCE:-${(%):-%x}}"
Run Code Online (Sandbox Code Playgroud)
我记得当时决定这是满足我需求的最佳解决方案。现在我正在努力记住为什么。我知道一些片段的意思,但不是全部。即使有了我所知道的,我也不能把它们放在一起来理解它。有用。但为什么?
我为在网络上的任何地方找到这个特定代码所做的一切努力(包括搜索它的一部分)都失败了,所以我无法找到我最初找到它的地方。
谁能告诉我每件作品的含义(甚至可以说明为什么我可能会选择这个而不是其他答案)?
谢谢!
第二天更新:@rici 的精彩回答(和评论)解释了一切,包括我选择它的原因。
似乎我选择了整个表达式来使我正在使用它的源文件能够在 bash 和 zsh 中可靠地使用 - 这是一个目标。使用双重替换,整个表达式在任一 shell 中得到相同的答案。
解释了为什么我无法理解(或通过谷歌找到任何合理的)bash 中的 ${(%):-%x} 部分,因为......好吧......它在 bash 中没有多大意义,哈哈,因为它是为 zsh 设计的。出于这个原因,我现在为此添加了一个 zsh 标签。
一个小时后的第二次更新,以防这对任何人有帮助:我现在已经找到了:
...这是我${(%):-%x}
最初从哪里得到的,最值得注意的是这个特定的答案:
我在 Zookeeper 中看到了这个 shell 脚本zkClear.sh
。
ZOOBIN="${BASH_SOURCE-$0}"
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这个脚本的含义?谢谢。