如何找出bash中另一个脚本调用的脚本(“sourceed”)的名称?
可能重复:如何找出bash中另一个脚本调用的脚本(“sourceed”)的名称?,bash,Bash,可能重复: 当使用source从另一个脚本调用bash脚本时,我无法从该脚本中找出被调用脚本的名称 file1.sh #!/bin/bash echo "from file1: $0" source file2.sh #!/bin/bash echo "from file2: $0" $ ./file1.sh from file1: ./file1.sh # expected from file2: ./file1.sh # was expecting ./file2.sh fil
当使用
source
从另一个脚本调用bash脚本时,我无法从该脚本中找出被调用脚本的名称
file1.sh
#!/bin/bash
echo "from file1: $0"
source file2.sh
#!/bin/bash
echo "from file2: $0"
$ ./file1.sh
from file1: ./file1.sh # expected
from file2: ./file1.sh # was expecting ./file2.sh
file2.sh
#!/bin/bash
echo "from file1: $0"
source file2.sh
#!/bin/bash
echo "from file2: $0"
$ ./file1.sh
from file1: ./file1.sh # expected
from file2: ./file1.sh # was expecting ./file2.sh
运行文件1.sh
#!/bin/bash
echo "from file1: $0"
source file2.sh
#!/bin/bash
echo "from file2: $0"
$ ./file1.sh
from file1: ./file1.sh # expected
from file2: ./file1.sh # was expecting ./file2.sh
Q:如何从
file2.sh
中检索file2.sh
?如果您源代码
脚本,那么您将强制脚本在当前进程/shell中运行。这意味着运行的file1.sh
脚本中的变量不会丢失。由于$0
被设置为file1.sh
,因此它保持原样
如果要获取file2
的名称,可以执行以下操作-
file1.sh
file2.sh
将
file2.sh
更改为:
#!/bin/bash
echo "from file2: ${BASH_SOURCE[0]}"
请注意,
BASH\u SOURCE
是一个数组变量。有关更多信息,请参阅Bash手册页。@Matt-尤其是这个答案:这建议使用$Bash\u SOURCE
。如果文件2位于不同的目录中,则$(basename${Bash\u SOURCE[0]})
仅获取文件名似乎效果更好。要获取目录,只需使用“$(cd“$(dirname”$BASH_SOURCE”)“pwd-P)”
这将调用另一个shell实例和一些其他可能有问题的东西,这些东西很可能不是他们想要的,我知道这不是我想要的。