Возможно, я немного опоздал с этим постом... но для тех, кому он покажется полезным, я вставил весь .bashrc
файл из ParrotOS сюда .
Это та часть, которая вас интересует:
if [ "$color_prompt" = yes ]; then
PS1="\[\033[0;31m\]\342\224\214\342\224\200\$([[ \$? != 0 ]] && echo \"[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200\")[$(if [[ ${EUID} == 0 ]]; then echo '\[\033[01;31m\]root\[\033[01;33m\]@\[\033[01;96m\]\h'; else echo '\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h'; fi)\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\\$\[\e[0m\]"
else
PS1='┌──[\u@\h]─[\w]\n└──╼ \$ '
fi
Функция $((math expression))
является функцией POSIX и поддерживается всеми современными оболочками, совместимыми с POSIX.
POSIX, однако, не стандартизирует имена путей, и по этой причине POSIX называет его неуказанным, что происходит, когда вы вызываете/bin/sh
Вот почему POSIX не стандартизировал #! /bin/sh
ни...
Существуют версии UNIX, которые предлагают старую оболочку Bourne, если вы вызываете /bin/sh
. Все версии Solaris до Solaris -10 поставляются со старой оболочкой Bourne Shell в /bin/sh
, которая не поддерживает $((math expression))
. Эти версии Solaris по-прежнему сертифицированы на соответствие POSIX. Существуют и другие операционные системы с другими типами оболочки (POSIX или без -POSIX ).
Linux, например. обычно идет с bash
или dash
в /bin/sh
. dash
обеспечивает только базовую совместимость с POSIX, чего недостаточно для платформы POSIX, которую разрешено называть UNIX , поскольку она не поддерживает многобайтовые символы. bash
в Linux также не полностью совместим с UNIX системой, так как (в Linux )он скомпилирован таким образом, что по умолчанию используется несовместимый с -echo
встроенный модуль..
Кстати, :если вы хотите получить POSIX-совместимую оболочку на сертифицированной POSIX платформе, вам нужно позвонить:
PATH=`getconf PATH`
export PATH
sh
Это работает, потому что getconf PATH
требуется для возврата настройки PATH, в которой POSIX-совместимые варианты программ находятся первыми.
Другими словами, :если у вас есть сценарий оболочки, начинающийся с #!/bin/sh
, не гарантируется, что $((math expression))
будет работать. Что на самом деле происходит, зависит от платформы, на которой вы его запускаете. Даже если оболочка совместима с POSIX, для работы требуются только основные математические выражения языка C. $((i++))
.не разрешено работать с оболочкой, сертифицированной на соответствие POSIX.
Какая оболочка на самом деле находится в определенном пути, можно проверить, запустив:
$shell whatshell.sh
получить whatshell.sh
изhttps://www.in-ulm.de/~mascheck/various/whatshell/