相关疑难解决方法(0)

从脚本本身获取Bash脚本的源目录

如何获取其中的目录路径的Bash脚本位于,里面那个脚本?

例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:

$ ./application

directory bash

4672
推荐指数
44
解决办法
158万
查看次数

自我删除shell脚本

我四处寻找这个问题的答案,却找不到答案.

我编写了一个简单的脚本来执行初始服务器设置,我希望它在完成时从根目录中删除/取消链接.我已经尝试了一些我用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 shell

52
推荐指数
3
解决办法
4万
查看次数

如何在POSIX中获取脚本目录?

我的bash脚本中有以下代码.现在我想在POSIX中使用它.那么如何转换呢?谢谢.

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
Run Code Online (Sandbox Code Playgroud)

bash posix sh

47
推荐指数
1
解决办法
7299
查看次数

在与当前脚本相同的目录中运行脚本

我在同一个文件夹中有两个Bash脚本(由下载整个存储库的用户保存在某处):

  • script.sh 由用户运行
  • helper.sh 是必需的并且由 script.sh

这两个脚本应该位于同一目录中.我需要第一个脚本来调用第二个脚本,但有两个问题:

  1. 知道当前的工作目录对我来说是无用的,因为我不知道用户是如何执行第一个脚本的(可能是with /usr/bin/script.sh,with ./script.sh或者它可能是../Downloads/repo/scr/script.sh)
  2. script.sh在调用之前,脚本将更改为其他目录helper.sh.

我绝对可以通过将当前目录存储在一个变量中来实现这一目的,但是该代码似乎不必要地复杂化,因为我认为这是一个非常常见且简单的任务.

可靠的helper.sh内部可靠呼叫方式script.sh吗?并且可以在任何支持Bash的操作系统中使用吗?

bash path filepath

39
推荐指数
3
解决办法
2万
查看次数

检索脚本的父目录

我正在使用卸载程序脚本删除安装脚本的父文件夹.

/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文件夹的路径来删除它吗?

谢谢

unix bash shell

7
推荐指数
3
解决办法
1万
查看次数

在Bash中,每一段“${BASH_SOURCE:-${(%):-%x}}”是什么意思

最近我想知道在 Bash 中获取当前正在运行的脚本/文件的路径的最佳方法。

我找到了很多答案。特别是其中之一是:

"${BASH_SOURCE:-${(%):-%x}}"
Run Code Online (Sandbox Code Playgroud)

我记得当时决定这是满足我需求的最佳解决方案。现在我正在努力记住为什么。我知道一些片段的意思,但不是全部。即使有了我所知道的,我也不能把它们放在一起来理解它。有用。但为什么?

我为在网络上的任何地方找到这个特定代码所做的一切努力(包括搜索它的一部分)都失败了,所以我无法找到我最初找到它的地方。

谁能告诉我每件作品的含义(甚至可以说明为什么我可能会选择这个而不是其他答案)?

谢谢!


第二天更新:@rici 的精彩回答(和评论)解释了一切,包括我选择它的原因。

似乎我选择了整个表达式来使我正在使用它的源文件能够在 bash 和 zsh 中可靠地使用 - 这是一个目标。使用双重替换,整个表达式在任一 shell 中得到相同的答案。

解释了为什么我无法理解(或通过谷歌找到任何合理的)bash 中的 ${(%):-%x} 部分,因为......好吧......它在 bash 中没有多大意义,哈哈,因为它是为 zsh 设计的。出于这个原因,我现在为此添加了一个 zsh 标签。


一个小时后的第二次更新,以防这对任何人有帮助:我现在已经找到了:

${BASH_SOURCE[0]} 在 zsh 中等效?

...这是我${(%):-%x}最初从哪里得到的,最值得注意的是这个特定的答案:

/sf/answers/1983553141/

bash zsh

1
推荐指数
1
解决办法
183
查看次数

${BASH_SOURCE-$0} 的含义?

我在 Zookeeper 中看到了这个 shell 脚本zkClear.sh

ZOOBIN="${BASH_SOURCE-$0}"
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这个脚本的含义?谢谢。

bash

1
推荐指数
1
解决办法
2721
查看次数

标签 统计

bash ×7

shell ×2

directory ×1

filepath ×1

path ×1

posix ×1

sh ×1

unix ×1

zsh ×1