「su」コマンドでユーザーのシェルを無視することは可能ですか?


9

私が行った場合

su - -c 'mkdir bin' user1

それから私は得る

su: /usr/bin/ksh: No such file or directory

ユーザーのシェルがkshinに設定され/etc/passwdkshいて、インストールされていないためです。

質問

このような場合、ユーザーとしてコマンドを実行するにはどうすればよいですか?


ユーザーのシェルが存在しないものに設定されているのはなぜですか?
MDMarra

1
/etc/passwdNISから来ています。
サンドラ、

1
まあそれはそれを説明します。
MDMarra

回答:


18

あなたが入れない場合は-後にsu、それはそのユーザの環境をロードしませんが、コマンドはまだそのユーザーとして実行されます。


私はあなたの実際の問題を誤解しているようです。他の人が言って-sいるように、おそらく実際に必要なオプションです。


それでも/ etc / passwdにあるシェルを使用しようとしますが、これはより大きな問題のようです。
フライハイト

シェルはそれ自体のIDを$ SHELL環境変数に入れますが、/ etc / passwdはsuが実行するシェルを探す場所です。`-`は、「ログイン」シェルとして機能するように指示するシェル呼び出しに渡されます(bashはbashrcファイルの代わりにプロファイルファイルを実行し、作業ディレクトリを変更します)
freiheit

8

以下を使用できます。

su -s /bin/sh -c 'mkdir bin' user1

-ssu のオプションは、使用するシェルを指定し、/ etc / passwdにあるものを上書きします。

私はドロップ-あなたがuser1のホームディレクトリに「ビン」を作成することと思いますので、プロファイルのロードに加えて、それはおそらく、コマンドに対するユーザのホームディレクトリに作業ディレクトリを変更します、ので、あなたの現在の、あなたのコマンドからではありませんディレクトリ。


5

suの-s /-shellオプションを使用すると、ユーザー環境の他の部分を維持しながら、使用するシェルを選択できると思います。/bin/shはposixで指定されているため、どこでも使用できるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.