这是我尝试执行命令的shell脚本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吗?我该如何解决?