私は bash スクリプトをデバッグしていますが、問題をこの非常に単純なスクリプトに要約しました。CentOS 5.7 で実行されます。
# tmp.sh
function do_as_someuser {
sudo -u someuser -i "$1"
}
do_as_someuser "ls -l" # line 1
#do_as_someuser "A=1 ls -l" # line 2
このスクリプトを 1 行目だけコメント解除して実行するとsomeuser
、予想どおり、のホーム ディレクトリのリストが表示されます。
[root@centos57 test]# ./tmp.sh
total 4
drwxr-xr-x 4 someuser someuser 4096 Mar 14 23:36 some_dir
[root@centos57 test]#
しかし、2行目だけのコメントを外すと、ログに記録さsomeuser
れ、ユーザープロンプトに戻りません。間違いなく、私が期待したものではありません。結局のところ、変数を定義することで違いが生じるのはなぜでしょうか?
[root@centos57 test]# ./tmp.sh
[someuser@centos57 ~]$
A=1 ls -l
コマンドラインで直接書くと、完全に正常に動作します。これが有効なコマンドなら、確かに にパラメータとして渡して実行できるsudo
はずですよね?
私の質問:
- なぜこれが起こるのですか?
do_as_someuser
変数が割り当てられたコマンドを実行するように変更するにはどうすればよいですか?