別のユーザーとしてsudoを使用してcdを実行する際の問題


12

別のユーザーに代わってシェルでコマンドを実行したい。コマンドは次のとおりです。

sudo -u USER cd /home/USER

私は得る

sudo: cd: command not found

sudoに渡すコマンドの正しい構文は何ですか?

回答:


14

cd組み込みシェルです。シェル組み込みコマンドを実行するには、シェルを呼び出す必要があります。

sudo -u USER sh -c 'cd /home/USER'

または

sudo -u USER bash -c 'cd /home/USER'

1
これは実際には何も役に立ちませんcd。シェルはの直後に終了します。OPはおそらく望んでいsudo -iます。
デロバート

5

cdは外部コマンドではなく、単なるシェル組み込みコマンドであるため、sudo実行できません。cdシェル組み込みとしてのみ存在する理由は、プロセスが別のプロセスの現在のディレクトリに影響を与えることができないためです。したがって、現在のディレクトリを変更してすぐに終了するプログラムは役に立ちません。(ほとんど役に立たない:cdプログラムは成功したかどうかを示すステータスを返します。)

ディレクトリに移動してから別のユーザーとしてコマンドを実行する場合は、すべてを実行するシェルを実行します。

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'

1

私は使用する傾向があります:sudo su - USERNAMEそして、そのユーザーとして必要なことを行います。入力するだけで終了しますexit


3
ロギングUSERNAMEし、コマンドを実行すると、直接のコマンドを実行することが異なっているUSERNAME
Pandya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.