分页: 1 / 1

求一行命令

发表于 : 2012-02-26 22:51
自由建客

代码: 全选

>0< ~$ lsmod | grep '^vboxdrv\>'
vboxdrv              1762739  4 vboxpci,vboxnetadp,vboxnetflt

>0< ~$
目的是要得到 vboxdrv 是否正被内核模块之外的例程使用。
上例结果应该是 1,也就是引用数 4 减去后面的模块数 3。

Re: 求一行命令

发表于 : 2012-02-26 23:05
lilydjwg

代码: 全选

lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'

Re: 求一行命令

发表于 : 2012-02-26 23:29
自由建客

代码: 全选

>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv              1762739  4 vboxpci,vboxnetadp,vboxnetflt

>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0

>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv              1762739  3 vboxpci,vboxnetadp,vboxnetflt

>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0

>0< urd$ 
不对啊,怎么都是 0?

Re: 求一行命令

发表于 : 2012-02-27 0:59
lilydjwg
自由建客 写了:

代码: 全选

>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv              1762739  4 vboxpci,vboxnetadp,vboxnetflt

>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0

>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv              1762739  3 vboxpci,vboxnetadp,vboxnetflt

>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0

>0< urd$ 
不对啊,怎么都是 0?
我用的是 zsh。bash 不支持。。。。 http://stackoverflow.com/q/2746553/296473 :em20 :em20 :em20

Re: 求一行命令

发表于 : 2012-02-27 1:06
HuntXu

代码: 全选

 | perl -ne '@_ = split /\s+/; printf "%d\n", $_[2] - split /,/, $_[3]'

Re: 求一行命令

发表于 : 2012-02-27 4:09
自由建客
bash 要用 <<<

代码: 全选

		read TMP TMP MOD_REF MOD_LST <<< "`lsmod | grep '^vboxdrv\>'`"
		MOD_REF=`echo "$MOD_LST" | awk -F, -v n=$MOD_REF '{ print n-NF}'`
		if [ $MOD_REF -ne 0 ]; then
			echo "ERROR: Module vboxdrv is in use" >&2
			exit 1
		fi

Re: 求一行命令

发表于 : 2012-02-27 21:16
fnan
lsmod | grep '^vboxdrv\>'|awk -F, '{split($1,a," ");print a[3]-NF}'

Re: 求一行命令

发表于 : 2012-02-27 22:21
自由建客

代码: 全选

		if [ `lsmod | awk '$1=="vboxdrv" {print $3-split($4,a,",")}'` -ne 0 ]; then
			echo "ERROR: Module vboxdrv is in use" >&2
			exit 1
		fi
最终我用这个了