su
withパラメーターを使用すると、-c
コマンドをユーザーのシェルに渡して実行することが説明されています。
しかし、私の環境では、-c
オプションを完全に無視してユーザーのシェルを変更します。
[root@mftf~]# su - demo -c "ls -la"
[demo@mftf~]$
ただし、コマンドなしで使用すると、引数が必要な-c
エラーが表示されるため無視されません。 RHEL7を使用しています。-c
答え1
-
(または)を使用すると、-l
指定されたユーザーの対話型ログインシェルを呼び出すことができます。
特定のユーザーに対してシェル初期化ファイルが実行する操作によっては、このコマンドが実行されないことがあります。たとえば、exec
呼び出しシェルからコマンドライン引数を渡さずに直接または同じものを介してtmux
シェルを再実行すると、ssh-agent
コマンド文字列が失われます。
たとえば、次のようになります。
if tmux has-session; then
exec tmux attach-session
else
exec tmux
fi
...myではこれが実行されない~/.profile
理由です(代わりにインタラクティブシェルが内部的に起動されます)。su -l me some_command
some_command
tmux
他のユーザーでコマンドを実行するには、su
do を使用します。
# su -c some_command username
Ubuntusu(1)
のマニュアルから:
-
、、、-l
--login
ユーザーが直接ログインするときに期待するのと同様の環境を提供します。
または設定sudo
して使用してください
$ sudo -u user some_command
答え2
suの後に-(ハイフン)を使用しないでください。 "-"を使用してsuを呼び出すときに実行すると、su demo -c 'ls -la'
ユーザープロファイルと環境が初期化されます。ユーザーシェルが最後に到達することを許可しない構成ファイルには、いくつかのスクリプトが必要です。