如何获取其中的目录路径的Bash脚本位于,里面那个脚本?
例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:
$ ./application
基本上我需要使用与shell脚本文件位置相关的路径运行脚本,如何将当前目录更改为脚本文件所在的目录?
我有一个脚本,exit如果它被采购我不希望它调用.
我想过检查是否$0 == bash但如果脚本来自另一个脚本,或者如果用户从不同的shell中获取它,则会出现问题ksh.
是否有可靠的方法来检测脚本是否来源?
如何在"$0"和之间做出选择"${BASH_SOURCE[0]}"
GNU的这个描述对我没什么帮助.
BASH_SOURCE
An array variable whose members are the source filenames where the
corresponding shell function names in the FUNCNAME array variable are
defined. The shell function ${FUNCNAME[$i]} is defined in the file
${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}
Run Code Online (Sandbox Code Playgroud) 鉴于:
some.txt
dir
|-cat.sh
Run Code Online (Sandbox Code Playgroud)
使用cat.sh的内容:
cat ../some.txt
Run Code Online (Sandbox Code Playgroud)
然后在./cat.sh内部运行dir工作正常,而不是./dir/cat.sh在同一级别上运行dir.我希望这是由于不同的工作目录.是否有一个容易的是../some.txt相对于位置的路径cat.sh?
我在同一个文件夹中有两个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的操作系统中使用吗?
这是一个shell脚本(.sh文件).我需要根据当前目录创建一个绝对路径.我知道pwd,但如何将其与另一个字符串连接?这是我想要做的一个例子:
"$pwd/some/path"
Run Code Online (Sandbox Code Playgroud) 是否有可能找到当前在KornShell(ksh)中执行的脚本的完整路径?
即如果我的脚本在/opt/scripts/myscript.ksh,我可以编程在该脚本内发现/opt/scripts/myscript.ksh吗?
谢谢,
我正在寻找一个简单的解决方案来检索当前脚本的绝对路径。它需要独立于平台(我希望它可以在 linux、freebsd、macos 和没有 bash 的情况下工作)。
编辑:检索脚本存储库路径的解决方案:
DIR="$( cd "$( dirname "$0" )" && pwd )"(来源:从内部获取 Bash 脚本的源目录)
我编写了一个 bash 脚本,该脚本通过命令行开关打开了一些选项。我想为用户创建选项以在安静模式下运行此脚本,这意味着 - 所有标准输出都将被重定向到 /dev/null。如果 -q 开关打开,我使用一个更改为 /dev/null 的变量:
while getopts ":qhb:kape" opt; do
case $opt in
q)
output=/dev/null
;;
Run Code Online (Sandbox Code Playgroud)
后来我将 acho mesagges 重定向到输出:
echo "something" 1>>$output
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在没有发送 -q 开关的情况下初始化上面的这个 var 输出。标准标准输出目的地(通常称为 sctipt 的文本终端)的值是多少?
谢谢!