我想在以下内核命令行中提取设置为根变量的值,我不想使用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的回答,因为他是第一个回复的人。
答案 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]
后的所有空格并将其打印出来。