小编Dan*_*aks的帖子

防止 bash 脚本在命令错误后退出

我有一个脚本来执行一个输出多行文本的命令:

qmicli -d /dev/cdc-wdm0 --nas-get-serving-system
Run Code Online (Sandbox Code Playgroud)

输出:

Registration state: 'registered'
    CS: 'detached'
    PS: 'detached'
    Selected network: 'unknown'
    Radio interfaces: '1'
            [0]: 'none'
    Data service capabilities: '0'
    Detailed status:
            Status: 'none'
            Capability: 'cs-ps'
            HDR Status: 'none'
            HDR Hybrid: 'yes'
            Forbidden: 'yes'
Run Code Online (Sandbox Code Playgroud)

我想检查第一行引号中的字符串。如果字符串等于 'registered',我想做点什么。所以最初,我把它放在我的脚本中:

qmicli -d /dev/cdc-wdm0 --nas-get-serving-system | grep "'registered'"
if [ $? -eq 0 ]; then
    #do stuff
fi
Run Code Online (Sandbox Code Playgroud)

这是有效的,除了时不时,qmicli 命令出错(它与外部设备连接,有时硬件只是在它应该响应时没有响应)。当这种情况发生时,整个脚本就会爆炸。所以我对 qmicli 命令进行了 OR 运算,true这样它就不会出错:

qmicli -d /dev/cdc-wdm0 --nas-get-serving-system || true | grep "'registered'"
Run Code Online (Sandbox Code Playgroud)

但是现在,$? 是总是0,因此,如果有条件我已经建立了我不能使用。

有没有更好的方法来检查命令的多行输出中的字符串,但如果命令返回错误,还可以防止脚本退出?

grep shell-script

8
推荐指数
1
解决办法
1万
查看次数

交叉编译:在构建(非目标)系统上运行`make install`

我了解使用交叉编译器在一种架构上编译代码,然后将可执行文件复制到另一种架构以运行它的基本概念。但是我无法弄清楚./configure; make; make install交叉编译上下文中典型序列的最后一步。

例如,我想使用我的 Ubuntu PC 为 ARM 设备交叉编译 libusb。我下载了 libusb 源代码,运行了 configure 和 make:

> ./configure --disable-udev --host=arm-linux-gnueabihf CC=/usr/bin/arm-linux-gnueabi-gcc
> make
Run Code Online (Sandbox Code Playgroud)

在这一点上,我有一堆针对 ARM 架构的 libusb 编译二进制文件。理想情况下,我想将这些二进制文件复制到 ARM 设备并运行,make install这样我就不必手动将它们复制到目标目录中。但这意味着我必须从 Ubuntu 计算机复制整个构建环境,这似乎是在浪费时间和磁盘空间。或者我可以只收集二进制文件和适当的 Makefile 并复制它们,但这看起来很笨拙。

有没有更优雅的方式来利用make install目标架构?

make cross-compilation

5
推荐指数
1
解决办法
4341
查看次数

标签 统计

cross-compilation ×1

grep ×1

make ×1

shell-script ×1