コマンドを実行しようとしているシェルスクリプトは次のとおりですsudo
#! /bin/sh
# Initialize values of arguments
SUDO_USER=""
SUDO_PWD=""
CMD_OR_SCRIPT=""
if ! options=$(getopt -u -o : -l sudoUser:,sudoPwd:,cmd: -- $@)
then
echo "Wrong option given :: $1"
exit 1
fi
set -- $options
while [ $# -gt 0 ]
do
case $1 in
--sudoUser)
SUDO_USER="$2"
shift
;;
--sudoPwd)
SUDO_PWD="$2"
shift
;;
--cmd)
CMD_OR_SCRIPT="$2"
shift
;;
esac
shift
done
if [ "$CMD_OR_SCRIPT" != "" ]; then
if [ "$SUDO_USER" != "" ]; then
if [ "$SUDO_PWD" != "" ]; then
echo $SUDO_PWD | sudo -k -S -u $SUDO_USER $CMD_OR_SCRIPT
else
sudo -u $SUDO_USER -k -S $CMD_OR_SCRIPT
fi
else
if [ "$SUDO_PWD" != "" ]; then
echo $SUDO_PWD | sudo -k -S $CMD_OR_SCRIPT
else
sudo $CMD_OR_SCRIPT
fi
fi
fi
コマンドを次のように実行すると-
./execSudoScript.sh --sudoUser root --sudoPwd pass --cmd ls
期待どおり、現在のディレクトリの内容を出力として取得します。しかし、コマンドを次のように実行すると-
./execSudoScript.sh --sudoUser root --sudoPwd pass --cmd ls /opt
の内容を取得する代わりに、現在のディレクトリの内容を取得し/opt
ます。その後のスペースls
がhtisの原因ですか?これを修正するにはどうすればよいですか?