Linux ps 命令导致AOSP编译失败

简介: Linux ps 命令导致AOSP编译失败

平台


Ubuntu 20.04


概述


下载了AOSP代码尝试编译, 谁料出师未捷…


$. build/envsetup.sh 
error: conflicting format options
Usage:
 ps [options]
 Try 'ps --help <simple|list|output|threads|misc|all>'
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.
For more details see ps(1).
WARNING: Only bash and zsh are supported.
Use of other shell would lead to erroneous results.


原因


这问题来得有点莫名奇妙, 从LOG上看是跟PS命令有关


function validate_current_shell() {
    local current_sh="$(ps -o command -p $$)"
    case "$current_sh" in
        *bash*)
            function check_type() { type -t "$1"; }
            ;;
        *zsh*)
            function check_type() { type "$1"; }
            enable_zsh_completion ;;
        *)
            echo -e "WARNING: Only bash and zsh are supported.\nUse of other shell would lead to erroneous results."
            ;;
    esac
}


导致这个问题, 是因为之前为了方便使用, 用alias重新定义了默认参数:

默认ps命令的输出结果:


$ ps
    PID TTY          TIME CMD
   7504 pts/1    00:00:01 bash
  49715 pts/1    00:00:00 ps


于是个修改了下ps命令:


alias ps='ps -la'


$ ps -la
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   125    1395    1393  0  80   0 - 116589 -     tty1     00:00:00 Xorg
0 S   125    1624    1393  0  80   0 -  1324 -      tty1     00:00:00 dbus-run-sessio
0 S   125    1625    1624  0  80   0 -  1882 -      tty1     00:00:00 dbus-daemon
0 S   125    1626    1624  0  80   0 - 140163 -     tty1     00:00:00 gnome-session-b
0 S   125    1630       1  0  80   0 - 76386 -      tty1     00:00:00 at-spi-bus-laun
0 S   125    1635    1630  0  80   0 -  1778 -      tty1     00:00:00 dbus-daemon
0 S   125    1659    1626  0  80   0 - 991315 -     tty1     00:00:03 gnome-shell
0 S   125    1674    1659  0  80   0 - 78491 -      tty1     00:00:00 ibus-daemon
0 S   125    1677    1674  0  80   0 - 59900 -      tty1     00:00:00 ibus-dconf
0 S   125    1680       1  0  80   0 - 47781 -      tty1     00:00:00 ibus-x11
0 S   125    1683       1  0  80   0 - 59895 -      tty1     00:00:00 ibus-portal
0 S   125    1693       1  0  80   0 - 40709 -      tty1     00:00:00 at-spi2-registr
0 S   125    1697       1  0  80   0 - 59668 -      tty1     00:00:00 xdg-permission-
0 S   125    1712       1  0  80   0 - 684168 -     tty1     00:00:00 gjs
0 S   125    1719    1626  0  80   0 - 116964 -     tty1     00:00:00 gsd-sharing
0 S   125    1720    1626  0  80   0 - 84554 -      tty1     00:00:00 gsd-wacom
0 S   125    1723    1626  0  80   0 - 162019 -     tty1     00:00:00 gsd-color
0 S   125    1725    1674  0  80   0 - 41443 -      tty1     00:00:00 ibus-engine-sim
0 S   125    1728    1626  0  80   0 - 103080 -     tty1     00:00:00 gsd-keyboard
0 S   125    1734    1626  0  80   0 - 62823 -      tty1     00:00:00 gsd-print-notif
0 S   125    1735    1626  0  80   0 - 115044 -     tty1     00:00:00 gsd-rfkill
0 S   125    1744    1626  0  80   0 - 79560 -      tty1     00:00:00 gsd-smartcard
0 S   125    1751    1626  0  80   0 - 94174 -      tty1     00:00:00 gsd-datetime
0 S   125    1752    1626  0  80   0 - 223603 -     tty1     00:00:00 gsd-media-keys
0 S   125    1755    1626  0  80   0 - 59646 -      tty1     00:00:00 gsd-screensaver
0 S   125    1756    1626  0  80   0 - 80607 -      tty1     00:00:00 gsd-sound
0 S   125    1757    1626  0  80   0 - 78184 -      tty1     00:00:00 gsd-a11y-settin
0 S   125    1758    1626  0  80   0 - 78700 -      tty1     00:00:09 gsd-housekeepin
0 S   125    1765    1626  0  80   0 - 103342 -     tty1     00:00:01 gsd-power
0 S   125    1800       1  0  80   0 - 86316 -      tty1     00:00:00 gsd-printer
4 S  1000    1966    1964  3  80   0 - 178161 ep_pol tty2    00:57:12 Xorg
0 S  1000    1976    1964  0  80   0 - 47829 poll_s tty2     00:00:00 gnome-session-b
4 R  1000   49731    7504  0  80   0 -  3623 -      pts/1    00:00:00 ps


