![历史 -a 在 bash 中不起作用](https://linux22.com/image/12096/%E5%8E%86%E5%8F%B2%20-a%20%E5%9C%A8%20bash%20%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
难道我做错了什么?我想我正在按照手册页中的说明进行操作,但它没有任何效果。
[501] $ history | tail
492 echo 3
493 echo 4
494 echo 5
495 echo 6
496 echo 7
497 echo 8
498 echo 9
499 echo 10
500 PS1='[\!] \$ '
501 history | tail
[502] $ tail ~/.bash_history
echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
[503] $ history -a
[504] $ tail ~/.bash_history
echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
[505] $ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
[506] $
tail ~/.bash_history
第二次命令的输出不应该有所不同吗?
答案1
看来这是苹果特有的东西。 (我使用的是 Mac OS 10.11.6 El Capitan。)
我的HISTFILE
价值观是直接原因:
[512] $ echo $HISTFILE
/Users/Wildcard/.bash_sessions/8BC6B122-0D74-445B-B6A0-7D4D446598CB.historynew
但由于我没有设置该变量,那么它在哪里设置呢?
啊哈,它在/etc/bashrc_Apple_Terminal
.从那里的评论来看,看起来我只是遇到了这个,因为我history -a
自己尝试过,没有设置过shopt -s histappend
。他们对其进行了编码,以便如果您打开 histappend 或设置 HISTTIMEFORMAT 变量,他们会跳过会话恢复支持代码。
这是该部分的内联文档:
# Resume Support: Save/Restore Shell State
#
# Terminal assigns each terminal session a unique identifier and
# communicates it via the TERM_SESSION_ID environment variable so that
# programs running in a terminal can save/restore application-specific
# state when quitting and restarting Terminal with Resume enabled.
#
# The following code defines a shell save/restore mechanism. Users can
# add custom state by defining a shell_session_save_user_state function
# that writes restoration commands to the session file at exit. e.g.,
# to save a variable:
#
# shell_session_save_user_state() { echo MY_VAR="'$MY_VAR'" >> "$SHELL_SESSION_FILE"; }
#
# During shell startup the session file is executed. Old files are
# periodically deleted.
#
# The default behavior arranges to save and restore the bash command
# history independently for each restored terminal session. It also
# merges commands into the global history for new sessions. Because
# of this it is recommended that you set HISTSIZE and HISTFILESIZE to
# larger values.
#
# You may disable this behavior and share a single history by setting
# SHELL_SESSION_HISTORY to 0. There are some common user customizations
# that arrange to share new commands among running shells by
# manipulating the history at each prompt, and they typically include
# 'shopt -s histappend'; therefore, if the histappend shell option is
# enabled, per-session history is disabled by default. You may
# explicitly enable it by setting SHELL_SESSION_HISTORY to 1.
#
# The implementation of per-session command histories in combination
# with a shared global command history is incompatible with the
# HISTTIMEFORMAT variable--the timestamps are applied inconsistently
# to different parts of the history; therefore, if HISTTIMEFORMAT is
# defined, per-session history is disabled by default.
#
# Note that this uses PROMPT_COMMAND to enable per-session history
# the first time for each new session. If you customize PROMPT_COMMAND
# be sure to include the previous value. e.g.,
#
# PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"
#
# Otherwise, the per-session history won't take effect until the first
# restore.
#
# The save/restore mechanism is disabled if the following file exists:
#
# ~/.bash_sessions_disable