mirror of https://github.com/n-hys/bash.git
159 lines
2.9 KiB
Plaintext
159 lines
2.9 KiB
Plaintext
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
LC_ALL=C
|
|
LANG=C
|
|
trap 'rm $TMPDIR/newhistory' 0
|
|
|
|
file=bax
|
|
histchars='!^#' # make sure history comment char is set correctly
|
|
|
|
unset HISTFILESIZE HISTTIMEFORMAT
|
|
|
|
history -c
|
|
|
|
HISTFILE=history.list
|
|
HISTCONTROL=ignoreboth
|
|
HISTIGNORE='&:#*:history*:fc*'
|
|
# we will end up exercising the history stifling code as a result
|
|
HISTSIZE=32
|
|
|
|
shopt -s cmdhist
|
|
set -o history
|
|
|
|
history -p '!!'
|
|
|
|
# this should result in a failed history expansion error
|
|
history -p '!!:z'
|
|
|
|
history
|
|
|
|
HISTFILE=$TMPDIR/newhistory
|
|
history -a
|
|
|
|
history -w
|
|
|
|
history -s "echo line 2 for history"
|
|
history
|
|
history -p '!e'
|
|
history -p '!!'
|
|
|
|
set -H
|
|
!!
|
|
!e
|
|
|
|
history
|
|
|
|
echo a b c d e
|
|
!?ch?
|
|
!-2
|
|
^2^8
|
|
|
|
!2
|
|
|
|
# we're selecting /bin/sh -c ...; we want `sh'
|
|
echo !-1:0:t
|
|
# we're selecting /bin/sh -c ...; we want `/bin'
|
|
echo !-2:0:h
|
|
# we're selecting `echo a b c d e'; we want `e'
|
|
echo !?d?:5
|
|
|
|
echo a b c d e
|
|
echo !-1:2-$
|
|
echo !-2:2-4
|
|
echo !-2:3*
|
|
echo !!:*
|
|
|
|
echo !?a?:2-
|
|
|
|
echo file.c
|
|
echo !!:$:r
|
|
echo !-2:$:e
|
|
echo !-3:$:r:q
|
|
|
|
echo $file.c
|
|
echo !!:$:r
|
|
echo !-2:^:e
|
|
echo !-3:$:r:q
|
|
|
|
echo a b c d e
|
|
echo !!:1-$:x
|
|
echo !-2:1-$:q
|
|
|
|
echo foo.c foo.o foo.html foo.h
|
|
!!:s/foo/bar/
|
|
!-2:gs/foo/bar/
|
|
!!:gs/bar/x&/
|
|
!-2:g&
|
|
|
|
# make sure we can use any delimiter in the substitution, not just `/'
|
|
!!:gs+bar+whix+
|
|
|
|
!!:p
|
|
|
|
# wow
|
|
echo !?.o?:%:r:q
|
|
|
|
!!:0 !?.h?:%:q
|
|
!!:-$
|
|
!:-$
|
|
|
|
history
|
|
|
|
# make sure single quotes inhibit history expansion
|
|
echo '!!'
|
|
|
|
# make sure backslashes can quote the history expansion character
|
|
echo \!\!
|
|
|
|
# but other expansions on the line should still be processed
|
|
|
|
echo '!!' !!:*
|
|
history -c
|
|
unset HISTFILE
|
|
|
|
# make sure that the special bash cases are not history expanded
|
|
case p in
|
|
[!A-Z]) echo ok 1;;
|
|
esac
|
|
|
|
var1='ok 2'
|
|
var2=var1
|
|
|
|
echo ${!var2}
|
|
|
|
# Bash-2.01[.1] fails this test -- it attempts history expansion after the
|
|
# history_comment_char
|
|
echo ok 3 # !1200
|
|
|
|
# bash versions through bash-4.3 fail this; they make the digit preceding the
|
|
# > into a separate word, changing the meaning of the redirection
|
|
shopt a b c d 2>/dev/null
|
|
echo !shopt-1
|
|
|
|
echo !shopt*
|
|
|
|
# make sure a :p modifier anywhere on the line affects all history expansions
|
|
echo one two three four
|
|
echo !:2:p ; echo !$
|
|
echo one two three four
|
|
echo !$ ; echo !:2:p
|
|
|
|
${THIS_SH} ./histexp1.sub
|
|
${THIS_SH} ./histexp2.sub
|
|
${THIS_SH} ./histexp3.sub
|
|
${THIS_SH} ./histexp4.sub
|
|
${THIS_SH} ./histexp5.sub
|
|
${THIS_SH} ./histexp6.sub
|
|
${THIS_SH} ./histexp7.sub
|