Если вы хотите избежать необходимости использовать sudo или изменять файл конфигурации sudoers, вы можете использовать:
sudo chown root:root path/to/command/COMMAND_NAME
sudo chmod 4775 path/to/command/COMMAND_NAME
Это заставит команду выполняться от имени пользователя root без необходимости использования sudo.
Это то же самое в оболочке, что и в других грамматиках, которые вы упомянули. Строка с одинарными кавычками будет рассматриваться как "строковый литерал" (так сказать).
Разница между git add '*.txt'
и git add *.txt
заключается в том, кто выполняет сопоставление шаблона с именами файлов.
В случае git add '*.txt'
, git
выполняет сопоставление с образцом. Поскольку оболочка не будет расширять строковый литерал '*.txt'
, git add
будет вызываться с одним аргументом, *.txt
. git
затем выполняет сопоставление с именами файлов, доступными во всем репозитории(потому что... git
).
В случае git add *.txt
оболочка выполняет сопоставление имен файлов и передает список совпадающих имен файлов из текущего каталогав git add
. Обратите внимание, что если нет имен, соответствующих заданному шаблону, оболочка (обычно 1) передаст шаблон в git add
без расширения.Если это произойдет, результат будет таким же, как если бы паттерн был процитирован.
1Обычно, но см., например, параметр оболочки failglob
в bash
. См. также комментарии к этому ответу.
Когда git add
получает имя файла pattern, он добавит не только файлы, совпадающие в текущем каталоге, но и добавит все файлы, совпадающие во всем репозиторий(т.е. включая любые подкаталоги). Вот почему текст в правом нижнем углу говорит
Подстановочные знаки:
Нам нужны кавычки, чтобы Git получил подстановочный знак до того, как наша оболочка сможет вмешаться в него. Без кавычек наша оболочка будет выполнять поиск по подстановочным знакам только в текущем каталоге. Git получит список файлов, найденных оболочкой вместо подстановочного знака, и не сможет добавить файлы в каталог octofamily.
Одинарные кавычки предотвращают расширение подстановки и переменной оболочкой, а двойные кавычки предотвращают только подстановку, а не расширение переменной.
*.txt
расширится по оболочке и выдаст список всех .txt
файлов. но цитирование '*.txt'
предотвратит это. см. ниже примеры.
echo *.txt
a.txt b.txt c.txt
echo '*.txt'
*.txt