Я удалил его супервизора и установил снова. Тогда это сработало для меня.
sudo apt-get purge supervisor
sudo apt-get install supervisor
cp path/to/file.conf /etc/supervisor/conf.d/
sudo supervisorctl reread
sudo supervisorctl update
Логика может быть изменена для использованияelif
:
if A; then
: do something for condition A
elif B; then
: do something for condition B
else
: do something else
fi
Замените секции A
/ B
/ :
на свои команды.
Вложенный подход (, использовавшийся первоначально ), также будет работать, если второй цикл for
будет перемещен вверх, чтобы стать частью вложенного блока if else
:if A; then :; else if B; then :; else :; fi; fi
.
Помимо этого :расширение параметра @Q
bash обычно не то, что вы хотите передать в качестве аргумента команде. foo_esc="${x@Q}"; mediainfo "$foo_esc"
не будет работать правильно, но mediainfo "$x"
будет. Чтобы использовать подстановочные знаки при передаче аргументов сценарию, не заключайте подстановочный знак:script "John's file*.mp4"
-> script "John's file"*.mp4
в кавычки.
Всегда есть несколько способов сделать это. С помощью bash вы можете скопировать аргументы в массив, а затем запустить mediainfo
в массиве (без проверки, не знаю wget
, поэтому изменено наcurl
):
#!/bin/bash
echo >&2 "$# argument${2+s}" # This will look odd when $# is 0
while [[ ${1+1} ]]; do # Funny way of writing [[ $# -gt 0 ]]
case $1 in
(http:// | https://) echo >&2 "${1@Q} looks like a URL"
file=$(curl -fOJL -w '%{filename_effective}' "$1") &&
array+=("$file");;
(*) echo >&2 "${1@Q} is not a URL, checking if available locally"
{ [[ -f "$1" ]] || [[ -d "$1" ]]; } &&
array+=("$1");;
esac
shift
done
[[ ${#array[@]} -gt 0 ]] && # The while loop placed arguments into array
mediainfo "${array[@]}" # now run command if array is not empty
Это работает правильно при использовании операторов elif
.
#!/bin/bash
if [ "$#" -eq 0 ]
then
echo "no argument supplied"
elif [[ $1 != *http?(s)://* ]]; then
echo "Invalid URL, must be a file"
echo "$# arguments:"
for x in "$@"; do
foo_esc="${x@Q}"
echo "file is "$foo_esc""
mediainfo "$foo_esc"
done
else
echo "$# arguments:"
for y in "$@"; do
file=$(wget --content-disposition -nv "$y" 2>&1 |cut -d\" -f2)
echo "output is "$file""
mediainfo "$file"
done
fi
Вы можете сохранить это в info.sh
#!/bin/bash
url_info() {
url=$1
file=$(wget --content-disposition -nv "$url" 2>&1 | cut -d\" -f2)
echo output is "$file"
mediainfo "$file"
}
file_info() {
file=$1
file_esc="${file@Q}"
echo file is "$file_esc"
mediainfo "$file_esc"
}
# Error if no arguments supplied
if [[ $# -eq 0 ]];
then
echo "no argument supplied"
exit 0
fi
# Loop over arguments and call appropriate function
for arg in "$@";
do
if [[ $arg == http* ]];
then
url_info "$arg"
else
file_info "$arg"
fi
done
, затем
chmod +x info.sh
./info.sh "http://example.com" "Some file.mp4"