1*b30d1939SAndy Fiddaman######################################################################## 2*b30d1939SAndy Fiddaman# # 3*b30d1939SAndy Fiddaman# This software is part of the ast package # 4*b30d1939SAndy Fiddaman# Copyright (c) 1982-2012 AT&T Intellectual Property # 5*b30d1939SAndy Fiddaman# and is licensed under the # 6*b30d1939SAndy Fiddaman# Eclipse Public License, Version 1.0 # 7*b30d1939SAndy Fiddaman# by AT&T Intellectual Property # 8*b30d1939SAndy Fiddaman# # 9*b30d1939SAndy Fiddaman# A copy of the License is available at # 10*b30d1939SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11*b30d1939SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12*b30d1939SAndy Fiddaman# # 13*b30d1939SAndy Fiddaman# Information and Software Systems Research # 14*b30d1939SAndy Fiddaman# AT&T Research # 15*b30d1939SAndy Fiddaman# Florham Park NJ # 16*b30d1939SAndy Fiddaman# # 17*b30d1939SAndy Fiddaman# David Korn <dgk@research.att.com> # 18*b30d1939SAndy Fiddaman# # 19*b30d1939SAndy Fiddaman######################################################################## 20*b30d1939SAndy Fiddaman: : generated by mkptytests from "posix-sh-*-c.pty" : : 21*b30d1939SAndy Fiddaman 22*b30d1939SAndy Fiddaman# the trickiest part of the tests is avoiding typeahead 23*b30d1939SAndy Fiddaman# in the pty dialogue 24*b30d1939SAndy Fiddaman 25*b30d1939SAndy Fiddamanfunction err_exit 26*b30d1939SAndy Fiddaman{ 27*b30d1939SAndy Fiddaman print -u2 -n "\t" 28*b30d1939SAndy Fiddaman print -u2 -r ${Command}[$1]: "${@:2}" 29*b30d1939SAndy Fiddaman (( Errors++ )) 30*b30d1939SAndy Fiddaman} 31*b30d1939SAndy Fiddaman 32*b30d1939SAndy Fiddamanalias err_exit='err_exit $lineno' 33*b30d1939SAndy Fiddaman 34*b30d1939SAndy FiddamanCommand=${0##*/} 35*b30d1939SAndy Fiddamaninteger Errors=0 lineno=1 36*b30d1939SAndy Fiddaman 37*b30d1939SAndy Fiddamanwhence -q pty || { lineno=$LINENO; err_exit "pty command not found -- tests skipped"; exit 0; } 38*b30d1939SAndy Fiddaman 39*b30d1939SAndy Fiddamanbintrue=$(whence -p true) 40*b30d1939SAndy Fiddaman 41*b30d1939SAndy Fiddamanx=$( $SHELL <<- \EOF 42*b30d1939SAndy Fiddaman trap 'exit 0' EXIT 43*b30d1939SAndy Fiddaman bintrue=$(whence -p true) 44*b30d1939SAndy Fiddaman set -o monitor 45*b30d1939SAndy Fiddaman { 46*b30d1939SAndy Fiddaman eval $'set -o vi\npty $bintrue' 47*b30d1939SAndy Fiddaman } < /dev/null & pid=$! 48*b30d1939SAndy Fiddaman #sleep 1 49*b30d1939SAndy Fiddaman jobs 50*b30d1939SAndy Fiddaman kill $$ 51*b30d1939SAndy Fiddaman EOF 52*b30d1939SAndy Fiddaman) 53*b30d1939SAndy Fiddaman[[ $x == *Stop* ]] && err_exit 'monitor mode enabled incorrectly causes job to stop' 54*b30d1939SAndy Fiddaman 55*b30d1939SAndy Fiddamanif [[ -o xtrace ]] 56*b30d1939SAndy Fiddamanthen debug=--debug=1 57*b30d1939SAndy Fiddamanelse debug= 58*b30d1939SAndy Fiddamanfi 59*b30d1939SAndy Fiddaman 60*b30d1939SAndy Fiddamanfunction tst 61*b30d1939SAndy Fiddaman{ 62*b30d1939SAndy Fiddaman integer lineno=$1 offset 63*b30d1939SAndy Fiddaman typeset text 64*b30d1939SAndy Fiddaman 65*b30d1939SAndy Fiddaman pty $debug --dialogue --messages='/dev/fd/1' $SHELL | 66*b30d1939SAndy Fiddaman while read -r text 67*b30d1939SAndy Fiddaman do if [[ $text == *debug* ]] 68*b30d1939SAndy Fiddaman then print -u2 -r -- "$text" 69*b30d1939SAndy Fiddaman else offset=${text/*: line +([[:digit:]]):*/\1} 70*b30d1939SAndy Fiddaman err_exit "${text/: line $offset:/: line $(( lineno + offset)):}" 71*b30d1939SAndy Fiddaman fi 72*b30d1939SAndy Fiddaman done 73*b30d1939SAndy Fiddaman} 74*b30d1939SAndy Fiddaman 75*b30d1939SAndy Fiddamanexport PS1=':test-!: ' PS2='> ' PS4=': ' ENV= EXINIT= HISTFILE= TERM=dumb VISUAL=vi LC_ALL=C 76*b30d1939SAndy Fiddaman 77*b30d1939SAndy Fiddamanif ! pty $bintrue < /dev/null 78*b30d1939SAndy Fiddamanthen err_exit pty command hangs on $bintrue -- tests skipped 79*b30d1939SAndy Fiddaman exit 0 80*b30d1939SAndy Fiddamanfi 81*b30d1939SAndy Fiddaman 82*b30d1939SAndy Fiddaman# err_exit # 83*b30d1939SAndy Fiddamantst $LINENO <<"!" 84*b30d1939SAndy FiddamanL POSIX sh 026(C) 85*b30d1939SAndy Fiddaman 86*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported: When the 87*b30d1939SAndy Fiddaman# POSIX locale is specified and a background job is suspended by a 88*b30d1939SAndy Fiddaman# SIGTSTP signal then the <state> field in the output message is set to 89*b30d1939SAndy Fiddaman# Stopped, Suspended, Stopped(SIGTSTP) or Suspended(SIGTSTP). 90*b30d1939SAndy Fiddaman 91*b30d1939SAndy FiddamanI ^\r?\n$ 92*b30d1939SAndy Fiddamanp :test-1: 93*b30d1939SAndy Fiddamanw sleep 60 & 94*b30d1939SAndy Fiddamanu [[:digit:]]\r?\n$ 95*b30d1939SAndy Fiddamans 100 96*b30d1939SAndy Fiddamanp :test-2: 97*b30d1939SAndy Fiddamanw kill -TSTP $! 98*b30d1939SAndy Fiddamanu (Stopped|Suspended) 99*b30d1939SAndy Fiddamanp :test-3: 100*b30d1939SAndy Fiddamanw kill -KILL $! 101*b30d1939SAndy Fiddamanw wait 102*b30d1939SAndy Fiddamanu (Killed|Done) 103*b30d1939SAndy Fiddaman! 104*b30d1939SAndy Fiddaman 105*b30d1939SAndy Fiddaman# err_exit # 106*b30d1939SAndy Fiddamantst $LINENO <<"!" 107*b30d1939SAndy FiddamanL POSIX sh 028(C) 108*b30d1939SAndy Fiddaman 109*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported: When the 110*b30d1939SAndy Fiddaman# POSIX locale is specified and a background job is suspended by a 111*b30d1939SAndy Fiddaman# SIGTTIN signal then the <state> field in the output message is set to 112*b30d1939SAndy Fiddaman# Stopped(SIGTTIN) or Suspended(SIGTTIN). 113*b30d1939SAndy Fiddaman 114*b30d1939SAndy FiddamanI ^\r?\n$ 115*b30d1939SAndy Fiddamanp :test-1: 116*b30d1939SAndy Fiddamanw sleep 60 & 117*b30d1939SAndy Fiddamanu [[:digit:]]\r?\n$ 118*b30d1939SAndy Fiddamans 100 119*b30d1939SAndy Fiddamanp :test-2: 120*b30d1939SAndy Fiddamanw kill -TTIN $! 121*b30d1939SAndy Fiddamanu (Stopped|Suspended) \(SIGTTIN\) 122*b30d1939SAndy Fiddamanp :test-3: 123*b30d1939SAndy Fiddamanw kill -KILL $! 124*b30d1939SAndy Fiddamanw wait 125*b30d1939SAndy Fiddamanu (Killed|Done) 126*b30d1939SAndy Fiddaman! 127*b30d1939SAndy Fiddaman 128*b30d1939SAndy Fiddaman# err_exit # 129*b30d1939SAndy Fiddamantst $LINENO <<"!" 130*b30d1939SAndy FiddamanL POSIX sh 029(C) 131*b30d1939SAndy Fiddaman 132*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported: When the 133*b30d1939SAndy Fiddaman# POSIX locale is specified and a background job is suspended by a 134*b30d1939SAndy Fiddaman# SIGTTOU signal then the <state> field in the output message is set to 135*b30d1939SAndy Fiddaman# Stopped(SIGTTOU) or Suspended(SIGTTOU). 136*b30d1939SAndy Fiddaman 137*b30d1939SAndy FiddamanI ^\r?\n$ 138*b30d1939SAndy Fiddamanp :test-1: 139*b30d1939SAndy Fiddamanw sleep 60 & 140*b30d1939SAndy Fiddamanu [[:digit:]]\r?\n$ 141*b30d1939SAndy Fiddamans 100 142*b30d1939SAndy Fiddamanp :test-2: 143*b30d1939SAndy Fiddamanw kill -TTOU $! 144*b30d1939SAndy Fiddamanu (Stopped|Suspended) \(SIGTTOU\) 145*b30d1939SAndy Fiddamanp :test-3: 146*b30d1939SAndy Fiddamanw kill -KILL $! 147*b30d1939SAndy Fiddamanw wait 148*b30d1939SAndy Fiddamanu (Killed|Done) 149*b30d1939SAndy Fiddaman! 150*b30d1939SAndy Fiddaman 151*b30d1939SAndy Fiddaman# err_exit # 152*b30d1939SAndy Fiddamantst $LINENO <<"!" 153*b30d1939SAndy FiddamanL POSIX sh 091(C) 154*b30d1939SAndy Fiddaman 155*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 156*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode an entered 157*b30d1939SAndy Fiddaman# character other than <newline>, erase, interrupt, kill, control-V, 158*b30d1939SAndy Fiddaman# control-W, backslash \ (followed by erase or kill), end-of-file and 159*b30d1939SAndy Fiddaman# <ESC> is inserted in the current command line. 160*b30d1939SAndy Fiddaman 161*b30d1939SAndy Fiddamanc echo h 162*b30d1939SAndy Fiddamanc ell 163*b30d1939SAndy Fiddamanw o 164*b30d1939SAndy Fiddamanu ^hello\r?\n$ 165*b30d1939SAndy Fiddaman! 166*b30d1939SAndy Fiddaman 167*b30d1939SAndy Fiddaman# err_exit # 168*b30d1939SAndy Fiddamantst $LINENO <<"!" 169*b30d1939SAndy FiddamanL POSIX sh 093(C) 170*b30d1939SAndy Fiddaman 171*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 172*b30d1939SAndy Fiddaman# command line editing is supported: After termination of a previous 173*b30d1939SAndy Fiddaman# command, sh is entered in insert mode. 174*b30d1939SAndy Fiddaman 175*b30d1939SAndy Fiddamanw echo hello 176*b30d1939SAndy Fiddamanu ^hello\r?\n$ 177*b30d1939SAndy Fiddamanc echo goo 178*b30d1939SAndy Fiddamanc dby 179*b30d1939SAndy Fiddamanw e 180*b30d1939SAndy Fiddamanu ^goodbye\r?\n$ 181*b30d1939SAndy Fiddaman! 182*b30d1939SAndy Fiddaman 183*b30d1939SAndy Fiddaman# err_exit # 184*b30d1939SAndy Fiddamantst $LINENO <<"!" 185*b30d1939SAndy FiddamanL POSIX sh 094(C) 186*b30d1939SAndy Fiddaman 187*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 188*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode an <ESC> 189*b30d1939SAndy Fiddaman# switches sh into command mode. 190*b30d1939SAndy Fiddaman 191*b30d1939SAndy Fiddamanc echo he\E 192*b30d1939SAndy Fiddamans 400 193*b30d1939SAndy Fiddamanw allo 194*b30d1939SAndy Fiddamanu ^hello\r?\n$ 195*b30d1939SAndy Fiddaman! 196*b30d1939SAndy Fiddaman 197*b30d1939SAndy Fiddaman# err_exit # 198*b30d1939SAndy Fiddamantst $LINENO <<"!" 199*b30d1939SAndy FiddamanL POSIX sh 096(C) 200*b30d1939SAndy Fiddaman 201*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 202*b30d1939SAndy Fiddaman# command line editing is supported: When in command mode the 203*b30d1939SAndy Fiddaman# interrupt character causes sh to terminate command line editing on 204*b30d1939SAndy Fiddaman# the current command line, re-issue the prompt on the next line of the 205*b30d1939SAndy Fiddaman# terminal and to reset the command history so that the command that 206*b30d1939SAndy Fiddaman# was interrupted is not entered in the history. 207*b30d1939SAndy Fiddaman 208*b30d1939SAndy FiddamanI ^\r?\n$ 209*b30d1939SAndy Fiddamanp :test-1: 210*b30d1939SAndy Fiddamanw echo first 211*b30d1939SAndy Fiddamanp :test-2: 212*b30d1939SAndy Fiddamanw stty intr ^C 213*b30d1939SAndy Fiddamanp :test-3: 214*b30d1939SAndy Fiddamanc echo bad\E 215*b30d1939SAndy Fiddamans 400 216*b30d1939SAndy Fiddamanc \cC 217*b30d1939SAndy Fiddamanw echo scrambled 218*b30d1939SAndy Fiddamanp :test-4: 219*b30d1939SAndy Fiddamanw history 220*b30d1939SAndy Fiddamanu echo first 221*b30d1939SAndy Fiddamanr stty intr \^C 222*b30d1939SAndy Fiddamanr echo 223*b30d1939SAndy Fiddamanr history 224*b30d1939SAndy Fiddaman! 225*b30d1939SAndy Fiddaman 226*b30d1939SAndy Fiddaman# err_exit # 227*b30d1939SAndy Fiddamantst $LINENO <<"!" 228*b30d1939SAndy FiddamanL POSIX sh 097(C) 229*b30d1939SAndy Fiddaman 230*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 231*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode a <newline> 232*b30d1939SAndy Fiddaman# causes the current command line to be executed. 233*b30d1939SAndy Fiddaman 234*b30d1939SAndy Fiddamanc echo ok\n 235*b30d1939SAndy Fiddamanu ^ok\r?\n$ 236*b30d1939SAndy Fiddaman! 237*b30d1939SAndy Fiddaman 238*b30d1939SAndy Fiddaman# err_exit # 239*b30d1939SAndy Fiddamantst $LINENO <<"!" 240*b30d1939SAndy FiddamanL POSIX sh 099(C) 241*b30d1939SAndy Fiddaman 242*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 243*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode the interrupt 244*b30d1939SAndy Fiddaman# character causes sh to terminate command line editing on the current 245*b30d1939SAndy Fiddaman# command line, re-issue the prompt on the next line of the terminal 246*b30d1939SAndy Fiddaman# and to reset the command history so that the command that was 247*b30d1939SAndy Fiddaman# interrupted is not entered in the history. 248*b30d1939SAndy Fiddaman 249*b30d1939SAndy FiddamanI ^\r?\n$ 250*b30d1939SAndy Fiddamanp :test-1: 251*b30d1939SAndy Fiddamanw echo first 252*b30d1939SAndy Fiddamanu ^first 253*b30d1939SAndy Fiddamanp :test-2: 254*b30d1939SAndy Fiddamanw stty intr ^C 255*b30d1939SAndy Fiddamanr 256*b30d1939SAndy Fiddamanp :test-3: 257*b30d1939SAndy Fiddamanc echo bad\cC 258*b30d1939SAndy Fiddamanw echo last 259*b30d1939SAndy Fiddamanp :test-4: 260*b30d1939SAndy Fiddamanw history 261*b30d1939SAndy Fiddamanu echo first 262*b30d1939SAndy Fiddamanr stty intr \^C 263*b30d1939SAndy Fiddamanr echo last 264*b30d1939SAndy Fiddamanr history 265*b30d1939SAndy Fiddaman! 266*b30d1939SAndy Fiddaman 267*b30d1939SAndy Fiddaman# err_exit # 268*b30d1939SAndy Fiddamantst $LINENO <<"!" 269*b30d1939SAndy FiddamanL POSIX sh 100(C) 270*b30d1939SAndy Fiddaman 271*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 272*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode the kill 273*b30d1939SAndy Fiddaman# character clears all the characters from the input line. 274*b30d1939SAndy Fiddaman 275*b30d1939SAndy Fiddamanp :test-1: 276*b30d1939SAndy Fiddamanw stty kill ^X 277*b30d1939SAndy Fiddamanp :test-2: 278*b30d1939SAndy Fiddamanc echo bad\cX 279*b30d1939SAndy Fiddamanw echo ok 280*b30d1939SAndy Fiddamanu ^ok\r?\n$ 281*b30d1939SAndy Fiddaman! 282*b30d1939SAndy Fiddaman 283*b30d1939SAndy Fiddaman# err_exit # 284*b30d1939SAndy Fiddamantst $LINENO <<"!" 285*b30d1939SAndy FiddamanL POSIX sh 101(C) 286*b30d1939SAndy Fiddaman 287*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 288*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode a control-V 289*b30d1939SAndy Fiddaman# causes the next character to be inserted even in the case that the 290*b30d1939SAndy Fiddaman# character is a special insert mode character. 291*b30d1939SAndy Fiddaman# Testing Requirements: The assertion must be tested with at least the 292*b30d1939SAndy Fiddaman# following set of characters: <newline>, erase, interrupt, kill, 293*b30d1939SAndy Fiddaman# control-V, control-W, end-of-file, backslash \ (followed by erase or 294*b30d1939SAndy Fiddaman# kill) and <ESC>. 295*b30d1939SAndy Fiddaman 296*b30d1939SAndy Fiddamand 10 297*b30d1939SAndy Fiddamanp :test-1: 298*b30d1939SAndy Fiddamanw stty erase ^H intr ^C kill ^X 299*b30d1939SAndy Fiddamanp :test-2: 300*b30d1939SAndy Fiddamanw echo erase=:\cV\cH: 301*b30d1939SAndy Fiddamanu ^erase=:\r?\n$ 302*b30d1939SAndy Fiddamanp :test-3: 303*b30d1939SAndy Fiddamanw echo kill=:\cV\cX: 304*b30d1939SAndy Fiddamanu ^kill=:\cX:\r?\n$ 305*b30d1939SAndy Fiddamanp :test-4: 306*b30d1939SAndy Fiddamanw echo control-V=:\cV\cV: 307*b30d1939SAndy Fiddamanu ^control-V=:\cV:\r?\n$ 308*b30d1939SAndy Fiddamanp :test-5: 309*b30d1939SAndy Fiddamanw echo control-W:\cV\cW: 310*b30d1939SAndy Fiddamanu ^control-W:\cW:\r?\n$ 311*b30d1939SAndy Fiddamanp :test-6: 312*b30d1939SAndy Fiddamanw echo EOF=:\cV\cD: 313*b30d1939SAndy Fiddamanu ^EOF=:\004:\r?\n$ 314*b30d1939SAndy Fiddamanp :test-7: 315*b30d1939SAndy Fiddamanw echo backslash-erase=:\\\cH: 316*b30d1939SAndy Fiddamanu ^backslash-erase=:\r?\n$ 317*b30d1939SAndy Fiddamanp :test-8: 318*b30d1939SAndy Fiddamanw echo backslash-kill=:\\\cX: 319*b30d1939SAndy Fiddamanu ^backslash-kill=:\cX:\r?\n$ 320*b30d1939SAndy Fiddamanp :test-9: 321*b30d1939SAndy Fiddamanw echo ESC=:\cV\E: 322*b30d1939SAndy Fiddamanu ^ESC=:\E:\r?\n$ 323*b30d1939SAndy Fiddamanp :test-10: 324*b30d1939SAndy Fiddamanw echo interrupt=:\cV\cC: 325*b30d1939SAndy Fiddamanu ^interrupt=:\cC:\r?\n$ 326*b30d1939SAndy Fiddaman! 327*b30d1939SAndy Fiddaman 328*b30d1939SAndy Fiddaman# err_exit # 329*b30d1939SAndy Fiddamantst $LINENO <<"!" 330*b30d1939SAndy FiddamanL POSIX sh 104(C) 331*b30d1939SAndy Fiddaman 332*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 333*b30d1939SAndy Fiddaman# command line editing is supported: When in insert mode an 334*b30d1939SAndy Fiddaman# end-of-file at the beginning of an input line is interpreted as the 335*b30d1939SAndy Fiddaman# end of input. 336*b30d1939SAndy Fiddaman 337*b30d1939SAndy Fiddamanp :test-1: 338*b30d1939SAndy Fiddamanw trap 'echo done >&2' EXIT 339*b30d1939SAndy Fiddamanp :test-2: 340*b30d1939SAndy Fiddamans 100 341*b30d1939SAndy Fiddamanc \cD 342*b30d1939SAndy Fiddamanu ^done\r?\n$ 343*b30d1939SAndy Fiddaman! 344*b30d1939SAndy Fiddaman 345*b30d1939SAndy Fiddaman# err_exit # 346*b30d1939SAndy Fiddamantst $LINENO <<"!" 347*b30d1939SAndy FiddamanL POSIX sh 111(C) 348*b30d1939SAndy Fiddaman 349*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 350*b30d1939SAndy Fiddaman# command line editing is supported: When in command mode, # inserts 351*b30d1939SAndy Fiddaman# the character # at the beginning of the command line and causes the 352*b30d1939SAndy Fiddaman# line to be treated as a comment and the line is entered in the 353*b30d1939SAndy Fiddaman# command history. 354*b30d1939SAndy Fiddaman 355*b30d1939SAndy Fiddamanp :test-1: 356*b30d1939SAndy Fiddamanc echo save\E 357*b30d1939SAndy Fiddamans 400 358*b30d1939SAndy Fiddamanc # 359*b30d1939SAndy Fiddamanp :test-2: 360*b30d1939SAndy Fiddamanw history 361*b30d1939SAndy Fiddamanu #echo save 362*b30d1939SAndy Fiddamanr history 363*b30d1939SAndy Fiddaman! 364*b30d1939SAndy Fiddaman 365*b30d1939SAndy Fiddaman# err_exit # 366*b30d1939SAndy Fiddamantst $LINENO <<"!" 367*b30d1939SAndy FiddamanL POSIX sh 137(C) 368*b30d1939SAndy Fiddaman 369*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 370*b30d1939SAndy Fiddaman# command line editing is supported: When in command mode, then v 371*b30d1939SAndy Fiddaman# invokes the vi editor to edit the current command line in a temporary 372*b30d1939SAndy Fiddaman# file. When the editor exits, the commands in the temporary file are 373*b30d1939SAndy Fiddaman# executed. 374*b30d1939SAndy Fiddaman 375*b30d1939SAndy Fiddamanp :test-1: 376*b30d1939SAndy Fiddamanc echo hello\E 377*b30d1939SAndy Fiddamans 400 378*b30d1939SAndy Fiddamanc v 379*b30d1939SAndy Fiddamanu /tmp/ 380*b30d1939SAndy Fiddamanc A world\E 381*b30d1939SAndy Fiddamans 400 382*b30d1939SAndy Fiddamanw :wq 383*b30d1939SAndy Fiddamanu ^hello world\r?\n$ 384*b30d1939SAndy Fiddaman! 385*b30d1939SAndy Fiddaman 386*b30d1939SAndy Fiddaman# err_exit # 387*b30d1939SAndy Fiddamantst $LINENO <<"!" 388*b30d1939SAndy FiddamanL POSIX sh 251(C) 389*b30d1939SAndy Fiddaman 390*b30d1939SAndy Fiddaman# If the User Portability Utilities Option is supported and shell 391*b30d1939SAndy Fiddaman# command line editing is supported: When in command mode, then the 392*b30d1939SAndy Fiddaman# command N repeats the most recent / or ? command, reversing the 393*b30d1939SAndy Fiddaman# direction of the search. 394*b30d1939SAndy Fiddaman 395*b30d1939SAndy Fiddamanp :test-1: 396*b30d1939SAndy Fiddamanw echo repeat-1 397*b30d1939SAndy Fiddamanu ^repeat-1\r?\n$ 398*b30d1939SAndy Fiddamanp :test-2: 399*b30d1939SAndy Fiddamanw echo repeat-2 400*b30d1939SAndy Fiddamanu ^repeat-2\r?\n$ 401*b30d1939SAndy Fiddamanp :test-3: 402*b30d1939SAndy Fiddamans 100 403*b30d1939SAndy Fiddamanc \E 404*b30d1939SAndy Fiddamans 400 405*b30d1939SAndy Fiddamanw /rep 406*b30d1939SAndy Fiddamanu echo repeat-2 407*b30d1939SAndy Fiddamanc n 408*b30d1939SAndy Fiddamanr echo repeat-1 409*b30d1939SAndy Fiddamanc N 410*b30d1939SAndy Fiddamanr echo repeat-2 411*b30d1939SAndy Fiddamanw dd 412*b30d1939SAndy Fiddamanp :test-3: 413*b30d1939SAndy Fiddamanw echo repeat-3 414*b30d1939SAndy Fiddamanu ^repeat-3\r?\n$ 415*b30d1939SAndy Fiddamanp :test-4: 416*b30d1939SAndy Fiddamans 100 417*b30d1939SAndy Fiddamanc \E 418*b30d1939SAndy Fiddamans 400 419*b30d1939SAndy Fiddamanw ?rep 420*b30d1939SAndy Fiddamanr echo repeat-2 421*b30d1939SAndy Fiddamanc N 422*b30d1939SAndy Fiddamanr echo repeat-1 423*b30d1939SAndy Fiddamanc n 424*b30d1939SAndy Fiddamanr echo repeat-2 425*b30d1939SAndy Fiddamanc n 426*b30d1939SAndy Fiddamanr echo repeat-3 427*b30d1939SAndy Fiddaman! 428*b30d1939SAndy Fiddaman 429*b30d1939SAndy Fiddaman# err_exit # 430*b30d1939SAndy Fiddamanwhence -q less && 431*b30d1939SAndy FiddamanTERM=vt100 tst $LINENO <<"!" 432*b30d1939SAndy FiddamanL process/terminal group exercise 433*b30d1939SAndy Fiddaman 434*b30d1939SAndy Fiddamanw m=yes; while true; do echo $m-$m; done | less 435*b30d1939SAndy Fiddamanu :$|:\E|lines 436*b30d1939SAndy Fiddamanc \cZ 437*b30d1939SAndy Fiddamanr Stopped 438*b30d1939SAndy Fiddamanw fg 439*b30d1939SAndy Fiddamanu yes-yes 440*b30d1939SAndy Fiddaman! 441*b30d1939SAndy Fiddaman 442*b30d1939SAndy Fiddamanexit $((Errors<125?Errors:125)) 443