Я пишу программу, которая создает каталог, а затем изменяет рабочий каталог на вновь созданный каталог, чтобы выполнить некоторую работу:
func main() {
err := os.Mkdir("English", 0777) // I know 777 is not good practice, first I want to get Chdir() working
if err != nil && !os.IsExist(err) {
log.Fatal(err)
}
err = os.Chdir("English")
if err != nil {
log.Fatal(err)
}
}
Вывод консоли:
023/02/05 18:15:45 chdir English: permission denied
exit status 1
@JimB единственная ошибка, связанная с вызовом Mkdir()
, заключается в том, что каталог существует. Проверяя созданный каталог в моем терминале, я вижу, что он был создан и имеет разрешения drw-r--r--
, когда я выполняю `ls -l.
Таким образом, каталог уже существует и имеет неправильные разрешения.
Чтобы было ясно, каталога не существовало, пока моя программа не запустилась в первый раз. Удаление каталога и повторный запуск программы приводит к повторному созданию каталога с неправильными разрешениями, несмотря на указание 0777.
Затем кажется, что у вас неправильный umask или настройки файловой системы, препятствующие установке битов выполнения по умолчанию.
Простое исправление: выполнение программы с использованием sudo
привело к созданию каталога с указанными разрешениями.
Проверьте ошибку от вызова Mkdir, независимо от IsExist. Если каталог уже существует, проверьте существующие разрешения.