次のいずれかを入力して、フォルダーとサブフォルダーの所有権を変更しようとしています。
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
小文字が機能しない理由
他の人が言っていることを明確にし、拡張する持っている 言った、シェル変数、および環境変数は大文字と小文字が区別されます。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/'
このメッセージは実際には情報提供を目的としており、変数を展開したコマンドからこのようなメッセージが表示される場合、展開した変数の 1 つ以上が意図せず空または未設定になっている可能性があることを示唆しています。
を実行しました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
。