./backup-notes.sh и просто backup-notes.sh — два разных пути к одному файлу. Первый упирается в права, второй — в PATH.
Запускать файл как программу ядро разрешает только с правом x. У backup-notes.sh права rw-r--r--: читать можно, запускать нельзя — отсюда Permission denied. Владелец добавляет себе право запуска командой chmod: chmod u+x backup-notes.sh, где u — владелец, x — запуск. После этого ./backup-notes.sh работает: ядро видит x, читает shebang и запускает /bin/bash.
./ в начале команды — путь: «файл в текущем каталоге». Имя без / оболочка ищет иначе — в каталогах PATH, как в уроке «Справка и оболочка». Текущего каталога в PATH нет, поэтому backup-notes.sh даёт command not found, даже когда файл рядом.
Свои команды кладут в ~/bin. На Ubuntu файл ~/.profile при входе ставит ~/bin в начало PATH — если такой каталог уже есть. Каталог, созданный в открытом терминале, оболочка не увидит до нового входа; применить сразу — source ~/.profile. Расширение .sh для запуска не нужно, поэтому команду в ~/bin называют коротко.
Ты выполнил chmod u+x backup-notes.sh. Что ответит оболочка на backup-notes.sh — без ./, в том же каталоге?
-
До проверки прав дело не дойдёт: оболочка ищет имя в каталогах PATH и не находит файл.
type backup-notes.shответитnot found. -
Этот ответ даёт dash. Скрипт с
#!/bin/bashвыполнил бы bash, но без./оболочка файл даже не найдёт. -
Имя без
/оболочка ищет в каталогах PATH, а ~/script-lab там нет:echo $PATHего не покажет. Файл с правом x она так и не найдёт.
Право x решает, можно ли запустить файл, а PATH — где оболочка ищет имя без /. Текущего каталога в PATH нет, поэтому файл с правом x по имени так и не находится. Помогает ./backup-notes.sh или копия в каталоге из PATH.
Главное в шаге
-
./файлзапускает файл как программу: нужно право x, а интерпретатор ядро берёт из shebang. -
Имя без
/оболочка ищет только в каталогах PATH; свои команды живут в~/bin, который~/.profileдобавляет в PATH при входе.