我想以 7 个字符的 PSI 域 (00:01.0) 作为变量来获取第二个命令的输出。我怎样才能编写一个 bash 脚本来做到这一点?
jeff@jeff-probook:/$ lspci | grep VGA 00:01.0 VGA 兼容控制器:Advanced Micro Devices, Inc. [AMD/ATI] Carrizo (rev c5)
jeff@jeff-probook:/$ lspci -v -s 00:01.0 00:01.0 VGA 兼容控制器:Advanced Micro Devices, Inc. [AMD/ATI] Carrizo (rev c5) (prog-if 00 [VGA controller]) 子系统:惠普公司 Carrizo 标志:总线主机、快速开发、延迟 0、IRQ 231 c0000000 处的内存(64 位,可预取)[大小=256M] d0000000 处的内存(64 位,可预取)[大小=8M] I/O 端口数为 3000 [size=256] d0d00000 处的内存(32 位,不可预取)[大小=256K] d0800000 处的扩展 ROM [禁用] [大小=128K] 能力: 使用的内核驱动程序:amdgpu 内核模块:amdgpu
这绝对行不通:
user@host:~$ cat lspciVGA #!/bin/bash var1="$(lspci | grep -E "VGA|3D")" var2="$(expr substr ${var1} 0 7)" var3="$(sudo lspci -v -s ${var2})" 回声“$ var3”
输出:
user@host:~$ bash lspciVGA expr: 语法错误 lspci:选项需要一个参数——'s' 用法:lspci [] 基本显示模式: -mm 产生机器可读的输出(单个 -m 表示过时的格式) -t 显示总线树 显示选项: -v 详细(-vv 表示非常详细) -k 显示处理每个设备的内核驱动程序 -x 显示配置空间标准部分的十六进制转储 -xxx 显示整个配置空间的十六进制转储(危险;仅限 root) -xxxx 显示 4096 字节扩展配置空间的十六进制转储(仅限 root) -b 以总线为中心的视图(总线所见的地址和 IRQ) -D 总是显示域号 将设备 ID 解析为名称: -n 显示数字 ID -nn 显示文本和数字 ID(名称和数字) -q 通过 DNS 在 PCI ID 数据库中查询未知 ID -qq 同上,但是重新查询本地缓存的条目 -Q 通过 DNS 查询所有 ID 的 PCI ID 数据库 设备选择: -s [[[[]:]]:][][.[]] 仅显示选定插槽中的设备 -d []:[] 仅显示具有指定 ID 的设备 其他选项: -i 使用指定的 ID 数据库而不是 /usr/share/misc/pci.ids.gz -p 在给定文件中查找内核模块而不是默认的 modules.pcimap -M 启用“总线映射”模式(危险;仅限 root) PCI 访问选项: -A 使用指定的 PCI 访问方法(参见 `-A help' 获取列表) -O = 设置 PCI 访问参数(参见 `-O help' 获取列表) -G 启用 PCI 访问调试 -H 使用直接硬件访问(= 1 或 2) -F 从给定文件中读取 PCI 配置转储