![]() |
1
450
在bash中,您应该得到如下所需的:
|
![]() |
2
340
原始日志包含解决方案(忽略响应,它们不添加任何有用的内容)。有趣的工作是通过上述的unix命令完成的
对于bash、sh、ksh:
对于TCSH,CSH:
|
![]() |
3
44
早些时候对一个答案的评论说了这一点,但在所有其他答案中很容易遗漏。 使用bash时:
|
![]() |
4
36
假设你在使用bash
这个脚本应该打印您所在的目录,然后打印脚本所在的目录。例如,当从调用它时
记住,当从命令输出中分配变量时,请将命令包装在
|
![]() |
5
30
如果你在使用bash…
|
![]() |
6
15
正如市场建议:
除非您从脚本所在的同一目录执行脚本,否则这是有效的,在这种情况下,您将得到一个值“.”。 要解决该问题,请使用:
现在您可以在整个脚本中使用变量current_dir来引用脚本目录。但是,这可能仍然存在symlink问题。 |
![]() |
7
14
这个问题的最佳答案是:
是:
一个行程序,它将为您提供脚本的完整目录名,无论从何处调用脚本。 要了解它的工作原理,可以执行以下脚本:
|
![]() |
8
13
|
![]() |
9
7
让我们把它变成一个posix一行程序:
在许多波恩兼容的外壳上测试,包括BSD外壳。 据我所知,我是作者,我把它放到了公共领域。有关详细信息,请参阅: https://www.jasan.tk/posts/2017-05-11-posix_shell_dirname_replacement/ |
![]() |
10
4
|
![]() |
11
2
受到启发 blueyedâs answer
|
![]() |
12
2
如此多的答案,都是合理的,每一个都有赞成和反对的目标(可能每个目标都应该说明)。这是另一个解决方案,它满足了一个主要目标,即在所有的系统上、在所有的bash上清晰地工作(不假设bash版本,或者
每个组件都存储在单独的变量中,您可以单独使用:
|
![]() |
13
2
介绍 这个答案 改正 这条线非常破碎但令人震惊的最高投票答案(由市场部撰写):
为什么在上面使用dirname“$0”不起作用? 名字0美元 只有当用户以非常具体的方式启动脚本时才有效。我能够找到几个这样的情况:这个答案失败了,脚本崩溃了。 首先,让我们了解这个答案是如何工作的。他正在通过
0美元 表示调用脚本的命令的第一部分(基本上是不带参数的输入命令:
$0=“/some/path//script” dirname基本上查找字符串中的最后一个/并将其截断。所以如果你这样做:
你会得到:usr/bin 这个例子工作得很好,因为/usr/bin/sha256sum是一个格式正确的路径,但是
工作不好,会给你:
假设你和你的脚本在同一个目录下,用这个命令启动它。
在这种情况下,$0将是。/script和dirname$0将给出:
使用:
如果不输入完整路径,也会给出basedir=“” 使用相对目录:
给出目录名$0:
如果您在/some目录中,并且以这种方式调用脚本(请注意,开头没有/some目录,再次是相对路径):
您将以dirname$0获得此值:
和/path//script(相对路径的另一种形式)给出:
只有两种情况 Basdir 0美元 如果用户使用sh或touch启动脚本,将起作用,因为两者都将导致$0:
这将为您提供一个可以与dirname一起使用的路径。 解决方案 您将解释并检测上述每一种情况,并在出现以下情况时对其应用修复:
|
![]() |
14
2
这一行程序告诉我们shell脚本在哪里, 不管您是运行它还是从中获得它 . 此外,它还解析涉及的任何符号链接,如果是这样的话:
顺便问一下,我想你在用 /BI/BASH . |
![]() |
15
-4
这样就可以做到:
它可能看起来很难看,这取决于它是如何被调用的和CWD的,但是它应该能把你带到你需要去的地方(或者如果你关心字符串的外观,你可以调整它)。 |
![]() |
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
![]() |
g00dds · 如何在bash中从文件中的每一行解码base64? 2 年前 |
![]() |
Paul · Bash wait命令忽略指定的进程ID 2 年前 |
![]() |
RafaÅ G. · 如何使用从文件读取的多行参数运行ssh? 3 年前 |
![]() |
Priya · 在shell脚本中多次运行python脚本 3 年前 |