2015-04-23 7 views
4

Я не знаю, почему я получаю сообщение об ошибке во время выполнения этой простой скрипт:команда MkDir не найдено в Баш скрипт

#!/bin/bash 

read -p "Please enter directory name: " DIR 
read -p "Please enter the path: " PATH 
mkdir -p "$PATH/$DIR" 
line 7: mkdir: command not found 
+8

Вы изменяете '$ PATH'! Именно поэтому вам следует избегать имен переменных верхнего регистра. – Biffen

+3

Не используйте имена переменных 'ALL_CAPS'. Именно по этой причине. Они «зарезервированы» для использования оболочки. –

ответ

19

Не используйте переменную PATH. Эта переменная содержит список каталогов для поиска исполняемых программ. Поскольку вы заменяете его, скрипт больше не может найти программу mkdir.

В общем, избегайте использования переменных, которые являются прописными, они часто используются в качестве параметров для оболочки или других программ.

2

Переменная PATH является важной переменной среды - это способ, которым найдены программы (например, mkdir), и вы их переписываете. Вы не должны этого делать, но если вам необходимо:

/bin/mkdir -p "$PATH/$DIR" 

, но, честно говоря, НЕ ИСПОЛЬЗУЙТЕ ВЕРХНИЙ! В Bash есть множество зарезервированных или специальных переменных, и если вы не можете их запомнить, просто помните, что все, кроме одного, находятся в UPPERCASE. Переменные в Bash чувствительны к регистру, как и во всех разумных языках программирования.

+0

Вы говорите: «... все кроме одного в ВЕРХНЕЙ ЧАСТИ». Который из? – rjmunro

+0

@rjmunro 'PATH' должен быть прописным и является специальной переменной, поэтому это' DIR'. – cdarke

+0

Возможно, я неправильно понял. Вы говорите: «В bash есть множество зарезервированных или специальных переменных ... все, кроме одного, находятся в UPPERCASE». Какая резервная/специальная переменная bash не является верхним регистром? Или это не то, что вы хотели сказать? – rjmunro

Смежные вопросы