Ubuntu 16.04
Bash 4.3.48
Почему происходит сбой shellcheck
, когда исходный файл представляет переменные в верхней части скрипта?
Вот простой скрипт:
#!/bin/bash
. .sourcefile
echo "Today is ${day}."
Вот мой исходный файл:
day="Monday"
Вот ответы shellcheck
"
root@0000 /home/.work # shellcheck start.sh
In start.sh line 5:
echo "Today is ${day}."
^-- SC2154: day is referenced but not assigned.
Есть ли способ сообщить shellcheck
, что переменные находятся в исходном файле?
Вот что я сделал, чтобы сделать эту работу на Ubuntu 16.04
Как объяснил Dash-o, мне пришлось добавить директиву source в строку перед моим выражением source:
#!/bin/bash
# shellcheck source=./.sourcefile.sh
. .sourcefile.sh
echo "Today is ${day}."
и добавить -x в командную строку, чтобы shellcheck следовал зафайл. Когда я превысил команду, я получил следующую ошибку:
root@0000 /home/.work # shellcheck -x start.sh
unrecognized option `-x'
Usage: shellcheck [OPTIONS...] FILES...
-e CODE1,CODE2.. --exclude=CODE1,CODE2.. exclude types of warnings
-f FORMAT --format=FORMAT output format
-s SHELLNAME --shell=SHELLNAME Specify dialect (bash,sh,ksh)
-V --version Print version information
Байу упомянул, что ему нужна более новая версия. Я проверил, и я запустил 0.3.7, и это была последняя версия, которую Ubuntu должен был предложить для16.04. Я взял последний двоичный файл от разработчиков и установил его.
root@0000 /home/.work # mkdir /home/.remove
root@0000 /home/.work # cd /usr/bin
root@0000 /usr/bin # mv shellcheck /home/.remove
root@0000 /usr/bin # wget https://storage.googleapis.com/shellcheck/shellcheck-stable.linux.x86_64.tar.xz
2019-10-28 12:36:20 (14.0 MB/s) - ‘shellcheck-stable.linux.x86_64.tar.xz’ saved [1545012/1545012]
root@0000 /usr/bin # tar xvf shellcheck-stable.linux.x86_64.tar.xz
shellcheck-stable/README.txt
shellcheck-stable/LICENSE.txt
shellcheck-stable/shellcheck
root@0000 /usr/bin # mv shellcheck-stable.linux.x86_64.tar.xz /home/.remove
root@0000 /usr/bin # mv shellcheck-stable/shellcheck .
root@0000 /usr/bin # mv shellcheck-stable /home/.remove
root@0000 /usr/bin # rm -rf /home/.remove
Я выполнил команду shellcheck -x start.sh
, и я получил ноль ошибок. Затем я заставил shellcheck выдать предупреждение, добавив cat $alkjcvkljdvksldjb
до конца моего сценария и все работало как положено.
root@0000 /home/.work # shellcheck -x start.sh
root@0000 /home/.work # echo "cat \$alkjcvkljdvksldjb" >> start.sh
root@0000 /home/.work # shellcheck -x start.sh
In start.sh line 7:
cat $alkjcvkljdvksldjb
^----------------^ SC2154: alkjcvkljdvksldjb is referenced but not assigned.
^----------------^ SC2086: Double quote to prevent globbing and word splitting.
Did you mean:
cat "$alkjcvkljdvksldjb"
For more information:
https://www.shellcheck.net/wiki/SC2154 -- alkjcvkljdvksldjb is referenced b...
https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
Надеюсьэто помогает кому-то.