Сообщение об ошибке
sh: 2: export: (x86)/Intel/Intel(R): bad variable name
указывает на проблему разделения слов в результате пропущенного цитирования.
Текст (x86)/Intel/Intel(R)
выглядит как часть пути к каталогу, которая содержит пробелы общий на Windows. Это может быть что-то вроде
C:/Program Files (x86)/Intel/Intel(R) something
Вероятно, вы можете найти это в значении вашей переменной PATH
.
Согласно ссылочному потоку в справочной группе KALDI, проблема может быть в вашем файле path.sh
.
С вашим текущим рабочим каталогом /home/nitin/kaldi/egs/aspire/s5
проблема не возникнет в строке
export KALDI_ROOT=`pwd`/../../..
, но во избежание возможных проблем она должна быть
export KALDI_ROOT="$(pwd)"/../../..
или
export KALDI_ROOT="$(pwd)/../../.."
Проблема возникает в строке 2 скрипта (что соответствует сообщению об ошибке):
export PATH=$PWD/utils/:$KALDI_ROOT/tools/openfst/bin:$PWD:$PATH
Я полагаю, ваш PATH
содержит каталоги с пробелами (включая кусок, показанный в сообщении об ошибке). В этом случае оболочка разделит строку на каждый пробел, и вы получите что-то вроде
export PATH=something maybe_something_else (x86)/Intel/Intel(R) maybe_again_something
Это (попытка) экспортирует переменные PATH
, maybe_something_else
, (x86)/Intel/Intel(R)
и maybe_again_something
... что не то, что вы хотите. Вы хотите, чтобы все это было в значении PATH
.
Вам повезло получить сообщение об ошибке из оболочки о недопустимом имени переменной (x86)/Intel/Intel(R)
. Если бы все части были допустимыми именами переменных, вы бы получили неверный PATH и несколько нежелательных переменных среды, но без сообщения об ошибке.
Таким образом, вы также должны заключить в кавычки эту строку и в общем случае расширение всех переменных, которые могут содержать пробелы.
Предлагаю изменить path.sh
на
export KALDI_ROOT="$(pwd)/../../.."
export PATH="$PWD/utils/:$KALDI_ROOT/tools/openfst/bin:$PWD:$PATH"
[ ! -f "$KALDI_ROOT/tools/config/common_path.sh" ] && echo >&2 "The standard
file $KALDI_ROOT/tools/config/common_path.sh is not present -> Exit!" && exit
1
. "$KALDI_ROOT/tools/config/common_path.sh"
export "PATH=$KALDI_ROOT/tools/sctk/bin:$PATH"
export LC_ALL=C
source ../../../tools/env.sh
Я не знаю KALDI. Этот файл сгенерирован или вы его создали вручную?
Строка
export KALDI_ROOT=`pwd`/../../..
может быть проблематичной c, поскольку она зависит от текущего рабочего каталога при запуске сценария. Я не знаю, есть ли механизм, который гарантирует, что вы запускаете его только из каталога, где находится этот скрипт. В противном случае это приведет к неправильному значению KALDI_ROOT
. Я не знаю, есть ли причина сделать это так, как есть, но может иметь смысл использовать абсолютный путь вместо пути, который зависит от вашего рабочего каталога.
Текущий каталог /home/nitin/kaldi/egs/aspire/s5
приведет к
export KALDI_ROOT=/home/nitin/kaldi/egs/aspire/s5/../../..
Я бы заменил строку в скрипте на
export KALDI_ROOT=/home/nitin/kaldi
Вы можете спросите в группе помощи KALDI об этом предложении.
Редактировать:
Если добавления кавычек к path.sh
недостаточно, проверьте также $KALDI_ROOT/tools/config/common_path.sh
и $KALDI_ROOT/tools/env.sh
и другие сценарии, которые могут существовать.
В качестве отправной точки вы можете искать файлы, содержащие строку с export
и $PATH
. (Конечно, это может произойти и с другими переменными.) Пример:
find /home/nitin/kaldi -type f -exec grep 'export.*\$PATH' {} /dev/null \;
Я только что заметил, что path.sh
немного противоречиво. Он использует подстановку команд pwd
и переменную $PWD
, а также $KALDI_HOME
и жестко закодированный ../../..
, как будто строки написаны разными людьми.