只有一个.apk
,它在显示提示之前运行。要添加要运行的命令,典型的方法是:
PROMPT_COMMAND
问题是即使已添加PROMPT_COMMAND="my_command; $PROMPT_COMMAND"
,此行也会添加my_command
。我非常希望在更新它之后使用~/.bashrc
来源,而不是让事情中断或执行冗余。通过.bashrc
中的上述内容,PROMPT_COMMAND
扩展为mycommand; mycommand; mycommand; mycommand; ...
我的一个想法是根据;
拆分并重新组合:
PROMPT_COMMAND=$( echo "$PROMPT_COMMAND" | sed 's/^ *\(.*[^ ]\) *$/\1/' | sed 's/ *; */\n/g' | sed '/^$/d' | sort -u | tr '\n' ';' )
但是有些命令在字符串和子shell命令中包含;
,这会破坏上面的内容,因为引号,括号和转义字符会被忽略。如何干净地维护多个PROMPT_COMMAND
?
答案 0 :(得分:0)
此功能只有在PROMPT_COMMAND
不存在的情况下才会附加一些。
function prompt_command_push() {
if [[ "$PROMPT_COMMAND" != *"$@"* ]]; then
if [[ -n "$PROMPT_COMMAND" ]]; then
export PROMPT_COMMAND="$PROMPT_COMMAND;$@"
else
export PROMPT_COMMAND="$@"
fi
fi
}
prompt_command_push printf hello
prompt_command_push echo '\ world'
应该注意" $ @"作为字符串和转义序列的用法被解析两次。
此函数附加,而不是预先命令,以便最后执行最近的添加。
答案 1 :(得分:0)
我解决此问题的方法是创建 new 变量以保留原始 PROMPT_COMMAND
变量的副本。
将其放入~/.bashrc
文件中:
export ORIGINAL_PROMPT_COMMAND="${PROMPT_COMMAND}"
export PROMPT_COMMAND="my_command; ${ORIGINAL_PROMPT_COMMAND}"
这会导致您的my_command
只执行一次,并且原始PROMPT_COMMAND
将得到尊重。