在 bash 脚本中包含源代码时,如何修复或屏蔽 shellcheck 发现的 1091 错误?
How do you fix or mask a 1091 error found with shellcheck when including a source in a bash script?
Shellsheck 是 shell 脚本的静态分析工具,可以在某些 Linux 系统上本地安装,无需在线安装即可用于检查 bash 脚本的某些错误。
- https://github.com/koalaman/shellcheck
- https://www.shellcheck.net/
- https://man.archlinux.org/man/shellcheck.1.en
测试环境:
- Linux 薄荷(Ubuntu 版)
- 给定的是一个有效的 bash 脚本,它回显“我是来自主文件的回显”和一个源文件,它回显“我是来自源文件的回显”。
- 展位文件位于同一文件夹中。
- 使用 shellcheck 0.7.1-1 进行测试,按本地安装的版本。
main.sh
#!/bin/bash
source ./sourcefile.sh
echo "Output from main.sh"
echo
echo
fkt_output_from_sourcefile_sh
echo
echo
echo "For closing window, press Enter or Ctl + C"; read -r
sourcefile.sh
#!/bin/bash
fkt_output_from_sourcefile_sh() {
echo "Output from sourcefile.sh"
}
我是如何在终端上运行它的:
shellcheck -x main.sh
终端输出(看起来工作正常):
Output from main.sh
Output from sourcefile.sh
For closing window, press Enter or Ctl + C
通过 shellcheck -x:
检查的错误消息
In /home/user/desktop/main.sh line 8:
source ./sourcefile.sh
^-- SC1091: Not following: ./sourcefile.sh: openBinaryFile: does not exist (No such file or directory)
可能的解决方案(这对我不起作用,可能取决于我的语法错误):
- https://github.com/koalaman/shellcheck/wiki/SC1090
- https://github.com/koalaman/shellcheck/wiki/SC1091
- https://github.com/koalaman/shellcheck/issues/769
- https://github.com/koalaman/shellcheck/wiki/Directive
无效解决方案示例:
基于:
“告诉 ShellCheck 在哪里可以找到源文件(自 0.4.0 起):”
# shellcheck source=src/examples/config.sh
. "$(locate_config)"
来源:
main.sh
#!/bin/bash
# shellcheck source=./sourcefile.sh
source "$(find_install_dir)/sourcefile.sh"
echo "Output from main.sh"
echo
echo
fkt_output_from_sourcefile_sh
echo
echo
echo "For closing window, press Enter or Ctl + C"; read -r
sourcefile.sh :
#!/bin/bash
fkt_output_from_sourcefile_sh() {
echo "Output from sourcefile.sh"
}
终端错误信息:
/home/user/desktop/main.sh: Line 4: find_install_dir: Command not found.
/home/user/desktop/main.sh: Line 4: /sourcefile.sh: File or folder not found
Output from main.sh
/home/user/desktop/main.sh: Line 10: fkt_output_from_sourcefile_sh: Command not found.
For closing window, press Enter or Ctl + C
我更好地审查了你的情况,并在 shellcheck
的 github 上发现了这个问题:
https://github.com/koalaman/shellcheck/issues/1356 (This specific comment)
据我了解,开发人员提到了 2 个解决方案:
1.解决 SC1091:
因为您编辑的代码也没有再次向我显示此错误,而且我没有在 source ./sourcefile.sh
上方看到您关于 SC1091
的 shellcheck
评论,我只能建议您添加此评论在 main.sh
,并再次检查:
...
# shellcheck disable=SC1091
source ./sourcefile.sh
...
然后运行:
$ shellcheck main.sh
2。如果 shellcheck
是使用 snap
安装的,请阅读此内容:
snap 将阻止访问不在 /home
//media
中的任何其他目录,但查看您的日志时,您的脚本似乎在 /home/user
中,所以这不是问题,可能是 # 1.
Shellsheck 是 shell 脚本的静态分析工具,可以在某些 Linux 系统上本地安装,无需在线安装即可用于检查 bash 脚本的某些错误。
- https://github.com/koalaman/shellcheck
- https://www.shellcheck.net/
- https://man.archlinux.org/man/shellcheck.1.en
测试环境:
- Linux 薄荷(Ubuntu 版)
- 给定的是一个有效的 bash 脚本,它回显“我是来自主文件的回显”和一个源文件,它回显“我是来自源文件的回显”。
- 展位文件位于同一文件夹中。
- 使用 shellcheck 0.7.1-1 进行测试,按本地安装的版本。
main.sh
#!/bin/bash
source ./sourcefile.sh
echo "Output from main.sh"
echo
echo
fkt_output_from_sourcefile_sh
echo
echo
echo "For closing window, press Enter or Ctl + C"; read -r
sourcefile.sh
#!/bin/bash
fkt_output_from_sourcefile_sh() {
echo "Output from sourcefile.sh"
}
我是如何在终端上运行它的:
shellcheck -x main.sh
终端输出(看起来工作正常):
Output from main.sh
Output from sourcefile.sh
For closing window, press Enter or Ctl + C
通过 shellcheck -x:
检查的错误消息In /home/user/desktop/main.sh line 8:
source ./sourcefile.sh
^-- SC1091: Not following: ./sourcefile.sh: openBinaryFile: does not exist (No such file or directory)
可能的解决方案(这对我不起作用,可能取决于我的语法错误):
- https://github.com/koalaman/shellcheck/wiki/SC1090
- https://github.com/koalaman/shellcheck/wiki/SC1091
- https://github.com/koalaman/shellcheck/issues/769
- https://github.com/koalaman/shellcheck/wiki/Directive
无效解决方案示例:
基于: “告诉 ShellCheck 在哪里可以找到源文件(自 0.4.0 起):”
# shellcheck source=src/examples/config.sh
. "$(locate_config)"
来源:
main.sh
#!/bin/bash
# shellcheck source=./sourcefile.sh
source "$(find_install_dir)/sourcefile.sh"
echo "Output from main.sh"
echo
echo
fkt_output_from_sourcefile_sh
echo
echo
echo "For closing window, press Enter or Ctl + C"; read -r
sourcefile.sh :
#!/bin/bash
fkt_output_from_sourcefile_sh() {
echo "Output from sourcefile.sh"
}
终端错误信息:
/home/user/desktop/main.sh: Line 4: find_install_dir: Command not found.
/home/user/desktop/main.sh: Line 4: /sourcefile.sh: File or folder not found
Output from main.sh
/home/user/desktop/main.sh: Line 10: fkt_output_from_sourcefile_sh: Command not found.
For closing window, press Enter or Ctl + C
我更好地审查了你的情况,并在 shellcheck
的 github 上发现了这个问题:
https://github.com/koalaman/shellcheck/issues/1356 (This specific comment)
据我了解,开发人员提到了 2 个解决方案:
1.解决 SC1091:
因为您编辑的代码也没有再次向我显示此错误,而且我没有在 source ./sourcefile.sh
上方看到您关于 SC1091
的 shellcheck
评论,我只能建议您添加此评论在 main.sh
,并再次检查:
...
# shellcheck disable=SC1091
source ./sourcefile.sh
...
然后运行:
$ shellcheck main.sh
2。如果 shellcheck
是使用 snap
安装的,请阅读此内容:
snap 将阻止访问不在 /home
//media
中的任何其他目录,但查看您的日志时,您的脚本似乎在 /home/user
中,所以这不是问题,可能是 # 1.