A H*_*A H 6 permissions command-line directory environment-variables chown
我正在尝试通过键入以下任一内容来更改文件夹和子文件夹的所有权:
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
Run Code Online (Sandbox Code Playgroud)
但我得到输出:
chown: missing operand after '/usr/bin/.folder/'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Eli*_*gan 11
$user
不起作用为了澄清和扩展其他人 所说的,shell 和环境变量区分大小写。user
和USER
是不同的变量,所以它们的内容(分别是which$user
和$USER
expand to)可能不同。通常,没有user
定义调用的变量并将$user
其扩展为空,而您想要的是$USER
将扩展为您的用户名的变量。
该echo
命令通常适用于检查变量的值:
$ echo "$user"
$ echo "$USER"
ek
Run Code Online (Sandbox Code Playgroud)
对于值不包含任何空格的变量,可以删除引号而不影响输出。
所以echo $USER
如果我愿意,我可以使用。
chown
您可能知道自己的用户名,因此您可以使用它代替$USER
. 如果这样做,请确保省略$
符号。
例如,由于我的用户名是ek
,我可以使用:
sudo chown ek -R /usr/bin/.folder/
Run Code Online (Sandbox Code Playgroud)
您可能想知道为什么会收到特定的错误消息:
chown: missing operand after '/usr/bin/.folder/'
Run Code Online (Sandbox Code Playgroud)
该消息实际上是提供信息的,因为当您在扩展变量的命令中看到类似这样的消息时,它表明您的一个或多个扩展变量可能无意中为空或未设置。
你运行了sudo chown $user -R /usr/bin/.folder/
,因为user
可能是未定义的,$user
扩展为空,它相当于运行:
sudo chown -R /usr/bin/.folder/
Run Code Online (Sandbox Code Playgroud)
您可能知道,该-R
选项chown
对目录树中的每个文件进行操作。由于$user
扩展为空,/usr/bin/.folder/
是 的第一个非选项参数chown
,因此被解释为指定所需所有权的参数(例如用户名)。/usr/bin/.folder
是不是为有效语法,但没有报告特定错误,因为不同的错误停止chown
第一:有没有更多的参数,所以没有指定任何chown
操作上。
换句话说,如果我 run 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/
: 用户名,因为还没有传递用户名参数欲了解更多信息,您可能对以下内容感兴趣: