当前位置: 技术问答>linux和unix
shell awk- print问题
来源: 互联网 发布时间:2017-01-14
本文导语: 照着书上抄了段代码,是shell脚本加载字符设备模块,但是有一句话老是出错,希望帮分析下 shell: device="test_dev" major=‘cat /proc/devices | awk "\$2=="$device" {print \$1}"’ mknod /dev/${device} c ${major} 0 书上是这么写的...
照着书上抄了段代码,是shell脚本加载字符设备模块,但是有一句话老是出错,希望帮分析下
shell:
device="test_dev"
major=‘cat /proc/devices | awk "\$2=="$device" {print \$1}"’
mknod /dev/${device} c ${major} 0
书上是这么写的,不知到写那么多 反斜杠有什么用?还有运行shell的时候总是会报错: mknod: 额外的操作数 "|"
我将上面的指令直接在终端中输入试了下,
major='cat /proc/devices | awk "\$2=="test_dev" {print \$1}"'
正常输出之后又会出现这样错误:
cat: |: 没有那个文件或目录
cat: awk: 没有那个文件或目录
cat: "\$2=="test_dev": 没有那个文件或目录
cat: {print: 没有那个文件或目录
cat: \$1}": 没有那个文件或目录
我尝试将 斜杠去掉,major='cat /proc/devices | awk "$2=="test_dev" {print $1}"'
结果和上面差不多:
cat: |: 没有那个文件或目录
cat: awk: 没有那个文件或目录
cat: "$2=="test_dev": 没有那个文件或目录
cat: {print: 没有那个文件或目录
cat: $1}": 没有那个文件或目录
可是在 /dev目录下 设备驱动 /dev/test_dev 是确实存在的阿!
不知到这个指令怎么改才能正确实现搜索到该设备的主设备号阿?
shell:
device="test_dev"
major=‘cat /proc/devices | awk "\$2=="$device" {print \$1}"’
mknod /dev/${device} c ${major} 0
书上是这么写的,不知到写那么多 反斜杠有什么用?还有运行shell的时候总是会报错: mknod: 额外的操作数 "|"
我将上面的指令直接在终端中输入试了下,
major='cat /proc/devices | awk "\$2=="test_dev" {print \$1}"'
正常输出之后又会出现这样错误:
cat: |: 没有那个文件或目录
cat: awk: 没有那个文件或目录
cat: "\$2=="test_dev": 没有那个文件或目录
cat: {print: 没有那个文件或目录
cat: \$1}": 没有那个文件或目录
我尝试将 斜杠去掉,major='cat /proc/devices | awk "$2=="test_dev" {print $1}"'
结果和上面差不多:
cat: |: 没有那个文件或目录
cat: awk: 没有那个文件或目录
cat: "$2=="test_dev": 没有那个文件或目录
cat: {print: 没有那个文件或目录
cat: $1}": 没有那个文件或目录
可是在 /dev目录下 设备驱动 /dev/test_dev 是确实存在的阿!
不知到这个指令怎么改才能正确实现搜索到该设备的主设备号阿?
|
放在命令行,应该是这样:
cat /proc/devices |awk ' $2 == "test_dev" {print $1}'
找/proc/devices 下设备名为test_dev的id
实际上是没有的
cat /proc/devices看看有哪些,比如:
cat /proc/devices |awk ' $2 == "raw" {print $1}'
就会有结果
在shell脚本中,反斜杠一般用作转义字符,那些$符号等都需要转义
man mknod可以看到用法
一般执行是:
mknod console c 5 1
console为设备文件名,自己随便取
c是指字符型设备 (可选b,块设备)
5是主设备号 /dev/devices里面记录现有的设备
找个没有用的就可以了
1是次设备号,当你要给两个同样的设备上一个驱动的时候就要分了,从0开始,1就是第二个了 ,对于字符设备,次设备号就表示同类型设备的不同设备。
而你写的脚本,我认为错了,设备都没有怎么获取设备id,然后再创建。。这个脚本没看懂
cat /proc/devices |awk ' $2 == "test_dev" {print $1}'
找/proc/devices 下设备名为test_dev的id
实际上是没有的
cat /proc/devices看看有哪些,比如:
cat /proc/devices |awk ' $2 == "raw" {print $1}'
就会有结果
在shell脚本中,反斜杠一般用作转义字符,那些$符号等都需要转义
man mknod可以看到用法
一般执行是:
mknod console c 5 1
console为设备文件名,自己随便取
c是指字符型设备 (可选b,块设备)
5是主设备号 /dev/devices里面记录现有的设备
找个没有用的就可以了
1是次设备号,当你要给两个同样的设备上一个驱动的时候就要分了,从0开始,1就是第二个了 ,对于字符设备,次设备号就表示同类型设备的不同设备。
而你写的脚本,我认为错了,设备都没有怎么获取设备id,然后再创建。。这个脚本没看懂
|
不会shell 觉得‘ 应该是反引号 不是单引号
mknod的方法真是过时了啊
mknod的方法真是过时了啊
|
你看到错在哪里了?是你没看仔细吧