回到问题本身:

在envsetup.sh中


local current_sh="$(ps -o command -p $$)"


正常情况下, current_sh的值应该是:


$ ps -o command -p $$
COMMAND
bash


$$ Shell本身的PID(ProcessID)


而修改后的命令执行结果是:


$ ps -la -o command -p $$
error: conflicting format options
Usage:
 ps [options]
 Try 'ps --help <simple|list|output|threads|misc|all>'
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.
For more details see ps(1).


解决的办法很简单, 在PS前, 加上:unalias ps


function validate_current_shell() {
  #取消alais
    unalias ps
    local current_sh="$(ps -o command -p $$)"
    case "$current_sh" in
        *bash*)
            function check_type() { type -t "$1"; }
            ;;
        *zsh*)
            function check_type() { type "$1"; }
            enable_zsh_completion ;;
        *)
            echo -e "WARNING: Only bash and zsh are supported.\nUse of other shell would lead to erroneous results."
            ;;
    esac
}


当然, 最好能判断是否已经重定义了PS, 否则会出现:


$ . build/envsetup.sh 
bash: unalias: ps: not found


于是, 稍微修改下:


function validate_current_shell() {
  #取消alais
    if [[ $(type -t ps) == "alias" ]]; then
        unalias ps
    fi
    local current_sh="$(ps -o command -p $$)"
    case "$current_sh" in
        *bash*)
            function check_type() { type -t "$1"; }
            ;;
        *zsh*)
            function check_type() { type "$1"; }
            enable_zsh_completion ;;
        *)
            echo -e "WARNING: Only bash and zsh are supported.\nUse of other shell would lead to erroneous results."
            ;;
    esac
}


参考


alias

Shell脚本中0 、 0、0、?、! 、 !、!、、 、、*、KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲、@等的意义

shell command命令

-bash: unalias: ls: not found


相关文章
|
6天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
24 3
|
6天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
19 2
|
6天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
24 3
|
9天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
35 6
|
10天前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
22 7
|
11天前
|
监控 Linux
Linux常用命令-2
本文继续介绍Linux常用命令,涵盖目录操作、文件操作、系统信息和进程管理等类别。具体包括mkdir、rmdir、cp、mv、rm、touch、whereis、whatis、dmesg、free、date、cal、ps、kill、killall和top等命令的使用方法和常用参数。
41 7
|
10天前
|
监控 Linux Perl
Linux 命令小技巧:显示文件指定行的内容
在 Linux 系统中,处理文本文件是一项常见任务。本文介绍了如何使用 head、tail、sed 和 awk 等命令快速显示文件中的指定行内容,帮助你高效处理文本文件。通过实际应用场景和案例分析,展示了这些命令在代码审查、日志分析和文本处理中的具体用途。同时,还提供了注意事项和技巧,帮助你更好地掌握这些命令。
24 4
|
9天前
|
缓存 网络协议 Linux
Linux ip命令常用操作
Linux的 `ip`命令是一个强大且灵活的网络管理工具,能够执行从基本的网络接口配置到高级的路由和VLAN管理等多种操作。通过熟练掌握这些常用操作,用户可以更加高效地管理和配置Linux系统的网络环境。无论是在日常管理还是故障排除中,`ip`命令都是必不可少的工具。
11 2
|
10天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
29 3
|
11天前
|
Linux Shell
Linux常用命令-1
本课程要求学生熟悉Linux系统终端窗口和命令基础,掌握文件目录类、系统信息类、进程管理类及其他常用命令,学时为3-6小时。课程内容涵盖Linux命令的特点、常见命令的使用方法及其应用场景,如文件浏览、目录切换、内容显示等。建议学生逐个操作命令并及时反馈问题。
41 5