如何从内核命令行中提取根变量的值

时间:2015-05-29 08:11:57

标签: linux bash sh busybox

我想在以下内核命令行中提取设置为根变量的值,我不想使用awk列号。

console=ttyO0,115200n8 noinitrd mem=256M root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait=1 ip=none

我可以使用以下命令提取它,但它取决于根变量的位置,但如果该位置发生变化则不起作用

cat /proc/cmdline | awk '{print $4}' | cut -d '=' -f2

任何建议/提示/指针?

修改
所有答案都是正确的,我接受了Aaron的回答,因为他是第一个回复的人。

4 个答案:

答案 0 :(得分:3)

另一个awk

cat /proc/cmdline | awk -v RS=" " '/^root=/ {print substr($0,6)}'

它使用RS(记录分隔符)将每个以空格分隔的参数拆分为不同的awk记录。然后,模式和substr()函数都可以引用找到的记录的开头。

答案 1 :(得分:2)

sed在这里效果更好:

cat /proc/cmdline | sed -e 's/^.*root=//' -e 's/ .*$//'

第一个表达式删除了root=以及之前的所有内容。第二个删除下一个空格和之后的所有内容。

答案 2 :(得分:2)

$ echo $root

$ cat /proc/cmdline | grep -o '\broot=[^ ]*'
root=/dev/mapper/VolGroup-lv_root
$ eval $(cat /proc/cmdline | grep -o '\broot=[^ ]*')
$ echo $root
/dev/mapper/VolGroup-lv_root

答案 3 :(得分:1)

您可以使用:

awk -F 'root=' '{sub(/ .*$/, "", $2); print $2}' /proc/cmdline
/dev/mmcblk0p2

甚至更短,不使用正则表达式:

awk -F '=' '$1=="root"{print $2}' RS=" " /proc/cmdline
/dev/mmcblk0p2

awk命令使用root=作为字段分隔符,并将root=之后的所有内容作为$2(第2个字段)。 sub函数会在/dev/mmcblk0p2 $2中留下#!/bin/sh [... other stuff] echo Configure project sources ... (while true ; do echo ; done ) | make config_config >> $WORKDIR/project.log 2>&1 echo Debug output to see that this line is reached ... [... other stuff] 后的所有空格并将其打印出来。