平台
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