Кажется, для этого нет встроенного -решения, но оказалось, что реализовать его вручную не так уж и сложно. Нужно хранить историю каждого сеанса отдельно и воссоздавать ее при каждом приглашении (это не так медленно, как может показаться ). Вот основная логика:
# 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
См. эту суть для полного решения, включая некоторые меры безопасности и оптимизацию производительности.
UID
определено не для всех оболочек (это не требование POSIX)
Вы можете использовать id -u
вместо:
#! /bin/sh
if [ "$(id -u)" != "0" ]
then
echo "Run as root"
exit
fi