gpt4 book ai didi

ksh - 当 ksh 脚本来自另一个脚本时,它如何确定自身的完整路径?

转载 作者:行者123 更新时间:2023-12-04 14:33:30 26 4
gpt4 key购买 nike

当脚本由 ksh 提供时,它如何确定它的路径? IE。

$ ksh ". foo.sh"

我已经在 stackoverflow 和其他地方发布的 BASH 中看到了非常好的方法,但还没有找到 ksh 方法。

使用“$0”不起作用。这只是指“ksh”。

更新:我试过使用“history”命令,但不知道当前脚本之外的历史。
$ cat k.ksh
#!/bin/ksh
. j.ksh
$ cat j.ksh
#!/bin/ksh
a=$(history | tail -1)
echo $a
$ ./k.ksh
270 ./k.ksh

我希望它回显“* ./j.ksh”。

最佳答案

如果是 AT&T ksh93 ,此信息存储在 .sh 中命名空间,在变量 .sh.file 中.
例子sourced.sh :

(
echo "Sourced: ${.sh.file}"
)
调用:
$ ksh -c '. ./sourced.sh'
结果:
Sourced: /var/tmp/sourced.sh
.sh.file变量不同于 $0 .虽然 $0可以 ksh/usr/bin/ksh ,或当前运行脚本的名称, .sh.file将始终引用当前作用域的文件。
在交互式 shell 中,这个变量甚至不存在:
$ echo ${.sh.file:?}
-ksh: .sh.file: parameter not set

关于ksh - 当 ksh 脚本来自另一个脚本时,它如何确定自身的完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7616505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com