-------------------------------------下面是源码
#!/bin/bash
#!/bin/sh
LOG_DIR="/var/log"
ROOT_UID=0
LINES=50
E_NOTROOT=67
if [ "$UID"x != "$ROOT_UID"x ]------这里的$UID为什么是null,echo $UID 是1啊
then
echo "Must be root run this script."
exit $E_NOTROOT
fi
if [ -n "$1" ]
then
lines=$1
else
lines=$LINES
fi
cd $LOG_DIR
if [ "$PWD" != "$LOG_DIR" ]
then
echo "can't change to $LOG_DIR"
exit $E_XCD
fi
tail -$lines messages > mesg.temp
cat /dev/null > messages
mv mesg.temp messages
cat /dev/null > wtmp
echo "logs cleaned up."
exit 0
---------------------------------下面是执行trace
+ LOG_DIR=/var/log
+ ROOT_UID=0
+ LINES=50
+ E_NOTROOT=67
+ [ x != 0x ]-------------------这里$UID结果是null
+ echo Must be root run this script.
Must be root run this script.
+ exit 67
一个脚本实例出了点小问题,附源码和执行跟踪trace
-
- 帖子: 71
- 注册时间: 2014-04-28 14:33
- 系统: ubuntu12¢os6
- susbarbatus
- 帖子: 2966
- 注册时间: 2010-04-10 16:14
- 系统: Arch Linux
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的
去掉一行吧,
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
脚本顶上的
代码: 全选
#!/bin/bash
#!/bin/sh
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
沉迷将棋中……
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
ubuntu里/bin/sh默认是dash,dash不提供$UID
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
-
- 帖子: 71
- 注册时间: 2014-04-28 14:33
- 系统: ubuntu12¢os6
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
你的意思是 不要 sh 脚本名 来执行,而用./脚本名 来执行?susbarbatus 写了:跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的去掉一行吧,代码: 全选
#!/bin/bash #!/bin/sh
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
-
- 帖子: 71
- 注册时间: 2014-04-28 14:33
- 系统: ubuntu12¢os6
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
那为什么 我echo $UID 可以显示出用户的idastolia 写了:ubuntu里/bin/sh默认是dash,dash不提供$UID
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
- susbarbatus
- 帖子: 2966
- 注册时间: 2010-04-10 16:14
- 系统: Arch Linux
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
bash abc.sh糊涂的小强 写了:你的意思是 不要 sh 脚本名 来执行,而用./脚本名 来执行?susbarbatus 写了:跑了一下,我这边结果对的,是正确的 UID,
脚本顶上的去掉一行吧,代码: 全选
#!/bin/bash #!/bin/sh
注意执行的时候用 bash 执行,不要用其他奇怪的 shell,不一定都有这个环境变量的。
或者,脚本第一行写的是 #!/bin/bash 的话,可以 ./abc.sh
沉迷将棋中……
- susbarbatus
- 帖子: 2966
- 注册时间: 2010-04-10 16:14
- 系统: Arch Linux
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
因为你执行 echo 用的终端开的 bash,糊涂的小强 写了:那为什么 我echo $UID 可以显示出用户的idastolia 写了:ubuntu里/bin/sh默认是dash,dash不提供$UID
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
你可以先执行 sh,然后在 sh 再 echo 试试看
沉迷将棋中……
-
- 帖子: 71
- 注册时间: 2014-04-28 14:33
- 系统: ubuntu12¢os6
Re: 一个脚本实例出了点小问题,附源码和执行跟踪trace
thank yoususbarbatus 写了:因为你执行 echo 用的终端开的 bash,糊涂的小强 写了:那为什么 我echo $UID 可以显示出用户的idastolia 写了:ubuntu里/bin/sh默认是dash,dash不提供$UID
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 20:13 /bin/sh -> dash
你可以先执行 sh,然后在 sh 再 echo 试试看