Способ написания условных операторов, совместимый с POSIX

Кажется, для этого нет встроенного -решения, но оказалось, что реализовать его вручную не так уж и сложно. Нужно хранить историю каждого сеанса отдельно и воссоздавать ее при каждом приглашении (это не так медленно, как может показаться ). Вот основная логика:

# on every prompt, save new history to dedicated file and recreate full history
# by reading all files, always keeping history from current session on top.
update_history () {
  history -a ${HISTFILE}.$$
  history -c
  history -r
  for f in `ls ${HISTFILE}.[0-9]* | grep -v "${HISTFILE}.$$\$"`; do
    history -r $f
  done
  history -r "${HISTFILE}.$$"
}
export PROMPT_COMMAND='update_history'

# merge session history into main history file on bash exit
merge_session_history () {
  cat ${HISTFILE}.$$ >> $HISTFILE
  rm ${HISTFILE}.$$
}
trap merge_session_history EXIT

См. эту суть для полного решения, включая некоторые меры безопасности и оптимизацию производительности.

1
14.01.2020, 12:32
1 ответ

UID определено не для всех оболочек (это не требование POSIX)

Вы можете использовать id -uвместо:

#! /bin/sh

if [ "$(id -u)" != "0" ]
then
    echo "Run as root"
    exit
fi
2
28.04.2021, 23:25

Теги

Похожие вопросы