相关疑难解决方法(0)

查找源 shell 脚本的位置

来源的 shell 脚本是否有可能知道它的位置?我读过确定来源的shell脚本路径,但答案集中在bashtcsh,如果使用POSIX外壳失败。$0也不是解决方案并产生错误的结果

解决方案不需要 100% 可靠。路径不太可能包含硬链接或符号链接。

# sourcing the script should yield the absolute path to the script
. somedir/thescript

# within “thescript”
-> /tmp/foo/bar/somedir
Run Code Online (Sandbox Code Playgroud)

一些背景:该脚本是现有应用程序的一部分,其中包含bin与源脚本相关的已知位置(因架构而异)的目录中的数十个二进制文件。要使用该应用程序,用户需要将bin目录PATH放在 .

shell path

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

获取源bash脚本的路径

这是我尝试的简单脚本

#!/bin/bash DIR="$(cd "$(dirname $0)" && pwd)" echo $DIR

当我执行它时$ ./my_script.sh,正确获取路径。
但是,当我像这样获取它时$ source my_script.sh,它会获取路径/bin

如何通过源获取脚本的路径?
源代码和执行代码有什么区别?

bash shell-script

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

使用 `_` 作为传递给命令的环境变量

来自 bash 手册

_

在 shell 启动时,设置为用于调用在环境或参数列表中传递的正在执行的 shell 或 shell 脚本的绝对路径名。随后,在扩展后扩展到上一个命令的最后一个参数。还设置为用于调用在导出到该命令的环境中执行和放置的每个命令的完整路径名。检查邮件时,此参数保存邮件文件的名称。

关于粗体的句子,斯蒂芬说

bash 与其他一些 shell 一样,会将_环境变量传递给它执行的命令,其中包含 bash 用作execve()系统调用第一个参数的路径。

$ env | grep '^_'
_=/usr/bin/env
Run Code Online (Sandbox Code Playgroud)

如何获取_任意命令的环境变量值而不是env, 以验证其值是该命令的可执行文件或脚本的路径名?

谢谢。

environment-variables

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

连接 pwd 和基本名称

我想将路径和文件名分配给变量:

/path/to/myfile/file.txt
Run Code Online (Sandbox Code Playgroud)

例如

MYFILE=$(pwd)$(basename)
Run Code Online (Sandbox Code Playgroud)

我该怎么做 ?

linux bash basename pwd

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

标签 统计

bash ×2

basename ×1

environment-variables ×1

linux ×1

path ×1

pwd ×1

shell ×1

shell-script ×1