Shebang行なしでシェルスクリプトを実行するためにsudoを使用するシェルは何ですか?

Shebang行なしでシェルスクリプトを実行するためにsudoを使用するシェルは何ですか?

私の環境はUbuntu 12.04 LTS、sudoバージョン1.8.3p1です。

まず、一般ユーザーとしてログインします。

$ whoami
fin

$ cat /etc/passwd | grep -i "root\|fin"
root:x:0:0:root:/root:/bin/bash
fin:x:1000:1000:This is a normal user:/home/fin:/bin/bash

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 30  2012 /bin/sh -> dash

$ ls -l /bin/bash
-rwxr-xr-x 1 root root 920788 Apr  3  2012 /bin/bash

$ echo $SHELL
/bin/bash

$ ps | grep "$$" | awk '{ print $4 }'
bash

$ ls -l ./test.sh
-rwxr-xr-x 1 fin fin 37 Sep 27 16:46 test.sh

$ cat ./test.sh
ps | grep "$$" | awk '{ print $4 }'

$ ./test.sh
bash

$ sudo ./test.sh
sh

最終出力はルートの使い方を示しているbashのでなければならないと思います。欠けている点はありますか?/etc/passwdbashsudo

ベストアンサー1

使い方はLinuxの定義と_PATH_BSHELL似ています。これは、またはを使用して実行した場合と同じでなければなりません。execvp()/bin/sh/usr/include/paths.henvfind -exec

必ずユーザーのログインシェルを使用しないでください。上記で見ることができるのは、対応するコマンドラインを入力したシェルが実行を試み、エラーコードを受け取ったらそれ自体を解釈することを決定するためbashです(互換モードで)。bashENOEXECexecvesh

おすすめ記事