Единственная проблема, которую я вижу, это отсутствие кавычек, так что если в именах каталогов/файлов есть пробелы, это пойдет не так.
#!/bin/bash
current_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
mkdir -p "$current_path/class"
cd "$current_path/class"
if [ -f "$1.php" ];
then
exit 1
else
echo "class $1
{
}" > "$1.php"
fi
Существует также проблема использования "$@"
, это то, что вы хотели. Вы имели в виду "$*"
?
и имена переменных должны быть в нижнем -регистре. Я не вижу, как это вызовет проблему здесь, но это ошибка, ожидающая своего появления.
Запуск shellcheck
обнаружил бы большинство этих ошибок.
No such file or directory
— это сообщение об ошибке, связанное с кодом ошибки ENOENT
.
Это сокращение от Error NO ENTry , обычно связанное с тем фактом, что в каталоге не было записи с данным именем, но также часто используется для обозначения не существует , даже если это не относится конкретно к данному файлу.
В качестве альтернативы иногда используется ESRCH
. Это Error SeaRCH , но соответствующее сообщение об ошибке на английском языке обычно No such process
, что, в конце концов, еще больше сбивает с толку, если ошибка не связана конкретно с процессами.
В любом случае, в вашем случае ошибка говорит о том, что локаль не найдена. Это может относиться или не относиться к реальному файлу, но это вряд ли имеет значение.
Вот, если я сделаю:
$ LC_ALL=foo locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
$ LC_ALL=foo strace locale 2>&1 | grep ENOENT
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
Я вижу, что некоторые системные вызовы завершаются ошибкой ENOENT
, но пути не обязательно связаны с ошибкой.
Для существующей локали я вижу:
$ strace locale 2>&1 | grep /usr/lib/locale
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
Дополнительные файлы искать не нужно, так как вся информация находится в этом locale-archive
.
locale -a
сообщит вам список доступных локалей в вашей системе. Если какая-либо из переменных среды LC_*
или LANG
содержит что-то, чего нет в этом списке, вы увидите ошибки такого рода.
Способ сделать доступными дополнительные локали зависит от системы.
В Debian это обычно dpkg-reconfigure locales
. Как правило, в конечном итоге локали компилируются из исходников с помощью стандартной команды localedef
.