使用基本的shell脚本,例如
USER=$1
CMD=$2
/usr/bin/sudo -u $USER $CMD
我可以跑
# ./script.sh root "/bin/echo 'apple pie'"
'apple pie'
但是尝试改为:
#/script.sh root "/bin/date -s '2011-08-24 15:24:30'"
date: the argument `15:24:30\'' lacks a leading `+';
when using an option to specify date(s), any non-option
argument must be a format string beginning with `+'
Try `date --help' for more information.
我可以通过手动输入
来复制日期错误/bin/date -s \'2011-08-24 15:24:30\'
date: the argument `15:24:30\'' lacks a leading `+';
when using an option to specify date(s), any non-option
argument must be a format string beginning with `+'
Try `date --help' for more information.
所以我在这个脚本中使用日期的问题是单引号会自动转义哪个日期不喜欢。我可以将脚本更改为基于$ 1 $ 2 $ 3“$ 4”,但这会删除此脚本的通用性质(已针对此帖子进行了简化)。
任何制作这种脚本的方法都支持日期大小而没有特殊的套管吗?
答案 0 :(得分:3)
试试这个:
USER=$1
shift
/usr/bin/sudo -u $USER "$@"
“$ @”会保留引号,你应该像这样运行你的脚本:
./script.sh root /bin/echo 'apple pie'
请注意缺少双引号。