Смена владельца папки не работает!
Я пытаюсь изменить владельца папки и подпапок, набрав любой из них:
sudo chown $user -R /usr/bin/.folder/
sudo chown $user -R /usr/bin/folder/
sudo chown $user -R /usr/bin/.folder
sudo chown $user -R /usr/bin/folder
Но я получаю вывод:
chown: missing operand after '/usr/bin/.folder/'
Что я делаю неправильно?
3 ответа
Почему строчные $user
Не работает
Чтобы прояснить и расширить то, что сказали другие, переменные оболочки и среды чувствительны к регистру. user
а также USER
разные переменные, поэтому их содержимое (которое $user
а также $USER
расширить, соответственно) может быть разным. Как правило, переменная не называется user
определяется и $user
расширяется до нуля, в то время как вы хотите $USER
который расширится до вашего имени пользователя.
echo
Команда обычно подходит для проверки значения переменной:
$ echo "$user"
$ echo "$USER"
ek
Для переменных, значения которых не содержат пробелов, кавычки могут быть удалены без влияния на вывод.
Так что я мог бы просто использовать echo $USER
если бы я хотел.
Другой вариант, для chown
Вы, вероятно, знаете свое имя пользователя, так что вы можете просто использовать его вместо $USER
, Если вы это сделаете, обязательно пропустите $
знак
Например, так как мое имя пользователя ek
Я мог бы использовать:
sudo chown ek -R /usr/bin/.folder/
Почему вы получаете эту ошибку
Вам может быть интересно, почему вы получаете конкретное сообщение об ошибке:
chown: missing operand after '/usr/bin/.folder/'
Это сообщение на самом деле является информативным, так как, когда вы видите подобное сообщение от команды, в которой вы раскрыли переменные, оно предполагает, что одна или несколько ваших расширенных переменных могли быть непреднамеренно пустыми или неустановленными.
Ты бежал sudo chown $user -R /usr/bin/.folder/
, и с тех пор user
было, вероятно, неопределенным, $user
расширился до нуля, и это было эквивалентно выполнению:
sudo chown -R /usr/bin/.folder/
-R
вариант делает chown
действовать на каждый файл в дереве каталогов, как вы, вероятно, знаете. поскольку $user
расширился до нуля, /usr/bin/.folder/
был первым необязательным аргументом chown
и, таким образом, был интерпретирован как аргумент, указывающий желаемое владение (например, имя пользователя). /usr/bin/.folder
недопустимый синтаксис для этого, но эта конкретная ошибка осталась незамеченной, потому что остановлена другая ошибка chown
во-первых: аргументов больше не было, и поэтому ничего не было указано для chown
оперировать.
Другими словами, если я побежал sudo chown $USER -R /usr/bin/.folder/
это расширилось бы до sudo chown ek -R /usr/bin/.folder/
а также chown
будет интерпретировать свои аргументы следующим образом:
ek
: username, поскольку аргумент username еще не передан-R
: рекурсивный вариант (ведущий-
это то, что делаетchown
знаю, что это вариант аргумента)/usr/bin/.folder/
: файл или каталог для смены владельца, так как имя пользователя уже передано
Но если я побежал sudo chown $user -R /usr/bin/.folder
это расширилось бы до sudo chown -R /usr/bin/.folder/
а также chown
будет интерпретировать свои аргументы следующим образом:
-R
: рекурсивная опция/usr/bin/.folder/
: username, поскольку аргумент username еще не передан
Дальнейшее чтение
Для получения дополнительной информации вы можете быть заинтересованы в:
Пожалуйста, используйте $USER
вместо $user
,
sudo chown $USER -R /usr/bin/.folder/