gpt4 book ai didi

linux - 使用 sudo 执行 2 个(类似的)命令,给出相同的精确输出

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:56 27 4
gpt4 key购买 nike

这是我的 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 吗?我该如何解决这个问题?

最佳答案

问题是您的脚本在 --cmd 之后只接受一个参数。这意味着您的命令中只能包含一个标记。

我建议您将所有位置参数作为要运行的命令,并使用 "$@" 将其传递给 sudo。为此,您需要避免像您当前所做的那样关闭所有非选项参数。

例如,您可以这样做:

while [ "$#" -gt 0 ]; do
case "$1" in
--sudoUser)
SUDO_USER="$2"
shift 2;;
--sudoPwd)
SUDO_PWD="$2"
shift 2;;
*)
break;;
esac
done

然后,对于脚本的其余部分,将$CMD_OR_SCRIPT所有 实例替换为"$@"(双引号是必需的)。另外,在运行脚本时不要指定 --cmd。因此,对于您的示例用法,您应该使用:

./execSudoScript.sh --sudoUser root --sudoPwd pass ls /opt

应 OP 的要求,这是整个脚本的编辑版本:

#!/bin/sh

# Initialize values of arguments
SUDO_USER=""
SUDO_PWD=""

while [ "$#" -gt 0 ]; do
case "$1" in
--sudoUser)
SUDO_USER="$2"
shift 2;;
--sudoPwd)
SUDO_PWD="$2"
shift 2;;
*)
break;;
esac
done

if [ -n "$SUDO_USER" ]; then
if [ -n "$SUDO_PWD" ]; then
echo "$SUDO_PWD" | sudo -k -S -u "$SUDO_USER" "$@"
else
sudo -u "$SUDO_USER" "$@"
fi
else
if [ -n "$SUDO_PWD" ]; then
echo "$SUDO_PWD" | sudo -k -S "$@"
else
sudo "$@"
fi
fi

关于linux - 使用 sudo 执行 2 个(类似的)命令,给出相同的精确输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com