在学校,我学会了#0; $ 0"将是bash中脚本的名称,但是当我尝试打印它时,它实际上会打印-bash而不是scriptname。
#!/bin/bash
echo "$0"
输出:-bash
是否有我遗漏的东西,或者是否有其他命令来获取脚本的名称?
答案 0 :(得分:1)
您正在从交互式shell运行echo "$0"
,而不是从脚本运行。也许你把它放到一个脚本中,但后来采购脚本而不是调用它?
$ cat > 1.sh
#!/bin/bash
echo "$0"
$ chmod u+x 1.sh
$ ./1.sh
./1.sh
但是
$ echo "$0"
bash
$ . ./1.sh
bash
答案 1 :(得分:0)
使用$BASH_SOURCE
而非$0
,如BashFAQ #28中所述 - 或者更好,不依赖于能够准确确定您的脚本&# 39;所有的位置。
$0
由调用者设置,可以是任意字符串 - 不保证与读取脚本的位置有任何关系。
为了证明这一点,请尝试运行(exec -a arbitrary-name ./your-script)
,your-script
执行$0
并将arbitrary-name
设置为$0
。
source
d时,或者从其他位置执行从文件读取的函数时, $BASH_SOURCE
未正确更新;而在这些情况下ssh remotehost 'bash -s' <./scriptname
更新了。
本地文件名可能根本不存在:考虑使用target="_blank"
运行脚本的情况:没有与您的脚本对应的本地文件名&#39;来源。