我正在尝试通过键入以下内容之一来更改文件夹和子文件夹的所有权:
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/'
我究竟做错了什么?
答案1
为什么小写$user
不起作用
澄清和扩展其他人的观点有 说,shell 和环境变量区分大小写。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
:用户名,因为尚未传递用户名参数-R
:递归选项(前导-
部分使人chown
知道这是一个选项参数)/usr/bin/.folder/
:由于用户名已传递,因此要更改所有权的文件或目录
但如果我运行sudo chown $user -R /usr/bin/.folder
,它将扩展为sudo chown -R /usr/bin/.folder/
并chown
以这种方式解释其参数:
-R
:递归选项/usr/bin/.folder/
:用户名,因为尚未传递用户名参数
进一步阅读
欲了解更多信息,您可能感兴趣:
答案2
请使用$USER
而不是$user
。
sudo chown $USER -R /usr/bin/.folder/
答案3
变量user
可能为空。请尝试$USER
。