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