次のスクリプトを作成したいと思います。
例:test.sh
echo "test script"
Sudo su
logout
このようなスクリプトを実行する場合:
echo "test"
Sudo su
whomai
必要な結果が得られます。
[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#
ご覧のとおり、スクリプトはechoコマンドを実行し、次にSudo sをrootに実行します。ここで、必要なことを実行でき、rootセッションを終了した後、スクリプトを実行します最後の(whoami)コマンドを実行します。
私の問題は、このスクリプトの最後に自分でログアウトできないことです。
ルート権限なしでこれを行う方法が必要です。
誰かが私を助けることができますか?
追加説明:
おそらくあなたがやりたいことは:
exec ./test.sh
これにより、現在のシェルプロセスがスクリプトに置き換わるため、終了時に実行するものがなくなります。
logout
はログインシェルに対してのみ機能し、スクリプトは通常ログインシェルとして実行されないため、スクリプト内のlogout
は何にも影響しません。
SSH(または何か)経由でログオンし、別のユーザーとして実行してすぐにログアウトしているように思えます。その場合、コマンドを現在のシェルで実行できるように、スクリプトをソースするだけです。その後、logout
が機能します。
または、exec
を使用できますが、その場合、有効なのはlogout
ではありません-logout
は失敗し、スクリプトの終了により終了します。違いのない区別だと思います。
または、. ./script
を使用するのが面倒な場合は、中括弧で関数を定義します。
switchuser () {
echo "test script"
Sudo su -
exit
}
中括弧内のコマンドは現在のシェルで実行され、括弧内のコマンドはサブシェルで実行されます。これを.bashrc
に追加すれば、簡単にできます:
switchuser
通常、ルートとしてコマンドを実行するには、Sudo
で十分です。
#!/bin/bash
echo test
Sudo whoami
su
の使用を主張する場合は、何らかの理由で-cフラグを使用できます。
#!/bin/bash
echo test
Sudo su -c whoami
そして、両方のケースで同じ結果が得られます:
$ ./test.sh
test
[Sudo] password for xieerqi:
root
ルートシェルに入る場合は、Sudo -i
を使用します
serg@ubuntu[/home/xieerqi]
$ Sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi]
$
Suを使用:
serg@ubuntu[/home/xieerqi]
$ Sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi
Rootだけでなく別のユーザーとしてコマンドを実行する場合は、Sudo -u username command
を使用できます
$ Sudo -u testuser whoami
testuser
su
と同じアイデア:
serg@ubuntu[/home/xieerqi]
$ Sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi