1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986 |
- .\" $XConsortium: ksh93.man /main/2 1995/07/17 10:51:12 drk $
- .\"
- .\" David Korn
- .\" AT&T Bell Laboratories
- .\"
- .\" @(#)sh.1 (ulysses!dgk) 01/14/93-beta15
- .\"
- .nr Z 1 \" set to 1 when command name is ksh rather than sh
- .nr Y 0 \" set to 1 for R&D UNIX
- .if \nY=1 .nr Z 1
- .ds OK [\|
- .ds CK \|]
- .ds ' \s+4\v@.3m@\'\v@-.3m@\s-4
- .ds ` \s+4\v@.3m@\`\v@-.3m@\s-4
- .de P
- .br
- ..
- .if \nZ=0 .TH SH 1
- .if \nZ=1 .TH KSH 1 "User Environment Utilities" "RDS Standard"
- .SH NAME
- .if \nZ=0 sh, rsh \- shell, the
- .if \nZ=1 ksh, rksh \- KornShell, a
- standard/restricted command and programming language
- .SH SYNOPSIS
- .if \nZ=0 .B sh
- .if \nZ=1 .B ksh
- [
- .B \(+-abcefhikmnoprstuvxCP
- ] [
- .B \-I
- file ] [
- .B \(+-o
- option ] .\|.\|. [
- .B \-
- ] [ arg .\|.\|. ]
- .br
- .if \nZ=0 .B rsh
- .if \nZ=1 .B rksh
- [
- .B \(+-abcefhikmnoprstuvxCP
- ] [
- .B \-I
- file ] [
- .B \(+-o
- option ] .\|.\|. [
- .B \-
- ] [ arg .\|.\|. ]
- .SH DESCRIPTION
- .if \nZ=0 .I Sh\^
- .if \nZ=1 .I Ksh\^
- is a command and programming language
- that executes commands read from a terminal
- or a file.
- .if \nZ=0 .I Rsh\^
- .if \nZ=1 .I Rksh\^
- is a restricted version of the
- .if \nZ=0 standard
- command interpreter
- .if \nZ=0 .IR sh ;
- .if \nZ=1 .IR ksh ;
- it is used to set up login names and execution environments whose
- capabilities are more controlled than those of the standard shell.
- See
- .I Invocation\^
- below
- for the meaning of arguments to the shell.
- .SS Definitions.
- A
- .I metacharacter\^
- is one of the following characters:
- .RS
- .PP
- \f3; & ( ) \(bv < > new-line space tab\fP
- .RE
- .PP
- A
- .I blank\^
- is a
- .B tab
- or a
- .BR space .
- An
- .I identifier\^
- is a sequence of letters, digits, or underscores
- starting with a letter or underscore.
- Identifiers are used as components of
- .I variable\^
- names.
- A
- .I vname\^
- is a sequence of one or more identifiers
- separated by a \fB\s+2.\s-2\fP and optionally preceded
- by a \fB\s+2.\s-2\fP.
- Vnames are used as function and variable names.
- A
- .I word\^
- is a sequence of
- .I characters\^
- excluding non-quoted
- .IR metacharacters .
- .P
- A
- .I command\^
- is a sequence of characters in the syntax
- of the shell language.
- The shell reads each command and
- carries out the desired action either directly or by invoking
- separate utilities.
- A built-in command is a command that is carried out by the
- shell itself without creating a separate process.
- Some commands are built-in purely for convenience
- and are not documented here.
- Built-ins that cause
- side effects in the shell environment and
- built-ins that are found before performing a
- path search (see
- .I Execution\^
- below)
- are documented here.
- For historical reasons, some of
- these built-ins behave differently than
- other built-ins and are called
- .IR "special built-ins" .
- .SS Commands.
- A
- .I simple-command\^
- is a list of variable assignments
- (see
- .I Variable Assignments\^
- below)
- or a sequence of
- .I blank\^
- separated words
- which may be preceded by a list of variable assignments
- (see
- .I Environment\^
- below).
- The first word specifies the name of the command to
- be executed.
- Except as specified below,
- the remaining words are passed as arguments
- to the invoked command.
- The command name is passed as argument 0
- (see
- .IR exec (2)).
- The
- .I value\^
- of a simple-command is its exit status; 0-255
- if it terminates normally; 256+\f2signum\^\fP if
- it terminates abnormally (the name of the signal corresponding
- to the exit status can be
- obtained via the
- .B "\-l $?"
- option of the
- .B kill\^
- built-in utility).
- .PP
- An
- .I "arithmetic command"
- begins with a
- .BR (( ,
- and consists of an arithmetic expression formed by
- all the characters until a matching
- .BR )) .
- (See
- .I "Arithmetic evaluation"
- below.)
- The exit status of an arithmetic command is 0 when the
- arithmetic expression evaluates to a non-zero value and
- is 1 when the arithmetic expression evaluates to 0.
- .PP
- A
- .I pipeline\^
- is a sequence of one or more
- .I commands\^
- separated by
- .BR \(bv .
- The standard output of each command but the last
- is connected by a
- .IR pipe (2)
- to the standard input of the next command.
- Each command,
- except possibly the last,
- is run as a separate process;
- the shell waits for the last command to terminate.
- The exit status of a pipeline is the exit
- status of the last command.
- Each pipeline can be preceded by the
- .I "reserved word"
- .B !
- which negates the exit status of the pipeline.
- .PP
- A
- .I list\^
- is a sequence of one or more
- pipelines
- separated by
- .BR ; ,
- .BR & ,
- .BR \(bv& ,
- .BR && ,
- or
- .BR \(bv\|\(bv ,
- and optionally terminated by
- .BR ; ,
- .BR & ,
- or
- .BR \(bv& .
- Of these five symbols,
- .BR ; ,
- .BR & ,
- and
- .B \(bv&
- have equal precedence,
- which is lower than that of
- .B &&
- and
- .BR \(bv\|\(bv .
- The symbols
- .B &&
- and
- .B \(bv\|\(bv
- also have equal precedence.
- A semicolon
- .RB ( ; )
- causes sequential execution of the preceding pipeline; an ampersand
- .RB ( & )
- causes asynchronous execution of the preceding pipeline (i.e., the shell does
- .I not\^
- wait for that pipeline to finish).
- The symbol
- .B \(bv&
- causes asynchronous execution of the preceding pipeline
- with a two-way pipe established to the parent shell;
- the standard input and output of the spawned pipeline
- can be written to and read from by the parent shell
- by applying
- the redirection operators
- .B <&
- and
- .B >&
- with arg
- .B p
- to commands and by using
- .B \-p
- option of
- the built-in commands
- .B read
- and
- .B print
- described later.
- The symbol
- .B &&
- .RB (\| \(bv\|\(bv \^)
- causes the
- .I list\^
- following it to be executed only if the preceding
- pipeline
- returns a zero (non-zero) value.
- An arbitrary number of new-lines may appear in a
- .I list\^
- instead of a semicolon,
- to delimit a command.
- .PP
- A
- .I command\^
- is either a simple-command
- or one of the following.
- Unless otherwise stated,
- the value returned by a command is that of the
- last simple-command executed in the command.
- .TP
- \f3for\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP
- Each time a
- .B for
- command is executed,
- .I name\^
- is set to the next
- .I word\^
- taken from the
- .B in
- .I word\^
- list.
- If
- .BI in " word\^"
- \&.\|.\|.
- is omitted, then
- the
- .B for
- command executes the \f3do\fP \f2list\^\fP once for each positional parameter
- that is set
- (see
- .I "Parameter Expansion\^"
- below).
- Execution ends when there are no more words in the list.
- .TP
- \f3for ((\fP \*(OK\f2expr1\^\fP\*(CK \f3;\fP \*(OK\f2expr2\^\fP\*(CK \f3;\fP \*(OK\f2expr3\^\fP\*(CK \f3))\fP \f3;do\fP \f2list\^\fP \f3;done\fP
- The arithmetic expression
- .I expr1
- is evaluated first.
- (See
- .I "Arithmetic evaluation"
- below.)
- The arithmetic expression
- .I expr2
- is repeatedly evaluated until it evalues to zero and when non-zero,
- .I list
- is executed and the arithmetic expression
- .I expr3
- evaluated.
- If any expression
- is omitted, then it behaves as if it evaluated to 1.
- .TP
- \f3select\fP \f2vname\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3;do\fP \f2list\^\fP \f3;done\fP
- A
- .B select
- command prints on standard error (file descriptor 2) the set of
- .IR word s,
- each preceded by a number.
- If
- .BI in " word\^"
- \&.\|.\|.
- is omitted, then
- the
- positional parameters
- are used instead
- (see
- .I "Parameter Expansion\^"
- below).
- The
- .SM
- .B PS3
- prompt is printed
- and a line is read from the standard input.
- If this line consists of the number
- of one of the listed
- .IR word s,
- then the value of the variable
- .I vname\^
- is set to the
- .I word\^
- corresponding to this number.
- If this line is empty the selection list is
- printed again.
- Otherwise the value of the variable
- .I vname\^
- is set to
- .IR null .
- The contents of the line read from standard input is
- saved in
- the variable
- .SM
- .BR REPLY .
- The
- .I list\^
- is executed for each selection until a
- .B break\^
- or
- .I end-of-file\^
- is encountered.
- If the
- .SM
- .B REPLY
- variable is set to
- .I null\^
- by the execution of
- .IR list ,
- then the selection list is printed before
- displaying the
- .SM
- .B PS3
- prompt for the next selection.
- .TP
- \f3case\fP \f2word\^\fP \f3in\fP \*(OK \*(OK\f3(\fP\*(CK\f2pattern\^\fP \*(OK \(bv \f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP
- A
- .B case
- command executes the
- .I list\^
- associated with the first
- .I pattern\^
- that matches
- .IR word .
- The form of the patterns is
- the same as that used for
- file-name generation (see
- .I "File Name Generation\^"
- below).
- The
- .B ;;
- operator causes execution of
- .B case
- to terminate.
- If
- .B ;&
- is used in place of
- .B ;;
- the next subsequent list, if any, is executed.
- .ll +3
- .TP
- \f3if\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(OK \
- \f3elif\fP \f2list\^\fP \f3;then\fP \f2list\^\fP \*(CK .\|.\|. \
- \*(OK \f3;else\fP \f2list\^\fP \*(CK \f3;f\&i\fP
- .ll -3
- The
- .I list\^
- following \f3if\fP is executed and,
- if it
- returns a zero exit status, the
- .I list\^
- following
- the first
- .B then
- is executed.
- Otherwise, the
- .I list\^
- following \f3elif\fP
- is executed and, if its value is zero,
- the
- .I list\^
- following
- the next
- .B then
- is executed.
- Failing that, the
- .B else
- .I list\^
- is executed.
- If the
- .B if
- .I list\^
- has non-zero exit status
- and there is no
- .B else
- .IR list ,
- then the
- .B if
- command returns a zero exit status.
- .TP
- .PD 0
- \f3while\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP
- .TP
- \f3until\fP \f2list\^\fP \f3;do\fP \f2list\^\fP \f3;done\fP
- .PD
- A
- .B while
- command repeatedly executes the
- .B while
- .I list\^
- and, if the exit status of the last command in the list is zero, executes
- the
- .B do
- .IR list ;
- otherwise the loop terminates.
- If no commands in the
- .B do
- .I list\^
- are executed, then the
- .B while
- command returns a zero exit status;
- .B until
- may be used in place of
- .B while
- to negate
- the loop termination test.
- .TP
- \f3(\fP\f2list\^\fP\f3)\fP
- .br
- Execute
- .I list\^
- in a separate environment.
- Note, that if two adjacent open parentheses are
- needed for nesting, a space must be inserted to avoid
- evaluation as an arithmetic command as described above.
- .TP
- \f3{ \fP\f2list\^\fP\f3;}\fP
- .br
- .I list\^
- is simply executed.
- Note that unlike the metacharacters
- .B (
- and
- .BR ) ,
- .B {
- and
- .B }
- are
- .IR "reserved word" s
- and must occur
- at the beginning of a line or after a
- .B ;
- in order to be recognized.
- .TP
- \f3[[\fP\f2 expression \^\fP\f3]]\fP
- .br
- Evaluates
- .I expression\^
- and returns a zero exit status when
- .I expression\^
- is true.
- See
- .I "Conditional Expressions\^"
- below, for a description of
- .IR expression .
- .TP
- .PD 0
- \f3function\fP \f2varname\^\fP \f3{\fP \f2list\^\fP \f3;}\fP
- .TP
- \f2varname\^\fP \f3() {\fP \f2list\^\fP \f3;}\fP
- .PD
- Define a function which is referenced by
- .IR varname .
- A function whose
- .I varname\^
- contains a
- .B \s+2.\s-2
- is called a discipline function and the portion
- of the
- .I varname\^
- preceding the last
- .B \s+2.\s-2
- must refer to an existing variable.
- The body of the function is the
- .I list\^
- of commands between
- .B {
- and
- .BR } .
- A function defined with the \f3function\fP \f2varname\^\fP
- syntax can also be used as an argument to the \f3.\fP
- special built-in command to get the equivalent behavior
- as if the \f2varname\^\fP\f3()\fP syntax were used to define it.
- (See
- .I Functions\^
- below.)
- .TP
- \f3time\fP \*(OK \f2pipeline\^\fP \*(CK
- .br
- If \f2pipeline\^\fP is omitted the user and system time for
- the current shell and completed child processes is printed
- on standard error.
- Otherwise,
- .I pipeline\^
- is executed and the elapsed time as well as
- the user and system time are printed on standard error.
- .PP
- The following reserved words
- are only recognized as such when they are the first word of a command
- and are not quoted:
- .if t .RS
- .PP
- .B
- .if n if then else elif fi case esac for while until do done { } function select time [[ ]] !
- .if t if then else elif fi case esac for while until do done { } function select time [[ ]] !
- .if t .RE
- .SS Variable Assignments.
- One or more variable assignments can start a simple command
- or can be an arguments to the
- .BR typeset ,
- .BR export ,
- or
- .B readonly
- special built-in commands.
- The syntax for an \f2assignment\^\fP is of the form:
- .TP
- .PD 0
- \f2varname\^\fP\f3=\fP\f2word\^\fP
- .TP
- \f2varname\^\fP\f3[\fP\f2word\^\fP\f3]\fP=\fP\f2word\^\fP
- .PD
- No space is permitted between \f2varname\^\fP and the \f3=\fP or
- between \f3=\fP and \fIword\^\fP.
- .TP
- \f2varname\^\fP\f3=(\fP\f2assign_list\^\fP\f3)\fP
- No space is permitted between \f2varname\^\fP and the \f3=\fP.
- An \f2assign_list\^\fP can be one of the following:
- .RS 15
- .PD 0
- .TP
- \f2word\^\fP ...
- Indexed array assignment.
- .TP
- \f3[\fP\f2word\^\fP\f3]=\fP\f2word\^\fP .\|.\|.
- Associative array assignment.
- .TP
- \f2assignment\^\fP .\|.\|.
- Nested variable assignment.
- .TP
- \f3typeset\fP \*(OK\f2options\fP\*(CK \f2assignment\^\fP .\|.\|.
- Nested variable assignment. Multiple assignments
- can be specified by separating each of them with a \f3;\fP.
- .PD
- .RE
- .SS Comments.
- .PD 0
- A word beginning with
- .B #
- causes that word and all the following characters up to a new-line
- to be ignored.
- .SS Aliasing.
- The first word of each command is replaced by the text of an
- .B alias
- if an
- .B alias
- for this word has been defined.
- An
- .B alias
- name consists of any number of characters excluding metacharacters,
- quoting characters,
- file expansion characters,
- parameter expansion and command substitution
- characters,
- and
- .BR = .
- The replacement string can contain any
- valid shell script
- including the metacharacters listed above.
- The first word of each command in the
- replaced text,
- other than
- any that are in the process of being replaced,
- will be tested for aliases.
- If the last character of the alias value is a
- .I blank\^
- then the word following the alias will also be checked for alias
- substitution.
- Aliases can be used to redefine
- built-in commands but cannot be used to redefine
- the reserved words listed above.
- Aliases can be created and listed with the
- .B alias
- command and can be removed with the
- .B unalias
- command.
- .PP
- .I Aliasing\^
- is performed when
- scripts are read,
- not while they are executed.
- Therefore,
- for an alias to take effect
- the
- .B
- alias
- definition command has to be executed before
- the command which references the alias is read.
- .PP
- The following
- .I exported aliases
- are compiled into the shell
- but can be unset or redefined:
- .RS 20
- .PD 0
- .TP
- .B "autoload=\(fmtypeset \-fu\(fm"
- .TP
- .B "command=\(fmcommand \(fm"
- .TP
- .B "fc=hist"
- .TP
- .B "float=\(fmtypeset \-E\(fm"
- .TP
- .B "functions=\(fmtypeset \-f\(fm"
- .TP
- .B "hash=\(fmalias \-t \-\-\(fm"
- .TP
- .B "history=\(fmhist \-l\(fm"
- .TP
- .B "integer=\(fmtypeset \-i\(fm"
- .TP
- .B "nameref=\(fmtypeset \-n\(fm"
- .TP
- .B "nohup=\(fmnohup \(fm"
- .TP
- .B "r=\(fmhist \-s\(fm"
- .TP
- .B "redirect=\(fmcommand exec\(fm"
- .TP
- .B "stop=\(fmkill \-s \s-1STOP\s+1\(fm"
- .TP
- .B "times=\(fm{ {time;} 2>&1;}\(fm"
- .TP
- .B "type=\(fmwhence \-v\(fm"
- .PD
- .RE
- .SS Tilde Substitution.
- After alias substitution is performed, each word
- is checked to see if it begins with an unquoted
- .BR \(ap .
- For tilde substitution,
- .I word\^
- also refers to the
- .I word\^
- portion of parameter expansion
- ( see
- .I "Parameter Expansion\^"
- below.)
- If it does, then the word up to a
- .B /
- is checked to see if it matches a user name in the
- password database (
- often the
- .B /etc/passwd
- file).
- If a match is found, the
- .B \(ap
- and the matched login name are replaced by the
- login directory of the matched user.
- If no match is found, the original text is left unchanged.
- A
- .B \(ap
- by itself, or in front of a
- .BR / ,
- is replaced by
- .SM
- .BR $HOME .
- A
- .B \(ap
- followed by a
- .B +
- or
- .B \-
- is replaced by the value of
- .B
- .SM $PWD
- and
- .B
- .SM $OLDPWD
- respectively.
- .PP
- In addition,
- when expanding a
- .IR "variable assignment" ,
- .I tilde
- substitution is attempted when
- the value of the assignment
- begins with a
- .BR \(ap ,
- and when a
- .B \(ap
- appears after a
- .BR : .
- The
- .B :
- also terminates a
- .B \(ap
- login name.
- .if \nY=1 \{.PP
- On R&D UNIX Systems with RFS, an additional capability,
- .BR \(aphost!user ,
- has been added to
- .IR ksh .
- See
- .IR logdir (1)
- for a complete description of the capability.\}
- .SS Command Substitution.
- The standard output from a command enclosed in
- parentheses preceded by a dollar sign (
- .B $(\|)
- )
- or a pair of grave accents (\^\f3\*`\^\*`\fP\^)
- may be used as part or all
- of a word;
- trailing new-lines are removed.
- In the second (obsolete) form, the string between the quotes is processed
- for special quoting characters before the command is executed (see
- .I Quoting\^
- below).
- The command substitution
- \^\f3$(\^cat file\^)\fP\^
- can be replaced by the equivalent but faster
- \^\f3$(\^<file\^)\fP\^.
- .SS Arithmetic Substitution.
- An arithmetic expression enclosed in double
- parentheses preceded by a dollar sign (
- .B $((\|))
- )
- is replaced by the value of the arithmetic expression
- within the double parentheses.
- .SS Process Substitution.
- This feature is only available on
- versions of the UNIX operating system that support the
- .B /dev/fd
- directory for naming open files.
- Each command argument of the form
- \f3<(\fP\f2list\^\fP\f3)\fP
- or
- \f3>(\fP\f2list\^\fP\f3)\fP
- will run process
- .I list
- asynchronously connected to some file in
- .BR /dev/fd .
- The name of this file will become the argument to the command.
- If the form with
- .B >
- is selected then writing on this file will provide input for
- .IR list .
- If
- .B <
- is used,
- then the file passed as an argument will contain the output of the
- .I list
- process.
- For example,
- .RS
- .PP
- \f3paste <(cut \-f1\fP \f2file1\fP\f3) <(cut \-f3\fP \f2file2\f3) | tee >(\fP\f2process1\fP\f3) >(\fP\f2process2\fP\f3)\fP
- .RE
- .PP
- .I cuts
- fields 1 and 3 from
- the files
- .I file1
- and
- .I file2
- respectively,
- .I pastes
- the results together, and
- sends it
- to the processes
- .I process1
- and
- .IR process2 ,
- as well as putting it onto the standard output.
- Note that the file, which is passed as an argument to the command,
- is a UNIX
- .IR pipe (2)
- so programs that expect to
- .IR lseek (2)
- on the file will not work.
- .SS Parameter Expansion.
- A
- .I parameter\^
- is an
- .IR variable ,
- one or more digits,
- or any of the characters
- .BR \(** ,
- .BR @ ,
- .BR # ,
- .BR ? ,
- .BR \- ,
- .BR $ ,
- and
- .BR !\\^ .
- A
- .I variable\^
- is denoted by a \f2vname\fP.
- To create a variable whose
- .I vname\^
- contains a \f3\s+2.\s-2\fP,
- a variable whose
- .I vname\^
- consists of everything before the last \f3\s+2.\s-2\fP must already exist.
- A
- .I variable\^
- has a
- .I value\^
- and zero or more
- .IR attributes .
- .I Variables\^
- can be assigned
- .I values\^
- and
- .I attributes
- by using the
- .B typeset\^
- special built-in command.
- The attributes supported by the shell are described
- later with the
- .B typeset\^
- special built-in command.
- Exported variables pass values and attributes to
- the environment.
- .PP
- The shell supports both indexed and associative arrays.
- An element of an array variable is referenced by a
- .IR subscript .
- A
- .I subscript\^
- for an indexed array is denoted by
- an
- .I arithmetic expression\^
- (see
- .I "Arithmetic evaluation"
- below)
- between a
- .B [
- and a
- .BR ] .
- To assign values to an indexed array, use
- \f3set \-A\fP \f2vname\fP \f2value\fP .\|.\|. .
- The value of all
- subscripts must be in the
- range of
- 0 through 4095.
- Indexed arrays need not be declared.
- Any reference to a variable
- with a valid subscript is
- legal and an array will be created if necessary.
- .PP
- An associative array is created with the
- .B \-A
- option to
- .BR typeset.
- A
- .I subscript\^
- for an associative array is denoted by
- a string enclosed between
- .B [
- and
- .BR ] .
- .PP
- Referencing any array without a subscript
- is equivalent to referencing the array with subscript 0.
- .PP
- The
- .I value\^
- of a
- .I variable\^
- may be assigned by writing:
- .RS
- .PP
- .IB vname = value\^\|
- \*(OK
- .IB vname = value\^
- \*(CK .\|.\|.
- .RE
- .PP
- .PD 0
- or
- .RS
- .PP
- .IB vname [ subscript ]= value\^\|
- \*(OK
- .IB vname [ subscript ]= value\^
- \*(CK .\|.\|.
- .RE
- Note that no space is allowed before or after the
- .BR = .
- .PP
- .PD 0
- A
- .I nameref\^
- is a variable that is a reference to another variable.
- A nameref is created with the
- .B \-n
- attribute of
- .B typeset .
- The value of the variable at the time of the
- .B typeset
- command becomes the variable that will be referenced whenever
- the nameref variable is used.
- The name of a nameref variable cannot contain a \fB\s+2.\s-2\fP.
- When a variable or function name contains a \fB\s+2.\s-2\fP, and the portion
- of the name up to the first \fB\s+2.\s-2\fP matches the
- name of a nameref, the variable referred to is obtained by
- replacing the nameref portion with the name of the variable
- referenced by the nameref.
- A nameref provides a convenient way to refer to the variable
- inside a function whose name is passed as an argument to a function.
- For example, if the name of a variable is passed as the first
- argument to a function, the command
- .RS
- .PP
- typeset \-n var=$1
- .RE
- .PP
- inside the function causes references and assignments to
- .B var
- to be references and assignments to the variable whose
- name has been passed to the function.
- .PP
- If either of the floating point attributes,
- .BR \-E ,
- or
- .BR \-F ,
- or the integer attribute,
- .BR \-i ,
- is set for
- .IR vname ,
- then the
- .I value\^
- is subject to arithmetic evaluation as described below.
- .PP
- Positional parameters,
- parameters denoted by a number,
- may be assigned values with the
- .B set\^
- special built-in command.
- Parameter
- .B $0
- is set from argument zero when the shell
- is invoked.
- .PP
- The character
- .B $
- is used to introduce substitutable
- .IR parameters .
- .TP
- \f3${\fP\f2parameter\^\fP\f3}\fP
- The shell
- reads all the characters from
- .B ${
- to the matching
- .B }
- as part of the same word even if it contains
- braces or metacharacters.
- The value, if any, of the parameter is substituted.
- The braces are required when
- .I parameter\^
- is followed by a letter, digit, or underscore
- that is not to be interpreted as part of its name,
- when the variable name contains a \fB\s+2.\s-2\fP,
- or when a variable is subscripted.
- If
- .I parameter\^
- is one or more digits then it is a positional parameter.
- A positional parameter of more than one digit must be
- enclosed in braces.
- If
- .I parameter\^
- is
- .B \(**
- or
- .BR @ ,
- then all the positional
- parameters, starting with
- .BR $1 ,
- are substituted
- (separated by a field separator character).
- If an array
- .I vname\^
- with subscript
- .B \(**
- or
- .B @
- is used,
- then the value
- for each of the
- elements
- is substituted
- (separated by a field separator character).
- .TP
- \f3${#\fP\f2parameter\^\fP\f3}\fP
- If
- .I parameter\^
- is
- .B \(**
- or
- .BR @ ,
- the number of positional parameters is substituted.
- Otherwise, the length of the value of the
- .I parameter\^
- is substituted.
- .TP
- \f3${#\fP\f2vname\fP\f3[*]}\fP
- The number of elements in the array
- .I vname\^
- is substituted.
- .TP
- \f3${!\fP\f2vname\^\fP\f3}\fP
- Expands to the name of the variable referred to by
- .IR vname .
- This will be
- .I vname\^
- except when
- .I vname\^
- is a name reference.
- .TP
- \f3${!\fP\f2vname\^\fP\f3[\f2subscript\^\f3]}\fP
- Expands to name of the subscript unless
- .I subscript\^
- is
- .BR * ,
- or
- .BR @ .
- When
- .I subscript\^
- is
- .BR * ,
- the list of array subscripts for \f2vname\^\fP
- is generated.
- For a variable that is not an array, the value is 0 if the variable
- is set. Otherwise it is null.
- When
- .I subscript\^
- is
- .BR @ ,
- same as above, except that when used in double quotes,
- each array subscript yields a separate
- argument.
- .TP
- \f3${!\fP\f2prefix\^\fP\f3*}\fP
- Expands to the names of the variables whose names begin with
- .IR prefix .
- .TP
- \f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP
- If
- .I parameter\^
- is set and is non-null then substitute its value;
- otherwise substitute
- .IR word .
- .TP
- \f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP
- If
- .I parameter\^
- is not set or is null then set it to
- .IR word ;
- the value of the parameter is then substituted.
- Positional parameters may not be assigned to
- in this way.
- .TP
- \f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP
- If
- .I parameter\^
- is set and is non-null then substitute its value;
- otherwise, print
- .I word\^
- and exit from the shell.
- If
- .I word\^
- is omitted then a standard message is printed.
- .TP
- \f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP
- If
- .I parameter\^
- is set and is non-null then substitute
- .IR word ;
- otherwise substitute nothing.
- .TP
- .PD 0
- \f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3:\fP\f2length\^\fP\f3}\fP
- .TP
- \f3${\fP\f2parameter\^\fP\f3:\fP\f2offset\^\fP\f3}\fP
- Expands to the portion of the value of
- .I parameter\^
- starting at the character determined by expanding
- .I offset\^
- as an arithmetic expression and consisting of the
- number of characters determined by the arithmetic expression
- defined by
- .IR length.
- In the second form, the remainder of the value is used.
- If
- .I parameter\^
- is
- .B \(**
- or
- .BR @ ,
- or is an array name indexed by
- .B \(**
- or
- .BR @ ,
- then
- .I offset\^
- and
- .I length\^
- refer to the array index and number
- of elements respectively.
- .TP
- .PD 0
- \f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP
- .TP
- \f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP
- .PD
- If
- the shell
- .I pattern\^
- matches the beginning of the value of
- .IR parameter ,
- then the value of
- this expansion is the value of the
- .I parameter\^
- with the matched portion deleted;
- otherwise the value of this
- .I parameter\^
- is substituted.
- In the first form the smallest matching pattern is deleted and in the
- second form the largest matching pattern is deleted.
- When
- .I parameter\^
- is
- .BR @ ,
- .BR * ,
- or an array variable with subscript
- .BR @ ,
- or
- .BR * ,
- the substring operation is applied to each element in turn.
- .TP
- .PD 0
- \f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP
- .TP
- \f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP
- .PD
- If
- the shell
- .I pattern\^
- matches the end of the value of
- .IR parameter ,
- then the value of
- this expansion is the value of the
- .I parameter\^
- with the matched part deleted;
- otherwise substitute the value of
- .IR parameter .
- In the first form the smallest matching pattern is deleted and in the
- second form the largest matching pattern is deleted.
- When
- .I parameter\^
- is
- .BR @ ,
- .BR * ,
- or an array variable with subscript
- .BR @ ,
- or
- .BR * ,
- the substring operation is applied to each element in turn.
- .TP
- .PD 0
- \f3${\fP\f2parameter\^\fP\f3/\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
- .TP
- \f3${\fP\f2parameter\^\fP\f3//\fP\f2pattern\^\fP\f3/\f2string\^\fP\f3}\fP
- .PD
- Expands
- .I parameter\^
- and replaces
- .I pattern\^
- with the given
- .IR string.
- In the first form,
- only the first occurrence of
- .I pattern\^
- is replaced.
- In the second form,
- each match for
- .I pattern\^
- is replaced by the given
- .IR string.
- When
- .I string\^
- is null, the
- .I pattern\^
- will be deleted and the
- .B /
- in front of
- .I string\^
- may be omitted.
- When
- .I parameter\^
- is
- .BR @ ,
- .BR * ,
- or an array variable with subscript
- .BR @ ,
- or
- .BR * ,
- the substitution operation is applied to each element in turn.
- .PP
- In the above,
- .I word\^
- is not evaluated unless it is
- to be used as the substituted string,
- so that, in the following example,
- .B pwd\^
- is executed only if
- .B d\^
- is not set or is null:
- .RS
- .PP
- print \|${d:\-\^$(\^pwd\^)\^}
- .RE
- .PP
- If the colon (
- .B : )
- is omitted from the above expressions,
- then the shell only checks whether
- .I parameter\^
- is set or not.
- .PP
- The following
- parameters
- are automatically set by the shell:
- .RS
- .PD 0
- .TP
- .B #
- The number of positional parameters in decimal.
- .TP
- .B \-
- Options supplied to the shell on invocation or by
- the
- .B set
- command.
- .TP
- .B ?
- The decimal value returned by the last executed command.
- .TP
- .B $
- The process number of this shell.
- .TP
- .B _
- Initially, the value of
- .B _
- is an absolute pathname of the shell or script being executed
- as passed in the
- .IR environment .
- Subsequently it is assigned the last argument of the previous command.
- This parameter is not set for commands which are asynchronous.
- This parameter is also used to hold the name of the matching
- .B
- .SM MAIL
- file when checking for mail.
- .TP
- .B !
- The process number of the last background command invoked.
- .TP
- .B .sh.edchar
- This variable contains the value of the keyboard character
- (or sequence of characters if the first character is an ESC, ascii
- .B 033 )
- that has
- been entered when processing a
- .B
- .SM KEYBD
- trap.
- If the value is changed as part of the trap action, then the new
- value replaces the key (or key sequence) that caused the trap.
- .TP
- .B .sh.edcol
- The character position of the cursor at the time of the most recent
- .B
- .SM KEYBD
- trap.
- .TP
- .B .sh.edmode
- The value is set to ESC when processing a
- .B
- .SM KEYBD
- trap while in
- .B vi
- insert mode. (See
- .I "Vi Editing Mode"\^
- below.)
- Otherwise,
- .B .sh.edmode
- is null when processing a
- .B
- .SM KEYBD
- trap.
- .TP
- .B .sh.edtext
- The characters in the input buffer at the time of the most recent
- .B
- .SM KEYBD
- trap.
- The value is null when not processing a
- .B
- .SM KEYBD
- trap.
- .TP
- .B .sh.name
- Set to the name of the variable at the time of a
- .B set
- or
- .B get
- discipline is invoked.
- .TP
- .B .sh.subscript
- Set to the name subscript of the variable at the time of a
- .B set
- or
- .B get
- discipline is invoked.
- .TP
- .B .sh.value
- Set to the value of the variable at the time of a
- .B set
- discipline.
- .TP
- .B .sh.version
- Set to a value that identifies the version of this shell.
- .TP
- .B
- .SM LINENO
- The line number of the current line within the script or
- function being executed.
- .TP
- .B
- .SM OLDPWD
- The previous working directory set by the
- .B cd
- command.
- .TP
- .B
- .SM OPTARG
- The value of the last option argument processed by the
- .B getopts
- built-in command.
- .TP
- .B
- .SM OPTIND
- The index of the last option argument processed by the
- .B getopts
- built-in command.
- .TP
- .B
- .SM PPID
- The process number of the parent of the shell.
- .TP
- .B
- .SM PWD
- The present working directory set by the
- .B cd
- command.
- .TP
- .B
- .SM RANDOM
- Each time this variable is referenced, a random integer,
- uniformly distributed between 0 and 32767, is generated.
- The sequence of random numbers can be initialized by assigning
- a numeric value to
- .SM
- .BR RANDOM .
- .TP
- .B
- .SM REPLY
- This variable is set by the
- .B select
- statement and by
- the
- .B read
- built-in command when no arguments are supplied.
- .TP
- .B
- .SM SECONDS
- Each time this variable is referenced, the number of
- seconds since shell invocation is returned.
- If this variable is
- assigned a value, then the value returned upon reference will
- be the value that was assigned plus the number of seconds since the assignment.
- .PD
- .RE
- .PP
- The following
- variables
- are used by the shell:
- .RS
- .PD 0
- .TP
- .B
- .SM CDPATH
- The search path for the
- .B cd
- command.
- .TP
- .B
- .SM COLUMNS
- If this variable is set,
- the value is used to define the width of the edit window
- for the shell edit modes and for printing
- .B select
- lists.
- .TP
- .B
- .SM EDITOR
- If the value of this variable ends in
- .IR emacs ,
- .IR gmacs ,
- or
- .I vi
- and the
- .B
- .SM VISUAL
- variable is not set,
- then the corresponding option
- (see Special Command
- .B set
- below)
- will be turned on.
- .TP
- .SM
- .B ENV
- If this variable is set, then
- parameter expansion, command substitution, and arithmetic substitution,
- are performed on
- the value to generate
- the pathname of the script that will be
- executed when the shell
- is invoked.
- (See
- .I Invocation\^
- below.)
- This file is typically used for
- .I alias
- and
- .I function
- definitions.
- .TP
- .B
- .SM FCEDIT
- Obsolete name for
- the default editor name for the
- .B hist
- command.
- .B
- .SM FCEDIT
- is not used when
- .B
- .SM HISTEDIT
- is set.
- .TP
- .SM
- .B FIGNORE
- A pattern that defines the set of filenames that will be
- ignored when performing filename matching.
- .TP
- .SM
- .B FPATH
- The search path for function definitions.
- This path is searched when a function with the
- .B \-u
- attribute is referenced and when a command is not found.
- If an executable file is found, then it is read and executed
- in the current environment.
- .TP
- .SM
- .B IFS
- Internal field separators,
- normally
- .BR space ,
- .BR tab ,
- and
- .B new-line
- that are used to separate the results of
- command substitution or parameter expansion
- and to separate fields with the built-in command
- .BR read .
- The first character of the
- .SM
- .B IFS
- variable is used to separate arguments for the
- .B
- "$\(**"
- substitution. (See
- .I Quoting
- below.)
- Each single occurrence of
- an
- .SM
- .B IFS
- character in the string to be split,
- except
- .BR space ,
- .BR tab ,
- and
- .BR new-line ,
- separates a field.
- One or more
- .BR space ,
- .BR tab ,
- or
- .B new-line
- characters separate a field.
- .TP
- .B
- .SM HISTEDIT
- Name for
- the default editor name for the
- .B hist
- command.
- .TP
- .SM
- .B HISTFILE
- If this variable is set when the shell is invoked, then
- the value is the pathname of the file that will be
- used to store the command history.
- (See
- .I "Command re-entry\^"
- below.)
- .TP
- .SM
- .B HISTSIZE
- If this variable is set when the shell is invoked, then
- the number of previously entered commands that
- are accessible by this shell
- will be greater than or equal to this number.
- The default is 128.
- .TP
- .B
- .SM HOME
- The default argument (home directory) for the
- .B cd
- command.
- .TP
- .B
- .SM LINES
- If this variable is set,
- the value is used to determine the column length for printing
- .B select
- lists.
- Select lists will print vertically until about two-thirds of
- .B
- .SM LINES
- lines are filled.
- .TP
- .B
- .SM MAIL
- If this variable is set to the name of a mail file
- .I and\^
- the
- .B
- .SM MAILPATH
- variable is not set,
- then the shell informs the user of arrival of mail
- in the specified file.
- .TP
- .B
- .SM MAILCHECK
- This variable specifies how often (in seconds) the
- shell will check for changes in the modification time
- of any of the files specified by the
- .B
- .SM MAILPATH
- or
- .B
- .SM MAIL
- variables.
- The default value is 600 seconds.
- When the time has elapsed
- the shell will check before issuing the next prompt.
- .TP
- .B
- .SM MAILPATH
- A colon (
- .B :
- )
- separated list of file names.
- If this variable is set
- then the shell informs the user of
- any modifications to the specified files
- that have occurred within the last
- .B
- .SM MAILCHECK
- seconds.
- Each file name can be followed by a
- .B ?
- and a message that will be printed.
- The message will undergo parameter expansion, command substitution,
- and arithmetic substitution
- with the variable
- .B $_
- defined as the name of the file that has changed.
- The default message is
- .I you have mail in $_\^.
- .TP
- .B
- .SM PATH
- The search path for commands (see
- .I Execution\^
- below).
- The user may not change
- .B \s-1PATH\s+1
- if executing under
- .if \nZ=0 .B rsh
- .if \nZ=1 .B rksh
- (except in
- .BR .profile\^).
- .TP
- .SM
- .B PS1
- The value of this variable is expanded for parameter
- expansion, command substitution, and arithmetic substitution to define the
- primary prompt string which by default is
- .RB `` "$\|\|\|" ''.
- The character
- .B !
- in the primary prompt string is replaced by the
- .I command\^
- number (see
- .I "Command Re-entry"\^
- below).
- Two successive occurrences of
- .B !
- will produce a single
- .B !
- when the prompt string is printed.
- .TP
- .SM
- .B PS2
- Secondary prompt string, by default
- .RB `` "> \|" ''.
- .TP
- .SM
- .B PS3
- Selection prompt string
- used within a
- .B select
- loop, by default
- .RB `` "#? \|" ''.
- .TP
- .SM
- .B PS4
- The value of this variable is expanded for parameter evaluation,
- command substitution, and arithmetic substitution
- and precedes each line of an execution trace.
- If omitted, the execution trace prompt is
- .RB `` "+ \|" ''.
- .TP
- .SM
- .B SHELL
- The pathname of the
- .I shell\^
- is kept in the environment.
- At invocation, if the basename of this variable is
- .BR rsh ,
- .BR rksh ,
- or
- .BR krsh ,
- then the shell becomes restricted.
- .TP
- .B
- .SM TMOUT
- If set to a value greater than zero,
- the
- .B read
- built-in command terminates after
- .B
- .SM TMOUT
- seconds when input is from a terminal.
- Otherwise,
- the shell will terminate if a line is not entered within
- the prescribed number of seconds while reading from a terminal.
- (Note that the shell can be compiled with a maximum bound
- for this value which cannot be exceeded.)
- .TP
- .B
- .SM VISUAL
- If the value of this variable ends in
- .IR emacs ,
- .IR gmacs ,
- or
- .I vi
- then the corresponding option
- (see Special Command
- .B set
- below)
- will be turned on.
- .PD
- .RE
- .PP
- The shell gives default values to
- \f3\s-1PATH\s+1\fP, \f3\s-1PS1\s+1\fP, \f3\s-1PS2\s+1\fP,
- \f3\s-1PS3\s+1\fP, \f3\s-1PS4\s+1\fP, \f3\s-1MAILCHECK\s+1\fP, \f3\s-1HISTEDIT\s+1\fP,
- \f3\s-1TMOUT\s+1\fP and \f3\s-1IFS\s+1\fP,
- while
- .SM
- .BR HOME ,
- .SM
- .BR SHELL ,
- .SM
- .BR ENV ,
- and
- .SM
- .B MAIL
- are
- not set at all by the shell (although
- .SM
- .B HOME
- .I is\^
- set by
- .IR login (1)).
- On some systems
- .SM
- .B MAIL
- and
- .SM
- .B SHELL
- are also
- set by
- .IR login (1).
- .SS Field Splitting
- After parameter expansion and command substitution,
- the results of substitutions are scanned for the field separator
- characters (those found in
- .SM
- .B IFS\^\c
- )
- and split into distinct fields where such characters are found.
- Explicit null fields (\^\f3"\^"\fP or \f3\*\(fm\^\*\(fm\fP\^) are retained.
- Implicit null fields
- (those resulting from
- .I parameters\^
- that have no values or command substitutions with no output) are removed.
- .SS File Name Generation.
- Following splitting, each field is scanned for the characters
- .BR \(** ,
- .BR ? ,
- .BR ( ,
- and
- .B \*(OK\^
- unless the
- .B \-f
- option has been set.
- If one of these characters appears
- then the word is regarded as a
- .IR pattern .
- Each file name component that contains any pattern character
- is replaced with a lexicographically sorted set of names
- that matches the pattern
- from
- that directory.
- If no file name is found that matches the pattern, then
- that component of the filename is left unchanged.
- If
- .SM
- .B FIGNORE
- is set,
- then each file name component
- that matches the pattern defined by the value of
- .SM
- .B FIGNORE
- is ignored when generating the matching filenames.
- The names
- .B .
- and
- .B ..
- are also ignored.
- If
- .SM
- .B FIGNORE
- is not set,
- the character
- .B .
- at the start of each file name component
- will be ignored unless the first character of the pattern
- corresponding to this component is the character
- .BR .
- itself.
- Note, that for other
- uses of pattern matching the
- .B /
- and
- .B .
- are not treated specially.
- .PP
- .PD 0
- .RS
- .TP
- .B \(**
- Matches any string, including the null string.
- .TP
- .B ?
- Matches any single character.
- .TP
- .BR \*(OK \^.\|.\|.\^ \*(CK
- Matches any one of the enclosed characters.
- A pair of characters separated by
- .B \-
- matches any
- character lexically between the pair, inclusive.
- If the first character following the opening
- .B \*(OK\^
- is a
- .B !
- then any character not enclosed is matched.
- A
- .B \-
- can be included in the character set by putting it as the
- first or last character.
- .br
- Within
- .B \*(OK\^
- and
- .B \*(CK\^
- character classes can be specified with the syntax
- \f3[:\fP\f2class\fP\f3:]\fP
- where class is one of the following:
- .if t .RS
- .PP
- .B
- .if n alnum alpha cntrl digit graph lower print punct space upper xdigit
- .if t alnum alpha cntrl digit graph lower print punct space upper xdigit
- .if t .RE
- .PD
- .RE
- A
- .I pattern-list
- is a list of one or more patterns separated from each other
- with a
- .BR \(bv .
- Composite patterns can be formed with one or more of the following:
- .PD 0
- .RS
- .TP
- \f3?(\fP\f2pattern-list\^\fP\f3)\fP
- Optionally matches any one of the given patterns.
- .TP
- \f3*(\fP\f2pattern-list\^\fP\f3)\fP
- Matches zero or more occurrences of the given patterns.
- .TP
- \f3+(\fP\f2pattern-list\^\fP\f3)\fP
- Matches one or more occurrences of the given patterns.
- .TP
- \f3\&@\&(\fP\f2pattern-list\^\fP\f3)\fP
- Matches exactly one of the given patterns.
- .br
- .TP
- \f3!(\fP\f2pattern-list\^\fP\f3)\fP
- Matches anything except one of the given patterns.
- .PD
- .RE
- .SS Quoting.
- Each of the
- .I metacharacters\^
- listed earlier (see
- .I Definitions\^
- above)
- has a special meaning to the shell
- and causes termination of a word unless quoted.
- A character may be
- .I quoted\^
- (i.e., made to stand for itself)
- by preceding
- it with a
- .BR \e .
- The pair
- .B \enew-line
- is removed.
- All characters enclosed between a pair of single quote marks
- (\^\f3\(fm\^\(fm\fP\^)
- that is not preceded by a
- .B $
- are quoted.
- A single quote cannot appear within the single quotes.
- A single quoted string preceded an unquoted
- .B $
- is processed as an ANSI-C string
- except that
- .B \e0
- within the string causes the remainder of the
- string to be ignored and
- .B \eE
- is equivalent to the escape characer
- (ascii
- .BR 033 ).
- Inside double quote marks
- (\f3"\^"\fP),
- parameter and command substitution occur and
- .B \e
- quotes the characters
- .BR \e ,
- .BR \*` ,
- \f3"\fP,
- and
- .BR $ .
- The meaning of
- .B "$\(**"
- and
- .B "$@"
- is identical when not quoted or when used as a variable assignment value
- or as a file name.
- However, when used as a command argument,
- .B
- "$\(**"
- is equivalent to
- \f3"$1\fP\f2d\fP\f3\|$2\fP\f2d\fP\|.\|.\|.\f3"\fP,
- where
- .I d
- is the first character of the
- .SM
- .B IFS
- variable, whereas
- .B
- "$@"
- is equivalent to
- .B
- "$1"\|
- .B
- "$2"\|
- \&.\|.\|.\^.
- Inside grave quote marks
- (\f3\*`\^\*`\fP),
- .B \e
- quotes the characters
- .BR \e ,
- .BR \*` ,
- and
- .BR $ .
- If the grave quotes occur within double quotes then
- .B \e
- also quotes the character
- \f3"\fP.
- .PP
- The special meaning of reserved words or aliases can be removed by quoting any
- character of the reserved word.
- The recognition of function names or built-in command names listed below
- cannot be altered by quoting them.
- .SS Arithmetic Evaluation.
- The shell performs arithmetic evaluation for
- arithmetic substitution, to evaluate an arithmetic command,
- to evaluate an indexed array subscript,
- and to evaluate arguments to
- the built-in commands
- .B shift\^
- and
- .BR let .
- Evaluations are performed using
- double precision floating point
- arithmetic.
- Floating point constants follow the ANSI-C programming language
- conventions.
- Integer constants are of the form
- \*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP
- where
- .I base\^
- is a decimal number between two and sixty-four
- representing the arithmetic base
- and
- .I n\^
- is a number in that base.
- The digits above 9 are represented
- by the lower case characters, the upper case characters,
- .BR @ ,
- and
- .B _
- respectively.
- For bases less than 36, upper and lower case
- character can be used interchangeably.
- If
- .I base\^
- is omitted
- then base 10 is used.
- .PP
- An arithmetic expression uses the same syntax, precedence, and
- associativity of
- expression as the C language.
- All the C language operators
- that apply to floating point quantities can be used.
- In addition, when the value of an arithmetic variable
- or sub-expression can be represented as a long integer,
- all C language integer arithmetic operations can be performed.
- Variables can be referenced by name within an arithmetic expression
- without using the parameter expansion syntax.
- When a variable is referenced, its value is evaluated as
- an arithmetic expression.
- The following math library functions can be used with an arithmetic
- expression:
- .if t .RS
- .PP
- .B
- .if n abs acos asin atan cos cosh exp int log sin sinh sqrt tan tanh
- .if t abs acos asin atan cos cosh exp int log sin sinh sqrt tan tanh
- .if t .RE
- .PP
- An internal representation of a
- .I variable\^
- as a double precision floating point can be specified with the
- \f3\-E\fP \*(OK\f2n\^\fP\*(CK
- or
- \f3\-F\fP \*(OK\f2n\^\fP\*(CK
- option of the
- .B typeset
- special built-in command.
- The
- .B \-E
- option causes the expansion of the value to be represented using
- scientific notation when it is expanded.
- The optional option argument
- .I n
- defines the number of significant figures.
- The
- .B \-F
- option causes the expansion to be represented as a floating decimal number
- when it is expanded.
- The optional option argument
- .I n
- defines the number of places after the decimal point in this case.
- .PP
- An internal integer representation of a
- .I variable\^
- can be specified with the
- \f3\-i\fP \*(OK\f2n\^\fP\*(CK
- option of the
- .B typeset
- special built-in command.
- The optional option argument
- .I n
- specifies an arithmetic base to be used when expanding the variable.
- If you do not specify an arithmetic base,
- the first assignment to the
- variable determines the arithmetic base.
- .PP
- Arithmetic evaluation is performed on the value of each
- assignment to a variable with the
- .BR \-E ,
- .BR \-F ,
- or
- .B \-i
- attribute.
- Assigning a floating point number to a
- variable whose type is an integer causes the fractional
- part to be truncated.
- .PP
- .SS Prompting.
- When used interactively,
- the shell prompts with the value of
- .SM
- .B PS1
- after expanding it for parameter expansion, command substitution, and
- arithmetic substitution,
- before reading a command.
- In addition, each single
- .B !
- in the prompt is replaced by the command number.
- A
- .B !!
- is required to place
- .B !
- in the prompt.
- If at any time a new-line is typed and further input is needed
- to complete a command, then the secondary prompt
- (i.e., the value of
- .BR \s-1PS2\s+1 )
- is issued.
- .SS Conditional Expressions.
- A
- .I "conditional expression"
- is used with the
- .B [[
- compound command to test attributes of files and to compare
- strings.
- Field splitting and file name generation are
- not performed on the words between
- .B [[
- and
- .BR ]] .
- Each expression can be constructed from one or more
- of the following unary or binary expressions:
- .PD 0
- .TP
- \f2string\fP
- True, if
- .I string
- is not null.
- .TP
- \f3\-a\fP \f2file\fP
- Same is \f3\-e\fP below.
- This is obsolete.
- .TP
- \f3\-b\fP \f2file\fP
- True, if
- .I file
- exists and is a block special file.
- .TP
- \f3\-c\fP \f2file\fP
- True, if
- .I file
- exists and is a character special file.
- .TP
- \f3\-d\fP \f2file\fP
- True, if
- .I file
- exists and is a directory.
- .TP
- \f3\-e\fP \f2file\fP
- True, if
- .I file
- exists.
- .TP
- \f3\-f\fP \f2file\fP
- True, if
- .I file
- exists and is an ordinary file.
- .TP
- \f3\-g\fP \f2file\fP
- True, if
- .I file
- exists and is has its setgid bit set.
- .TP
- \f3\-k\fP \f2file\fP
- True, if
- .I file
- exists and is has its sticky bit set.
- .TP
- \f3\-n\fP \f2string\fP
- True, if length of
- .I string
- is non-zero.
- .TP
- \f3\-o\fP \f2option\fP
- True, if option named
- .I option
- is on.
- .TP
- \f3\-p\fP \f2file\fP
- True, if
- .I file
- exists and is a fifo special file or a pipe.
- .TP
- \f3\-r\fP \f2file\fP
- True, if
- .I file
- exists and is readable by current process.
- .TP
- \f3\-s\fP \f2file\fP
- True, if
- .I file
- exists and has size greater than zero.
- .TP
- \f3\-t\fP \f2fildes\fP
- True, if file descriptor number
- .I fildes
- is open and associated with a terminal device.
- .TP
- \f3\-u\fP \f2file\fP
- True, if
- .I file
- exists and is has its setuid bit set.
- .TP
- \f3\-w\fP \f2file\fP
- True, if
- .I file
- exists and is writable by current process.
- .TP
- \f3\-x\fP \f2file\fP
- True, if
- .I file
- exists and is executable by current process.
- If
- .I file
- exists and is a directory, then true if the current process
- has permission to search in the directory.
- .TP
- \f3\-z\fP \f2string\fP
- True, if length of
- .I string
- is zero.
- .TP
- \f3\-L\fP \f2file\fP
- True, if
- .I file
- exists and is a symbolic link.
- .TP
- \f3\-O\fP \f2file\fP
- True, if
- .I file
- exists and is owned by the effective user id of this process.
- .TP
- \f3\-G\fP \f2file\fP
- True, if
- .I file
- exists and its group matches the effective group id of this process.
- .TP
- \f3\-S\fP \f2file\fP
- True, if
- .I file
- exists and is a socket.
- .TP
- \f2file1\fP \f3\-nt\fP \f2file2\fP
- True, if
- .I file1
- exists and is newer than
- .IR file2 .
- .TP
- \f2file1\fP \f3\-ot\fP \f2file2\fP
- True, if
- .I file1
- exists and is older than
- .IR file2 .
- .TP
- \f2file1\fP \f3\-ef\fP \f2file2\fP
- True, if
- .I file1
- and
- .I file2
- exist and refer to the same file.
- .TP
- \f2string\fP \f3==\fP \f2pattern\fP
- True, if
- .I string
- matches
- .IR pattern .
- Any part of
- .I pattern\^
- can be quoted to cause it to be matched as a string.
- .TP
- \f2string\fP \f3=\fP \f2pattern\fP
- Same as \f3==\fP above, but is obsolete.
- .TP
- \f2string\fP \f3!=\fP \f2pattern\fP
- True, if
- .I string
- does not match
- .IR pattern .
- .TP
- \f2string1\fP \f3<\fP \f2string2\fP
- True, if
- .I string1
- comes before
- .I string2
- based on ASCII value of their characters.
- .TP
- \f2string1\fP \f3>\fP \f2string2\fP
- True, if
- .I string1
- comes after
- .I string2
- based on ASCII value of their characters.
- .PP
- The following obsolete arithmetic comparisons are also permitted:
- .PD 0
- .TP
- \f2exp1\fP \f3\-eq\fP \f2exp2\fP
- True, if
- .I exp1
- is equal to
- .IR exp2 .
- .TP
- \f2exp1\fP \f3\-ne\fP \f2exp2\fP
- True, if
- .I exp1
- is not equal to
- .IR exp2 .
- .TP
- \f2exp1\fP \f3\-lt\fP \f2exp2\fP
- True, if
- .I exp1
- is less than
- .IR exp2 .
- .TP
- \f2exp1\fP \f3\-gt\fP \f2exp2\fP
- True, if
- .I exp1
- is greater than
- .IR exp2 .
- .TP
- \f2exp1\fP \f3\-le\fP \f2exp2\fP
- True, if
- .I exp1
- is less than or equal to
- .IR exp2 .
- .TP
- \f2exp1\fP \f3\-ge\fP \f2exp2\fP
- True, if
- .I exp1
- is greater than or equal to
- .IR exp2 .
- .PD
- .PP
- In each of the above expressions, if
- .I file
- is of the form
- \f3/dev/fd/\fP\f2n\fP,
- where
- .I n
- is an integer,
- then the test is applied to the open file whose
- descriptor number is
- .IR n .
- .PP
- A compound expression can be constructed from these primitives by
- using any of the following, listed in decreasing order of precedence.
- .PD 0
- .TP
- \f3(\fP\f2expression\fP\f3)\fP
- True, if
- .I expression
- is true.
- Used to group expressions.
- .TP
- \f3!\fP \f2expression\fP
- True if
- .I expression
- is false.
- .TP
- \f2expression1\fP \f3&&\fP \f2expression2\fP
- True, if
- .I expression1
- and
- .I expression2
- are both true.
- .TP
- \f2expression1\fP \f3\(bv\(bv\fP \f2expression2\fP
- True, if either
- .I expression1
- or
- .I expression2
- is true.
- .PD
- .SS Input/Output.
- Before a command is executed, its input and output
- may be redirected using a special notation interpreted by the shell.
- The following may appear anywhere in a simple-command
- or may precede or follow a
- .I command\^
- and are
- .I not\^
- passed on to the invoked command.
- Command substitution, parameter expansion,
- and arithmetic substitution occur before
- .I word\^
- or
- .I digit\^
- is used except as noted below.
- File name generation
- occurs only if the shell is interactive and
- the pattern matches a single file,
- Field splitting is not performed.
- .TP 14
- .BI < word
- Use file
- .I word\^
- as standard input (file descriptor 0).
- .TP
- .BI > word
- Use file
- .I word\^
- as standard output (file descriptor 1).
- If the file does not exist then it is created.
- If the file exists, and the
- .B noclobber
- option is on,
- this causes an error;
- otherwise, it is truncated to zero length.
- .TP
- .BI >| word
- Sames as
- .BR > ,
- except that it overrides the
- .B noclobber
- option.
- .TP
- .BI >> word
- Use file
- .I word\^
- as standard output.
- If the file exists then output is appended to it (by first seeking to the end-of-file);
- otherwise, the file is created.
- .TP
- .BI <> word
- Open file
- .I word\^
- for reading and writing
- as standard input.
- .TP
- \f3<<\fP\*(OK\f3\-\fP\*(CK\f2word\fP
- The shell input is read up to a line that is the same as
- .IR word
- after any quoting has been removed remove,
- or to an end-of-file.
- No parameter substitution, command substitution, arithmetic substitution or
- file name generation is performed on
- .IR word .
- The resulting document,
- called a
- .IR here-document ,
- becomes
- the standard input.
- If any character of
- .I word\^
- is quoted, then no interpretation
- is placed upon the characters of the document;
- otherwise, parameter expansion, command substitution, and arithmetic
- substitution occur,
- .B \enew-line
- is ignored,
- and
- .B \e
- must be used to quote the characters
- .BR \e ,
- .BR $ ,
- .BR \*` .
- If
- .B \-
- is appended to
- .BR << ,
- then all leading tabs are stripped from
- .I word\^
- and from the document.
- .TP
- .BI <& digit
- The standard input is duplicated from file descriptor
- .I digit
- (see
- .IR dup (2)).
- Similarly for the standard output using
- \f3>&\^\f2digit\fR.
- .TP
- .B <&\-
- The standard input is closed.
- Similarly for the standard output using
- .BR >&\- .
- .TP
- .B <&p
- The input from the co-process is moved to standard input.
- .TP
- .B >&p
- The output to the co-process is moved to standard output.
- .PP
- If one of the above is preceded by a digit,
- then the
- file descriptor number referred to is that specified
- by the digit
- (instead of the default 0 or 1).
- For example:
- .RS
- .PP
- \&.\|.\|. \|2>&1
- .RE
- .PP
- means file descriptor 2 is to be opened
- for writing as a duplicate
- of file descriptor 1.
- .PP
- The order in which redirections are specified is significant.
- The shell evaluates each redirection in terms of the
- .RI ( "file descriptor" ", " file )
- association at the time of evaluation.
- For example:
- .RS
- .PP
- \&.\|.\|. \|1>\f2fname\^\fP 2>&1
- .RE
- .PP
- first associates file descriptor 1 with file
- .IR fname\^ .
- It then associates file descriptor 2 with the file associated with file
- descriptor 1 (i.e.
- .IR fname\^ ).
- If the order of redirections were reversed, file descriptor 2 would be associated
- with the terminal (assuming file descriptor 1 had been) and then file descriptor
- 1 would be associated with file
- .IR fname\^ .
- .PP
- If a command is followed by
- .B &
- and job control is not active,
- then the default standard input
- for the command
- is the empty file
- .BR /dev/null .
- Otherwise, the environment for the execution of a command contains the
- file descriptors of the invoking shell as modified by
- input/output specifications.
- .SS Environment.
- The
- .I environment\^
- (see
- .IR environ (7))
- is a list of name-value pairs that is passed to
- an executed program in the same way as a normal argument list.
- The names must be
- .I identifiers\^
- and the values are character strings.
- The shell interacts with the environment in several ways.
- On invocation, the shell scans the environment
- and creates a
- variable
- for each name found,
- giving it the corresponding value and attributes and marking it
- .IR export .
- Executed commands inherit the environment.
- If the user modifies the values of these
- variables
- or creates new ones,
- using the
- .B export
- or
- .B typeset \-x
- commands they become part of the
- environment.
- The environment seen by any executed command is thus composed
- of any name-value pairs originally inherited by the shell,
- whose values may be modified by the current shell,
- plus any additions
- which must be noted in
- .B export
- or
- .B typeset \-x
- commands.
- .PP
- The environment for any
- .I simple-command\^
- or function
- may be augmented by prefixing it with one or more variable assignments.
- A variable assignment argument is a word of the form
- .IR identifier=value .
- Thus:
- .RS
- .PP
- \s-1TERM\s+1=450 \|cmd \|args and
- .br
- (export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args)
- .RE
- .PP
- are equivalent (as far as the above execution of
- .I cmd\^
- is concerned except for special built-in commands listed below \-
- those that are
- preceded with a dagger).
- .PP
- If the obsolete
- .B \-k
- option is set,
- .I all\^
- variable assignment arguments are placed in the environment,
- even if they occur after the command name.
- The following
- first prints
- .B "a=b c"
- and then
- .BR c :
- .PP
- .RS
- .nf
- echo \|a=b \|c
- set \|\-k
- echo \|a=b \|c
- .fi
- .RE
- This feature is intended for use with scripts written
- for early versions of the shell and its use in new scripts
- is strongly discouraged.
- It is likely to disappear someday.
- .SS Functions.
- .PP
- For historical reasons, there are two
- ways to define functions,
- the
- .IB name (\^)
- syntax and
- the
- .B function
- .I name\^
- syntax, described in the
- .I Commands
- section above.
- Shell functions are read in and stored internally.
- Alias names are resolved when the function is read.
- Functions are executed like commands with the arguments
- passed as positional parameters.
- (See
- .I Execution
- below.)
- .PP
- Functions defined by the
- .B function
- .I name
- syntax and called by name execute in the same process as the caller and
- share all files
- and present working directory with the
- caller.
- Traps caught by the caller are reset to their default action
- inside the function.
- A trap condition that is not caught or ignored by the
- function causes the function to terminate and the condition
- to be passed on to the caller.
- A trap on
- .SM
- .B EXIT
- set inside a function
- is executed after the function completes in the environment
- of the caller.
- Ordinarily,
- variables are shared between the calling program
- and the function.
- However,
- the
- .B typeset
- special built-in command used within a function
- defines local variables whose scope includes
- the current function and
- all functions it calls.
- Errors within functions return control to the caller.
- .PP
- Functions defined with the
- .IB name (\^)
- syntax and functions defined with the
- .B function
- .I name
- syntax that are invoked with the \f3\s+2.\s-2\fP
- special built-in
- are executed in the caller's
- environment and share all variables
- and traps with the caller.
- Errors within these function executions cause the script that contains
- them to abort.
- .PP
- The special built-in command
- .B return
- is used to return
- from function calls.
- .PP
- Function names
- can be listed with the
- .B \-f
- or
- .B +f
- option of the
- .B typeset
- special built-in command.
- The text of functions, when available, will also
- be listed with
- .BR \-f .
- Functions can be undefined with the
- .B \-f
- option of the
- .B unset
- special built-in command.
- .PP
- Ordinarily, functions are unset when the shell executes a shell script.
- Functions that need to be defined across separate
- invocations of the shell should
- be placed in a directory and the
- .B
- .SM
- FPATH
- variable should contains the name of this directory.
- They may also
- be specified in the
- .B
- .SM
- ENV
- file.
- .SS Jobs.
- .PP
- If the
- .B monitor
- option of the
- .B set
- command is turned on,
- an interactive shell associates a \fIjob\fR with each pipeline.
- It keeps
- a table of current jobs, printed by the
- .B jobs
- command, and assigns them small integer numbers.
- When a job is started asynchronously with
- .BR & ,
- the shell prints a line which looks
- like:
- .PP
- .DT
- [1] 1234
- .PP
- indicating that the job which was started asynchronously was job number
- 1 and had one (top-level) process, whose process id was 1234.
- .PP
- This paragraph and the next require features that are
- not in all versions of UNIX and may not apply.
- If you are running a job and wish to do something else you may hit the key
- \fB^Z\fR (control-Z) which sends a STOP signal to the current job.
- The shell will then normally indicate that the job has been `Stopped',
- and print another prompt.
- You can then manipulate the state of this job,
- putting it in the background with the
- .B bg
- command, or run some other
- commands and then eventually bring the job back into the foreground with
- the foreground command
- .BR fg .
- A \fB^Z\fR takes effect immediately and
- is like an interrupt in that pending output and unread input are discarded
- when it is typed.
- .PP
- A job being run in the background will stop if it tries to read
- from the terminal.
- Background jobs are normally allowed to produce output,
- but this can be disabled by giving the command ``stty tostop''.
- If you set this
- tty option, then background jobs will stop when they try to produce
- output like they do when they try to read input.
- .PP
- There are several ways to refer to jobs in the shell.
- A job can be referred to by the process id of any process of the job
- or by one of the following:
- .PD 0
- .TP
- .BI % number
- The job with the given number.
- .TP
- .BI % string
- Any job whose command line begins with
- .IR string .
- .TP
- .BI %? string
- Any job whose command line contains
- .IR string .
- .TP
- .BI %%
- Current job.
- .TP
- .BI %+
- Equivalent to
- .BR %% .
- .TP
- .BI %\-
- Previous job.
- .PD
- .PP
- The shell learns immediately whenever a process changes state.
- It normally informs you whenever a job becomes blocked so that
- no further progress is possible, but only just before it prints
- a prompt.
- This is done so that it does not otherwise disturb your work.
- The
- .B notify
- option causes
- the shell to print these job change messages
- as soon as they occur.
- .PP
- When the
- .B monitor
- option is on, each background job that completes
- triggers any trap set for
- .BR CHLD .
- .PP
- When you try to leave the shell while jobs are running or stopped, you will
- be warned that `You have stopped(running) jobs.'
- You may use the
- .B jobs
- command to see what they are.
- If you immediately try to
- exit again, the shell will not warn you a second time, and the stopped
- jobs will be terminated.
- When a login shell receives a HUP signal, it sends
- a HUP signal to each job that has not been disowned witha the
- .B disown
- built-in command described below.
- .SS Signals.
- The \s-1INT\s+1 and \s-1QUIT\s+1 signals for an invoked
- command are ignored if the command is followed by
- .B &
- and the
- .B monitor
- option is not active.
- Otherwise, signals have the values
- inherited by the shell from its parent
- (but see also
- the
- .B trap
- built-in command below).
- .SS Execution.
- Each time a command is read, the above substitutions
- are carried out.
- If the command name matches one
- of the
- .I "Special built-in Commands\^"
- listed below,
- it is executed within the
- current shell process.
- Next, the command name is checked to see if
- it matches a user defined function.
- If it does,
- the positional parameters are saved
- and then reset to the arguments of the
- .I function\^
- call.
- When the
- .I function\^
- completes or issues a
- .BR return ,
- the positional parameter list is restored.
- For functions defined with the
- .B function
- .I name\^
- syntax,
- any trap set on
- .SM
- .B EXIT
- within the function is executed.
- The value of a
- .I function\^
- is the value of the last command executed.
- A function is also executed in the
- current shell process.
- If a command name is not a
- .I "special built-in command\^"
- or a user defined
- .IR function ,
- but it is one of the built-in commands listed below
- it is executed in the current shell process.
- .PP
- The shell variable
- .B
- .SM PATH
- defines the search path for
- the directory containing the command.
- Alternative directory names are separated by
- a colon
- .RB ( : ).
- The default path is
- .B /bin:/usr/bin:
- (specifying
- .BR /bin ,
- .BR /usr/bin ,
- and the current directory
- in that order).
- The current directory can be specified by
- two or more adjacent colons, or by a colon
- at the beginning or end of the path list.
- If the command name contains a \f3/\fP then the search path
- is not used.
- Otherwise, each directory in the path is
- searched for an executable file that is not a directory.
- If the shell
- determines that there is a built-in version
- of a command corresponding to a given pathname,
- this built-in is invoked in the current process.
- A process is created and
- an attempt is made to execute the command via
- .IR exec (2).
- If the file has execute permission but is not an
- .B a.out
- file,
- it is assumed to be a file containing shell commands.
- A separate shell is spawned to read it.
- All non-exported variables are removed in this case.
- If the shell command
- file doesn't have read permission,
- or if the
- .I setuid
- and/or
- .I setgid
- bits are set on the file,
- then the shell executes an agent whose job it is to
- set up the permissions and execute the shell with the
- shell command file passed down as an open file.
- A parenthesized command is executed in
- a sub-shell without removing non-exported variables.
- .SS Command Re-entry.
- The text of the last
- .B
- .SM
- HISTSIZE
- (default 128)
- commands entered from a terminal device
- is saved in a
- .I history
- file.
- The file
- .B \s-1$HOME\s+1/.sh_history
- is used if the
- .B
- .SM
- HISTFILE
- variable is not set
- or if the file it names is not writable.
- A shell can access the commands of
- all
- .I interactive
- shells which use the same named
- .SM
- .BR HISTFILE .
- The built-in command
- .B hist\^
- is used to list or
- edit a portion of this file.
- The portion of the file to be edited or listed can be selected by
- number or by giving the first character or
- characters of the command.
- A single command or range of commands can be specified.
- If you do not specify an editor program as
- an argument to
- .B hist\^
- then the value of the variable
- .SM
- .B HISTEDIT
- is used.
- If
- .SM
- .B HISTEDIT
- is unset, the obsolete variable
- .SM
- .B FCEDIT
- is used.
- If
- .SM
- .B FCEDIT
- is not defined then
- .B /bin/ed
- is used.
- The edited command(s) is printed and re-executed upon
- leaving the editor unless you quit without writing.
- The
- .B \-s
- option
- (
- an in obsolete versions, the editor name
- .B \-
- )
- is used to skip the editing phase and
- to re-execute the command.
- In this case a substitution parameter of the form
- \f2old\fP\f3=\fP\f2new\fP
- can be used to modify the command before execution.
- For example, with the preset alias
- .BR r ,
- which is aliased to
- .BR "\(fmhist \-s\(fm" ,
- typing
- `\f3r bad=good c\fP'
- will re-execute the most recent command which starts with the letter
- .BR c ,
- replacing the first occurrence of the string
- .B bad
- with the string
- .BR good .
- .SS In-line Editing Options
- Normally, each command line entered from a terminal device is simply
- typed followed by a \f3new-line\fP (`RETURN' or `LINE\ FEED').
- If either the
- .BR emacs ,
- .BR gmacs ,
- or
- .B vi
- option is active, the user can edit the command line.
- To be in either of these edit modes
- .B set
- the corresponding
- option.
- An editing option is automatically selected each time the
- .SM
- .B VISUAL
- or
- .SM
- .B EDITOR
- variable is assigned a value ending in either of these
- option names.
- .PP
- The editing features require that the user's terminal
- accept `RETURN' as carriage return without line feed
- and that a space (`\ ') must overwrite the current character on
- the screen.
- .PP
- The editing modes implement a concept where the user is looking through a
- window at the current line.
- The window width is the value of
- .SM
- .B COLUMNS
- if it is defined, otherwise 80.
- If the window width is too small to display the prompt and leave
- at least 8 columns to enter input, the prompt is truncated from the
- left.
- If the line is longer than the window width minus two, a mark is
- displayed at the end of the window to notify the user.
- As the cursor moves and reaches the window boundaries the window will be
- centered about the cursor.
- The mark is a
- .BR > " (<" ,
- .BR * )
- if the line extends on the
- right (left, both) side(s) of the window.
- .PP
- The search commands in each edit mode provide access to the history file.
- Only strings are matched, not patterns, although a leading
- .B ^
- in the string restricts the match
- to begin at the first character in the line.
- .PP
- Each of the edit modes has an operation to list the files
- or commands that match a partially entered word.
- When applied to the first word on the line,
- or the first word after a
- .BR ; ,
- .BR \(bv ,
- .BR & ,
- or
- .BR ( ,
- and the word does not begin with
- .B \(ap
- or contain a
- .BR / ,
- the list of aliases, functions, and executable commands
- defined by the
- .B
- .SM PATH
- variable that could match the partial word is displayed.
- Otherwise, the list of files that match the given
- word is displayed.
- If the partially entered word does not contain any
- file expansion characters, a
- .B *
- is appended before generating these lists.
- After displaying the generated list, the input line
- is redrawn.
- These operations are called command name listing and file name listing,
- respectively.
- There are additional operations, referred to as command name
- completion and file name completion, which compute the list
- of matching commands or files, but instead of printing the list,
- replace
- the current word with a complete or partial match.
- For file name completion,
- if the match is unique, a
- .B /
- is appended if the file is a directory and a space is
- appended if the file is not a directory.
- Otherwise, the longest common prefix for all the matching
- files replaces the word.
- For command name completion, only the portion of the file names
- after the last
- .B /
- are used to find the longest command prefix.
- If only a single name matches this prefix, then the
- word is replaced with the command name followed by a space.
- .SS Key Bindings.
- The
- .B
- .SM KEYBD
- trap can be used to intercept keys as they are typed
- and change the characters that are actually seen by
- the shell.
- This trap is executed after each character
- ( or sequence of characters when the first character is
- .B ESC
- ) is entered while reading from a terminal.
- The variable
- .B .sh.edchar
- contains the character or character sequence which
- generated the trap.
- Changing the value of
- .B .sh.edchar
- in the trap action causes the shell to behave as if the
- new value were entered from the keyboard rather than
- the original value.
- .PP
- The variable
- .B .sh.edcol
- is set to the input column number of the cursor at the time
- of the input.
- The variable
- .B .sh.edmode
- is set to
- .B ESC
- when in vi insert mode (see below) and is null otherwise.
- By prepending
- .B ${.sh.editmode}
- to a value assigned to
- .B .sh.edchar
- it will cause the shell
- to change to control mode if it is not already in this mode.
- .PP
- This trap is not invoked for characters entered as arguments to
- editing directives, or while reading input for a character search.
- .SS Emacs Editing Mode.
- This mode is entered by enabling either the
- .I emacs
- or
- .I gmacs
- option.
- The only difference between these two modes is the way
- they handle
- .BR ^T .
- To edit, the user
- moves the cursor to the point needing correction and
- then inserts or deletes characters or words as needed.
- All the editing commands are control characters or escape
- sequences.
- The notation for control characters is caret (
- .B ^
- ) followed
- by the character.
- For example,
- .B ^F
- is the notation for control
- .BR F .
- This is entered by depressing `f' while holding down the
- `CTRL' (control) key.
- The `SHIFT' key is
- .I not
- depressed.
- (The notation
- .B ^?
- indicates the DEL (delete) key.)
- .PP
- The notation for escape sequences is
- .B M-
- followed by a
- character.
- For example,
- .B M-f
- (pronounced Meta f)
- is entered by depressing ESC
- (ascii
- .BR 033 )
- followed by `f'.
- .RB ( M-F
- would be the notation for ESC followed by `SHIFT' (capital) `F'.)
- .PP
- All edit commands
- operate from any place on the line
- (not just at the beginning).
- Neither the "RETURN" nor the "LINE FEED" key is
- entered after edit commands except when noted.
- .PP
- .PD 0
- .TP 10
- .BI ^F
- Move cursor forward (right) one character.
- .PP
- .TP 10
- .BI M-f
- Move cursor forward one word.
- (The
- .B emacs
- editor's idea of a word is a string of characters
- consisting of only letters, digits and underscores.)
- .PP
- .TP 10
- .BI ^B
- Move cursor backward (left) one character.
- .PP
- .TP 10
- .BI M-b
- Move cursor backward one word.
- .PP
- .TP 10
- .BI ^A
- Move cursor to start of line.
- .PP
- .TP 10
- .BI ^E
- Move cursor to end of line.
- .PP
- .TP 10
- .BI ^] char
- Move cursor forward to character
- .I char
- on current line.
- .PP
- .TP 10
- .BI M-^] char
- Move cursor backward to character
- .I char
- on current line.
- .PP
- .TP 10
- .BI ^X^X
- Interchange the cursor and mark.
- .PP
- .TP 10
- .I erase
- (User defined erase character as defined
- by the
- .IR stty (1)
- command, usually
- .B ^H
- or
- .BR # .)
- Delete previous character.
- .PP
- .TP 10
- .BI ^D
- Delete current character.
- .PP
- .TP 10
- .BI M-d
- Delete current word.
- .PP
- .TP 10
- .BI M-^H
- (Meta-backspace) Delete previous word.
- .PP
- .TP 10
- .BI M-h
- Delete previous word.
- .PP
- .TP 10
- .BI M-^?
- (Meta-DEL) Delete previous word (if your interrupt character is
- .B ^?
- (DEL, the default) then this command will not work).
- .PP
- .TP 10
- .BI ^T
- Transpose current character with next character in
- .I emacs
- mode.
- Transpose two previous characters in
- .I gmacs
- mode.
- .PP
- .TP 10
- .BI ^C
- Capitalize current character.
- .PP
- .TP 10
- .BI M-c
- Capitalize current word.
- .PP
- .TP 10
- .BI M-l
- Change the current word to lower case.
- .PP
- .TP 10
- .BI ^K
- Delete from the cursor to the end of the line.
- If preceded by a numerical parameter whose value is less than the
- current cursor position, then delete from given position
- up to the cursor.
- If preceded by a numerical parameter whose value is greater than the
- current cursor position, then delete from cursor up to
- given cursor position.
- .PP
- .TP 10
- .BI ^W
- Kill from the cursor to the mark.
- .PP
- .TP 10
- .BI M-p
- Push the region from the cursor to the mark on the stack.
- .PP
- .TP 10
- .I kill
- (User defined kill character as defined
- by the stty command, usually
- .B ^G
- or
- .BR @ .)
- Kill the entire current line.
- If two
- .I kill
- characters are entered in succession, all
- kill characters from then on cause a line feed
- (useful when using paper terminals).
- .PP
- .TP 10
- .BI ^Y
- Restore last item removed from line. (Yank item back to the line.)
- .PP
- .TP 10
- .BI ^L
- Line feed and print current line.
- .PP
- .TP 10
- .BI ^@
- (Null character) Set mark.
- .PP
- .TP 10
- .BI M- space
- (Meta space) Set mark.
- .PP
- .TP 10
- .BI ^J
- (New\ line) Execute the current line.
- .PP
- .TP 10
- .BI ^M
- (Return) Execute the current line.
- .PP
- .TP 10
- .I eof
- End-of-file character,
- normally
- .BR ^D ,
- is processed as an End-of-file only
- if the current line is null.
- .PP
- .TP 10
- .BI ^P
- Fetch previous command.
- Each time
- .B ^P
- is entered
- the previous command back in time is accessed.
- Moves back one line when not on the first line of a multi-line command.
- .PP
- .TP 10
- .BI M-<
- Fetch the least recent (oldest) history line.
- .PP
- .TP 10
- .BI M->
- Fetch the most recent (youngest) history line.
- .PP
- .TP 10
- .BI ^N
- Fetch next command line.
- Each time
- .B ^N
- is entered
- the next command line forward in time is accessed.
- .PP
- .TP 10
- .BI ^R string
- Reverse search history for a previous command line containing
- .IR string .
- If a parameter of zero is given, the search is forward.
- .I String
- is terminated by a "RETURN" or "NEW\ LINE".
- If string is preceded by a
- .BR ^ ,
- the matched line must begin with
- .IR string .
- If
- .I string
- is omitted,
- then the next command line containing the most recent
- .I string
- is accessed.
- In this case a parameter of zero
- reverses the direction of the search.
- .PP
- .TP 10
- .B ^O
- Operate \- Execute the current line and fetch
- the next line relative to current line from the
- history file.
- .PP
- .TP 10
- .BI M- digits
- (Escape) Define numeric parameter, the digits
- are taken as a parameter to the next command.
- The commands that accept a parameter are
- .BR ^F ,
- .BR ^B ,
- .IR erase ,
- .BR ^C ,
- .BR ^D ,
- .BR ^K ,
- .BR ^R ,
- .BR ^P ,
- .BR ^N ,
- .BR ^] ,
- .BR M-. ,
- .BR M-^] ,
- .BR M-_ ,
- .BR M-b ,
- .BR M-c ,
- .BR M-d ,
- .BR M-f ,
- .BR M-h ,
- .B M-l
- and
- .BR M-^H .
- .PP
- .TP 10
- .BI M- letter
- Soft-key \- Your alias list is searched for an
- alias by the name
- .BI _ letter
- and if an alias of this name is defined, its
- value will be inserted on the input queue.
- The
- .I letter
- must not be one of the above meta-functions.
- .PP
- .TP 10
- .BI M-[ letter
- Soft-key \- Your alias list is searched for an
- alias by the name
- .BI _\&_ letter
- and if an alias of this name is defined, its
- value will be inserted on the input queue.
- The can be used to program functions keys on many terminals.
- .PP
- .TP 10
- .B M-.
- The last word of the previous command is inserted
- on the line.
- If preceded by a numeric parameter, the value
- of this parameter determines which word to insert rather than
- the last word.
- .PP
- .TP 10
- .B M-_
- Same as
- .BR M-. .
- .PP
- .TP 10
- .B M-*
- Attempt file name generation on the current word.
- An asterisk is appended if the word doesn't match any file
- or contain any special
- pattern characters.
- .PP
- .TP 10
- Command or file name completion as described above.
- .PP
- .TP 10
- .B M-=
- Command or file name listing as described above.
- .PP
- .TP 10
- .BI ^U
- Multiply parameter of next command by 4.
- .PP
- .TP 10
- .BI \e
- Escape next character.
- Editing characters, the user's erase, kill and
- interrupt (normally
- .BR ^? )
- characters
- may be entered
- in a command line or in a search string if preceded by a
- .BR \e .
- The
- .B \e
- removes the next character's
- editing features (if any).
- .PP
- .TP 10
- .BI ^V
- Display version of the shell.
- .PP
- .TP 10
- .BI M-\#
- If the line does not begin with a
- .BR \# ,
- a
- .B \#
- is inserted
- at the beginning of the line
- and after each new-line,
- and the line is entered.
- This causes a comment to be inserted in the history file.
- If the line begins with a
- .BR \# ,
- the
- .B \#
- is deleted and one
- .B \#
- after each new-line is also deleted.
- .PD
- .SS Vi Editing Mode.
- There are two typing modes.
- Initially, when you enter a command you are in the
- .I input\^
- mode.
- To edit, the user enters
- .I control\^
- mode by typing ESC
- .RB ( 033 )
- and moves the cursor to the point needing correction and
- then inserts or deletes characters or words as needed.
- Most control commands accept an optional repeat
- .I count
- prior to the command.
- .P
- When in
- .B vi
- mode on most systems,
- canonical processing is initially enabled and the
- command will be echoed again if the speed is 1200 baud or greater and it
- contains any control characters or less than one second has elapsed
- since the prompt was printed.
- The ESC character terminates canonical processing for the remainder of the command
- and the user can then modify the command line.
- This scheme has the advantages of canonical processing with the type-ahead
- echoing of raw mode.
- .P
- If the option
- .B viraw\^
- is also set, the terminal will always have canonical processing
- disabled.
- This mode is implicit for systems that do not support two
- alternate end of line delimiters,
- and may be helpful for certain terminals.
- .SS "\ \ \ \ \ Input Edit Commands"
- .PP
- .RS
- By default the editor is in input mode.
- .PD 0
- .TP 10
- .I erase
- (User defined erase character as defined
- by the stty command, usually
- .B ^H
- or
- .BR # .)
- Delete previous character.
- .TP 10
- .BI ^W
- Delete the previous blank separated word.
- One some systems the \f3viraw\fP option
- may be required for this to work.
- .TP 10
- .I eof
- As the first character of the line causes
- the shell to terminate unless the \f3ignoreeof\fP
- option is set.
- Otherwise this character is ignored.
- .TP 10
- .BI ^V
- Escape next character.
- Editing characters and the user's erase or kill
- characters may be entered
- in a command line or in a search string if preceded by a
- .BR ^V .
- The
- .B ^V
- removes the next character's
- editing features (if any).
- One some systems the \f3viraw\fP option
- may be required for this to work.
- .TP 10
- .BI \e
- Escape the next
- .I erase
- or
- .I kill
- character.
- .P
- .RE
- .SS "\ \ \ \ \ Motion Edit Commands"
- .RS
- These commands will move the cursor.
- .TP 10
- [\f2count\fP]\f3l\fP
- Cursor forward (right) one character.
- .TP 10
- [\f2count\fP]\f3w\fP
- Cursor forward one alpha-numeric word.
- .TP 10
- [\f2count\fP]\f3W\fP
- Cursor to the beginning of the next word that follows a blank.
- .TP 10
- [\f2count\fP]\f3e\fP
- Cursor to end of word.
- .TP 10
- [\f2count\fP]\f3E\fP
- Cursor to end of the current blank delimited word.
- .TP 10
- [\f2count\fP]\f3h\fP
- Cursor backward (left) one character.
- .TP 10
- [\f2count\fP]\f3b\fP
- Cursor backward one word.
- .TP 10
- [\f2count\fP]\f3B\fP
- Cursor to preceding blank separated word.
- .TP 10
- [\f2count\fP]\f3\(bv\fP
- Cursor to column
- .IR count .
- .TP 10
- [\f2count\fP]\f3f\fP\f2c\fP
- Find the next character \fIc\fP in the current line.
- .TP 10
- [\f2count\fP]\f3F\fP\f2c\fP
- Find the previous character \fIc\fP in the current line.
- .TP 10
- [\f2count\fP]\f3t\fP\f2c\fP
- Equivalent to
- .B f
- followed by
- .BR h .
- .TP 10
- [\f2count\fP]\f3T\fP\f2c\fP
- Equivalent to
- .B F
- followed by
- .BR l .
- .TP 10
- [\f2count\fP]\f3;\fP
- Repeats
- .I count
- times,
- the last single character find command,
- .BR f ,
- .BR F ,
- .BR t ,
- or
- .BR T .
- .TP 10
- [\f2count\fP]\f3,\fP
- Reverses the last single character find command
- .I count
- times.
- .TP 10
- .B 0
- Cursor to start of line.
- .TP 10
- .B ^
- Cursor to first non-blank character in line.
- .TP 10
- .B $
- Cursor to end of line.
- .TP 10
- .B %
- Moves to balancing
- .BR ( ,
- .BR ) ,
- .BR { ,
- .BR } ,
- .BR [ ,
- or
- .BR ] .
- If cursor is not on one of the above characters,
- the remainder of the line is searched for the first
- occurrence of one of the above characters first.
- .RE
- .SS "\ \ \ \ \ Search Edit Commands"
- .RS
- These commands access your command history.
- .TP 10
- [\f2count\fP]\f3k\fP
- Fetch previous command.
- Each time
- .B k
- is entered
- the previous command back in time is accessed.
- .TP 10
- [\f2count\fP]\f3\-\fP
- Equivalent to
- .BR k .
- .TP 10
- [\f2count\fP]\f3j\fP
- Fetch next command.
- Each time
- .B j
- is entered
- the next command forward in time is accessed.
- .TP 10
- [\f2count\fP]\f3+\fP
- Equivalent to
- .BR j .
- .TP 10
- [\f2count\fP]\f3G\fP
- The command number
- .I count
- is fetched.
- The default is the least recent history command.
- .TP 10
- .BI / string
- Search backward through history for a previous command containing
- .IR string .
- .I String
- is terminated by a "RETURN" or "NEW\ LINE".
- If string is preceded by a
- .BR ^ ,
- the matched line must begin with
- .IR string .
- If \fIstring\fP is null the previous string will be used.
- .TP 10
- .BI ? string
- Same as
- .B /
- except that search will be in the forward direction.
- .TP 10
- .B n
- Search for next match of the last pattern to
- .B /
- or
- .B ?
- commands.
- .TP 10
- .B N
- Search for next match of the last pattern to
- .B /
- or
- .BR ? ,
- but in reverse direction.
- .RE
- .SS "\ \ \ \ \ Text Modification Edit Commands"
- .RS
- These commands will modify the line.
- .TP 10
- .B a
- Enter input mode and enter text after the current character.
- .TP 10
- .B A
- Append text to the end of the line.
- Equivalent to
- .BR $a .
- .TP 10
- [\f2count\fP]\f3c\fP\f2motion\fP
- .TP 10
- \f3c\fP[\f2count\fP]\f2motion\fP
- Delete current character through the character that
- .I motion
- would move the cursor to and enter input mode.
- If \fImotion\fP is
- .BR c ,
- the entire line will be deleted and
- input mode entered.
- .TP 10
- .B C
- Delete the current character through the end of line and enter input mode.
- Equivalent to
- .BR c$ .
- .TP 10
- .B S
- Equivalent to
- .BR cc .
- .TP 10
- .B D
- Delete the current character through the end of line.
- Equivalent to
- .BR d$ .
- .TP 10
- [\f2count\fP]\f3d\fP\f2motion\fP
- .TP 10
- \f3d\fP[\f2count\fP]\f2motion\fP
- Delete current character through the character that
- .I motion
- would move to.
- If \fImotion\fP is
- .B d ,
- the entire line will be deleted.
- .TP 10
- .B i
- Enter input mode and insert text before the current character.
- .TP 10
- .B I
- Insert text before the beginning of the line.
- Equivalent to
- .BR 0i .
- .TP 10
- [\f2count\fP]\f3P\fP
- Place the previous text modification before the cursor.
- .TP 10
- [\f2count\fP]\f3p\fP
- Place the previous text modification after the cursor.
- .TP 10
- .B R
- Enter input mode and
- replace characters on the screen with characters you type overlay fashion.
- .TP 10
- [\f2count\fP]\f3r\fP\f2c\fP
- Replace the
- .I count
- character(s) starting at the current cursor position with
- .IR c ,
- and advance the cursor.
- .TP 10
- [\f2count\fP]\f3x\fP
- Delete current character.
- .TP 10
- [\f2count\fP]\f3X\fP
- Delete preceding character.
- .TP 10
- [\f2count\fP]\f3.\fP
- Repeat the previous text modification command.
- .TP 10
- [\f2count\fP]\f3\(ap\fP
- Invert the case of the
- .I count
- character(s) starting at the current cursor position and advance the cursor.
- .TP 10
- [\f2count\fP]\f3_\fP
- Causes the
- .I count\^
- word of the previous command to be appended and
- input mode entered.
- The last word is used
- if
- .I count\^
- is omitted.
- .TP 10
- .B *
- Causes an
- .B *
- to be appended to the current word and file name generation attempted.
- If no match is found,
- it rings the bell.
- Otherwise, the word is replaced
- by the matching pattern and input mode is entered.
- .TP 10
- .B \e
- Command or file name completion as described above.
- .RE
- .SS "\ \ \ \ \ Other Edit Commands"
- .RS
- Miscellaneous commands.
- .TP 10
- [\f2count\fP]\f3y\fP\f2motion\fP
- .TP 10
- \f3y\fP[\f2count\fP]\f2motion\fP
- Yank current character through character that
- .I motion
- would move the cursor to and puts them into the delete buffer.
- The text and cursor are unchanged.
- .TP 10
- .B Y
- Yanks from current position to end of line.
- Equivalent to
- .BR y$ .
- .TP 10
- .B u
- Undo the last text modifying command.
- .TP 10
- .B U
- Undo all the text modifying commands performed on the line.
- .TP 10
- [\f2count\fP]\f3v\fP
- Returns the command
- .BI "hist \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count"
- in the input buffer.
- If
- .I count\^
- is omitted, then the current line is used.
- .TP 10
- .BI ^L
- Line feed and print current line.
- Has effect only in control mode.
- .TP 10
- .BI ^J
- (New\ line) Execute the current line, regardless of mode.
- .TP 10
- .BI ^M
- (Return) Execute the current line, regardless of mode.
- .TP 10
- .B \#
- If the first character of the command is a
- .BR \# ,
- then this command deletes this
- .B \#
- and each
- .B \#
- that follows a newline.
- Otherwise,
- sends the line after
- inserting a
- .B \#
- in front of each line in the command.
- Useful for causing the current line to be
- inserted in the history as a comment and
- uncommenting previously commented commands
- in the history file.
- .TP 10
- .B =
- Command or file name listing as described above.
- .TP 10
- .BI @ letter
- Your alias list is searched for an
- alias by the name
- .BI _ letter
- and if an alias of this name is defined, its
- value will be inserted on the input queue for processing.
- .RE
- .PD
- .SS Built-in Commands.
- The following simple-commands are executed in the shell process.
- Input/Output redirection is permitted.
- Unless otherwise indicated, the output is written on file descriptor 1
- and the exit status, when there is no syntax error, is zero.
- Except for
- .BR : ,
- .BR true ,
- .BR false ,
- .BR echo ,
- .BR command ,
- .BR newgrp ,
- and
- .BR login ,
- all built-in commands accept
- .B \-\-
- to indicate end of options.
- They also interpret the option
- .B \-?
- as a help request and print a
- .I usage\^
- message
- on standard error.
- Commands that are preceded by one or two \(dg
- are special built-in commands and
- are treated specially in the following ways:
- .PD 0
- .TP
- 1.
- Variable assignment lists preceding the command
- remain in effect when the command completes.
- .TP
- 2.
- I/O redirections are processed after variable assignments.
- .TP
- 3.
- Errors
- cause a script
- that contains them to abort.
- .TP
- 4.
- They are not valid function names.
- .TP
- 5.
- Words,
- following a command preceded by \(dg\(dg
- that are in the format of a variable assignment,
- are expanded with the same rules as a variable assignment.
- This means that
- tilde substitution is performed after the
- .B =
- sign and field splitting and file name generation are not
- performed.
- .PD
- .TP
- \(dg \f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- The command only expands parameters.
- .br
- .ne 2
- .TP
- \(dg \f3\|. \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- If
- .I name\^
- is a function defined with the
- .B function
- .I name\^
- reserved word syntax,
- the function is executed in the current environment
- ( as if it had been defined with the
- .IB name ()
- syntax.)
- Otherwise if
- .I name\^
- refers to a file, the
- file is read in its entirety and the commands are
- executed in the current shell environment.
- The search path
- specified by
- .B
- .SM PATH
- is used to find the directory containing file.
- If any arguments
- .I arg\^
- are given,
- they become the positional parameters while processing
- the
- .B .
- command and are restored upon completion.
- Otherwise the positional parameters are unchanged.
- The exit status is the exit status of the last command executed.
- .TP
- \(dg\(dg \f3alias\fP \*(OK \f3\-ptx\fP \*(CK \*(OK \f2name\fP\*(OK \f3=\fP\f2value\^\fP \*(CK \*(CK .\|.\|.
- .B alias\^
- with no arguments prints the list of aliases
- in the form
- .I name=value\^
- on standard output.
- The
- .B \-p
- option
- causes the word
- .B alias
- to be inserted before each one.
- When one or more arguments are given
- an
- .I alias\^
- is defined
- for each
- .I name\^
- whose
- .I value\^
- is given.
- A trailing space in
- .I value\^
- causes the next word to be checked for
- alias substitution.
- The obsolete
- .B \-t
- option is used to set and list tracked aliases.
- The value of a tracked alias is the full pathname
- corresponding to the given
- .IR name .
- The value becomes undefined when the value of
- .SM
- .B PATH
- is reset but the alias remains tracked.
- Without the
- .B \-t
- option,
- for each
- .I name\^
- in the argument list
- for which no
- .I value\^
- is given, the name
- and value of the alias is printed.
- The obsolete
- .B \-x
- option has no effect.
- The exit status is non-zero if a
- .I name\^
- is given, but no value, and no alias has been defined for the
- .IR name\^ .
- .TP
- \f3bg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
- This command is only on systems that support job control.
- Puts each specified
- .I job\^
- into the background.
- The current job is put in the background
- if
- .I job\^
- is not specified.
- See
- .I Jobs
- for a description of the format of
- .IR job .
- .TP
- \(dg \f3break\fP \*(OK \f2n\^\fP \*(CK
- Exit from the enclosing
- .BR for\^ ,
- .BR while\^ ,
- .BR until\^ ,
- or
- .B select\^
- loop, if any.
- If
- .I n\^
- is specified then break
- .I n\^
- levels.
- .TP
- \f3builtin\fP \*(OK \f3\-ds\fP \*(CK \*(OK \f3\-f\fP \f2file\^\fP \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK
- If
- .I name\^
- is not specified, the built-ins are printed on standard output.
- The
- .B \-s
- option prints only the special built-ins.
- Otherwise, each
- .I name\^
- represents the pathname whose basename is the name of the built-in.
- The entry point function name is determined by prepending
- .B b_
- to the built-in name.
- Special built-ins cannot be bound to a pathname or deleted.
- The
- .B \-d
- option deletes each of the given built-ins.
- On systems that support dynamic loading, the
- .B \-f
- option names a shared library containing the code for built-ins.
- Once a library is loaded, its symbols become available
- for subsequent invocations of
- .BR builtin .
- Multiple libraries can be specified with separate invocations
- of the
- .B builtin
- command.
- Libraries are searched in the reverse order in which they are specified.
- .TP
- .PD 0
- \f3cd\fP \*(OK \f3\-LP\fP \*(CK \*(OK \f2arg\^\fP \*(CK
- .TP
- \f3cd\fP \*(OK \f3\-LP\fP \*(CK \f2old\^\fP \f2new\^\fP
- .PD
- This command can be in either of two forms.
- In the first form it
- changes the current directory to
- .IR arg .
- If
- .I arg\^
- is
- .B \-
- the directory is changed to the previous
- directory.
- The shell
- variable
- .B
- .SM HOME
- is the default
- .IR arg .
- The variable
- .SM
- .B PWD
- is set to the current directory.
- The shell variable
- .B
- .SM CDPATH
- defines the search path for
- the directory containing
- .IR arg .
- Alternative directory names are separated by
- a colon
- .RB ( : ).
- The default path is
- .B <null>
- (specifying the current directory).
- Note that the current directory is specified by a null path name,
- which can appear immediately after the equal sign
- or between the colon delimiters anywhere else in the path list.
- If
- .I arg
- begins with a \f3/\fP then the search path
- is not used.
- Otherwise, each directory in the path is
- searched for
- .IR arg .
- .P
- The obsolete second form of
- .B cd
- substitutes the string
- .I new
- for the string
- .I old
- in the current directory name,
- .SM
- .B PWD
- and tries to change to this new directory.
- .P
- By default, symbolic links are not followed when
- finding the directory name.
- This is equivalent to the
- .B \-L
- option.
- The
- .B \-P
- option causes
- symbolic links to be followed when determining the directory.
- The last instance of
- .B \-L
- or
- .B \-P
- determines which method is used.
- .P
- The
- .B cd\^
- command may not be executed by
- .if \nZ=0 .B rsh\^.
- .if \nZ=1 .B rksh\^.
- .TP
- \f3command\fP \*(OK \f3\-pvV\fP \*(CK \f2name\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- Without the
- .B \-v
- or
- .B \-V
- options,
- .B command
- executes
- .I name\^
- with the arguments given by
- .IR arg .
- The
- .B \-p
- option causes
- a default path to be searched
- rather than the one defined by the value of
- .SM
- .BR PATH .
- Functions will not be searched for when finding
- .IR name .
- In addition, if
- .I name\^
- refers to a special built-in,
- none of the special properties associated with the leading
- daggers will be honored.
- (
- For example, the predefined alias
- .B "redirect=\(fmcommand exec\(fm"
- prevents a script from terminating when an invalid
- redirection is given.)
- With the
- .B \-v
- option,
- .B command
- is equivalent to the built-in
- .B whence
- command described below.
- The
- .B \-V
- options, causes
- .B command
- to
- .BR "whence \-v" .
- .TP
- \(dg \f3continue\fP \*(OK \f2n\^\fP \*(CK
- Resume the next iteration of the enclosing
- .BR for\^ ,
- .BR while\^ ,
- .BR until\^ ,
- or
- .B select\^
- loop.
- If
- .I n\^
- is specified then resume at the
- .IR n -th
- enclosing loop.
- .TP
- \f3disown\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
- Causes the shell not to send a HUP signal to
- each given
- .IR job ,
- or all active jobs if
- .I job
- is omitted,
- when a login shell terminates.
- .TP
- \f3echo\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- When the first
- .I arg\^
- does not begin with a \-, and
- none of the arguments contain a \e,
- then
- .B echo
- prints each of its arguments separated by a space
- and terminated by a new-line.
- Otherwise, the behavior of
- .B echo
- is system dependent
- and
- .B print
- or
- .B printf
- described below should be used.
- See
- .IR echo (1)
- for usage and description.
- .TP
- \(dg \f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- The arguments are read as input
- to the shell
- and the resulting command(s) executed.
- .TP
- \(dg \f3exec\fP \*(OK \f3\-c\fP \*(CK \*(OK \f3\-a\fP \f2name\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
- If
- .I arg\^
- is given,
- the command specified by
- the arguments is executed in place of this shell
- without creating a new process.
- The
- .B \-c
- option causes the environment to be cleared before applying
- variable assignments associated with the
- .B exec
- invocation.
- The
- .B \-a
- option
- causes
- .I name\^
- rather than the first
- .IR arg ,
- to become
- .B argv[0]
- for the new process.
- Input/output arguments may appear and
- affect the current process.
- If
- .I arg\^
- is not given
- the effect of this command is to
- modify file descriptors
- as prescribed by the input/output redirection list.
- In this case,
- any file descriptor numbers greater than 2 that are
- opened with this mechanism are closed when invoking
- another program.
- .TP
- \(dg \f3exit\fP \*(OK \f2n\^\fP \*(CK
- Causes the shell to exit
- with the exit status specified by
- .IR n .
- The value will be the least significant 8 bits of the specified status.
- If
- .I n\^
- is omitted then the exit status is that of the last command executed.
- An end-of-file will also cause the shell to exit
- except for a
- shell which has the
- .I ignoreeof
- option (see
- .B set
- below) turned on.
- .TP
- \(dg\(dg \f3export\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2name\^\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|.
- If
- .I name\^
- is not given,
- the names and values of each variable with
- the export attribute are printed with the values
- quoted in a manner that allows them to be re-inputed.
- The
- .B \-p
- option
- causes the word
- .B export
- to be inserted before each one.
- Otherwise, the given
- .IR name s
- are marked for automatic
- export to the
- .I environment\^
- of subsequently-executed commands.
- .TP
- \f3fg\fP \*(OK \f2job\^\fP.\|.\|. \*(CK
- This command is only on systems that support job control.
- Each
- .I job\^
- specified is brought to the foreground and waited for in
- the specified order.
- Otherwise, the current job is
- brought into the foreground.
- See
- .I Jobs
- for a description of the format of
- .IR job .
- .TP
- \f3getconf\fP \f2name\^\fP \*(OK \f2pathname\^\fP \*(CK
- Prints the current value of the configuration parameter given by
- .IR name .
- .TP
- \f3getopts\fP \f2optstring vname\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- Checks
- .I arg
- for legal options.
- If
- .I arg
- is omitted,
- the positional parameters are used.
- An option argument begins with a
- .B +
- or a
- .BR \- .
- An option not beginning with
- .B +
- or
- .B \-
- or the argument
- .B \-\|\-
- ends the options.
- .I optstring
- contains the letters that
- .I getopts
- recognizes.
- If a letter is followed by a
- .BR : ,
- that option is expected to have an argument.
- The options can be separated from the argument by blanks.
- .P
- .B
- getopts
- places the next option letter it finds inside variable
- .I vname\^
- each time it is invoked with a
- .B +
- prepended when
- .I arg
- begins with a
- .BR + .
- The index of the next
- .I arg
- is stored in
- .SM
- .BR OPTIND .
- The option argument,
- if any,
- gets stored in
- .SM
- .BR OPTARG .
- .P
- A leading
- .B :
- in
- .I optstring
- causes
- .B getopts
- to store the letter of an invalid
- option in
- .SM
- .BR OPTARG ,
- and to set
- .I vname
- to
- .B ?
- for an unknown option and to
- .B :
- when a required option is missing.
- Otherwise,
- .B getopts
- prints an error message.
- The exit status is non-zero when there are no more options.
- .P
- There is no way to specify any of the options
- .BR : ,
- .BR + ,
- .BR \- ,
- .BR ? ,
- .BR [ ,
- and
- .BR ] .
- The option
- .B #
- can only be specified as the first option.
- .TP
- .PD 0
- \f3hist\fP \*(OK \f3\-e\fP \f2ename\^\fP \ \*(CK \*(OK \f3\-nlr\^\fP \*(CK \*(OK \f2first\^\fP \*(OK \f2last\^\fP \*(CK \*(CK
- .TP
- \f3hist \-s \fP \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK
- .PD
- In the first form,
- a range of commands from
- .I first\^
- to
- .I last\^
- is selected from the last
- .SM
- .B HISTSIZE
- commands that were typed at the terminal.
- The arguments
- .I first\^
- and
- .I last\^
- may be specified as a number or as a string.
- A string is used to locate the most recent command starting with
- the given string.
- A negative number is used as an offset to the current command number.
- If the
- .B \-l
- option
- is selected,
- the commands are listed on standard output.
- Otherwise, the editor program
- .I ename\^
- is invoked on a file containing these
- keyboard commands.
- If
- .I ename\^
- is not supplied, then the value of the variable
- .SM
- .B HISTEDIT
- is used.
- If
- .SM
- .B HISTEDIT
- is not set then
- .SM
- .B FCEDIT
- (default
- .BR /bin/ed\^ )
- is used as the editor.
- When editing is complete, the edited command(s)
- is executed if the changes have been saved.
- If
- .I last\^
- is not specified
- then it will be set to
- .IR first .
- If
- .I first\^
- is not specified
- the default is the previous command
- for editing and \-16 for listing.
- The option
- .B \-r
- reverses the order of the commands and
- the option
- .B \-n
- suppresses command numbers when listing.
- In the second form the
- .I command\^
- is re-executed after the substitution
- \f2old\^\fP\f3=\fP\f2new\^\fP
- is performed.
- .TP
- \f3jobs\fP \*(OK \f3\-lnp\^\fP \*(CK \*(OK \f2job\^\fP \.\|.\|. \*(CK
- Lists information about each given job; or all active jobs if
- .I job
- is omitted.
- The
- .B \-l
- option lists process ids in addition to the normal information.
- The
- .B \-n
- option only displays jobs that have stopped or exited since last
- notified.
- The
- .B \-p
- option causes only the process group to be listed.
- See
- .I Jobs
- for a description of the format of
- .IR job .
- .TP
- .PD 0
- \f3kill\fP \*(OK \f3\-s\fP \f2signame\^\fP \*(CK \f2job\^\fP .\|.\|.
- .TP
- .PD 0
- \f3kill\fP \*(OK \f3\-n\fP \f2signum\^\fP \*(CK \f2job\^\fP .\|.\|.
- .TP
- \f3kill\fP \f3\-l\fP \*(OK \f2sig\^\fP .\|.\|. \*(CK
- .PD
- Sends either the TERM (terminate) signal or the
- specified signal to the specified jobs or processes.
- Signals are either given by number with the
- .B \-n
- option or by name with the
- .B \-s
- option
- (as given in
- .BR <signal.h> ,
- stripped of the prefix ``SIG'' with
- the exception that SIGCLD is named CHLD).
- For backward compatibility, the
- .B n
- and
- .B s
- can be omitted and the number or name placed immediately
- after the
- .BR \- .
- If the signal being sent is TERM (terminate) or HUP (hangup),
- then the job or process will be sent a CONT (continue) signal
- if it is stopped.
- The argument
- .I job\^
- can be the process id of a process that is not a member of one of the
- active jobs.
- See
- .I Jobs
- for a description of the format of
- .IR job .
- In the third form,
- .BR "kill \-l" ,
- if
- .I sig\^
- is not specified,
- the signal names are listed.
- Otherwise, for each
- .I sig\^
- that is a name, the corresponding signal number is listed.
- For each
- .I sig\^
- that is a number, the signal name corresponding to the
- least significant 8 bits of
- .I sig\^
- is listed.
- .TP
- \f3let\fP \f2arg\^\fP .\|.\|.
- Each
- .I arg
- is a separate
- .I "arithmetic expression"
- to be evaluated.
- See
- .I "Arithmetic Evaluation"
- above, for a description of arithmetic expression evaluation.
- .P
- The exit status is
- 0 if the value of the last expression
- is non-zero, and 1 otherwise.
- .TP
- \(dg \f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- Equivalent to
- .BI "exec /bin/newgrp" " arg\^"
- \&.\|.\|.\^.
- .TP
- \f3print\fP \*(OK \f3\-Rnprs\^\fP \*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f3\-f\fP \f2format\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
- With no options or with option
- .B \-
- or
- .BR \-\|\- ,
- Each
- .I arg
- is printed
- on standard output.
- The
- .B \-f
- option causes the arguments to be printed as
- described by
- .BR printf .
- In this case any
- .BR n ,
- .BR r ,
- .B R
- options are ignored.
- Otherwise,
- unless the
- .B \-R
- or
- .BR \-r ,
- are specified, the following
- escape conventions will be applied:
- .RS
- .PD 0
- .TP
- .B \ea
- The alert character (ascii
- .BR 07 ).
- .TP
- .B \eb
- The backspace character (ascii
- .BR 010 ).
- .TP
- .B \ec
- Causes
- .B print
- to end without processing more arguments and
- not adding a new-line.
- .TP
- .B \ef
- The formfeed character (ascii
- .BR 014 ).
- .TP
- .B \en
- The new-line character (ascii
- .BR 012 ).
- .TP
- .B \er
- The carriage return character (ascii
- .BR 015 ).
- .TP
- .B \et
- The tab character (ascii
- .BR 011 ).
- .TP
- .B \ev
- The vertical tab character (ascii
- .BR 013 ).
- .TP
- .B \eE
- The escape character (ascii
- .BR 033 ).
- .TP
- .B \e\e
- The backslash character \e.
- .PD
- .PP
- The
- .B \-R
- option will print all subsequent arguments and options
- other than
- .BR \-n .
- The
- .B \-p
- option causes the
- arguments to be written onto the pipe
- of the process spawned with
- .B \(bv&
- instead of standard output.
- The
- .B \-s
- option causes the
- arguments to be written onto the history file
- instead of standard output.
- The
- .B \-u
- option can be used to specify a one digit
- file descriptor unit number
- .I unit\^
- on which the
- output will be placed.
- The default is 1.
- If the option
- .B \-n
- is used, no
- .B new-line\^
- is added to the output.
- .RE
- .TP
- \f3printf\fP \f2format\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK
- The arguments
- .I arg\^
- are printed on standard output
- in accordance with the ANSI-C
- formatting rules associated with the format string
- .IR format .
- The following extensions can also be used:
- .BL
- .LI
- A
- .B %b
- format can be used instead of
- .B %s
- to cause escape sequences in the corresponding
- .I arg\^
- to be expanded as described in
- .BR print.
- .LI
- A
- .B %P
- format can be used instead of
- .B %s
- to cause
- .I arg\^
- to be interpreted as an extended regular
- expression and be printed as a shell pattern.
- .LI
- A
- .B %q
- format can be used instead of
- .B %s
- to cause the resulting string to be quoted in a manner than can
- be reinput to the shell.
- .LI
- The precision field of the
- .B %d
- format can be followed by a
- .B .
- and the output base.
- .LE
- .TP
- \f3pwd\fP \*(OK \f3\-LP\fP \*(CK
- Outputs the value of the current working
- directory.
- If the
- .B \-P
- option is given,
- all symbolic links are resolved from the name.
- .TP
- \f3read\fP \*(OK \f3\-Aprs\^\fP \*(CK \*(OK \f3\-d\fP \f2delim\^\fP\*(CK \*(OK \f3\-t\fP \f2timeout\^\fP\*(CK \*(OK \f3\-u\fP \f2unit\^\fP\*(CK \*(OK \f2vname\f3?\f2prompt\^\f1 \*(CK \*(OK \f2vname\^\fP .\|.\|. \*(CK
- The shell input mechanism.
- One line is read and
- is broken up into fields using the characters in
- .B
- .SM IFS
- as separators.
- The escape character,
- .BR \e ,
- is used to remove any special meaning for the next
- character and for line continuation.
- The
- .B \-d
- option
- causes the read to continue to the first character of
- .I delim\^
- rather than new-line.
- In raw mode,
- .B \-r,
- the
- .B \e
- character is not treated specially.
- The first
- field is assigned to the first
- .IR vname ,
- the second field
- to the second
- .IR vname ,
- etc., with leftover fields assigned to the last
- .IR vname .
- The
- .B \-A
- option causes the variable
- .I vname\^
- to be unset and each field that is read to be stored in
- successive elements of the indexed array
- .IR vname.
- The
- .B \-p
- option causes the input line
- to be taken from the input pipe
- of a process spawned by the shell
- using
- .BR \(bv& .
- If the
- .B \-s
- option is present,
- the input will be saved as a command in the history file.
- The option
- .B \-u
- can be used to specify a one digit file
- descriptor unit
- .I unit\^
- to read from.
- The file descriptor can be opened with the
- .B exec\^
- special built-in command.
- The default value of unit
- .I n\^
- is 0.
- The option
- .B \-t
- is used to specify a timeout in decimal
- seconds when reading from a terminal or pipe.
- If
- .I vname\^
- is omitted then
- .SM
- .B REPLY
- is used as the default
- .IR vname .
- An end-of-file with the
- .B \-p
- option causes cleanup for this process
- so that another can be spawned.
- If the first argument contains a
- .BR ? ,
- the remainder of this word is used as a
- .I prompt\^
- on standard error
- when the shell is interactive.
- The exit status is 0 unless an end-of-file is encountered
- or read has timed out.
- .TP
- \(dg\(dg \f3readonly\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2vname\fP\*(OK\f3=\fP\f2value\^\fP\*(CK \*(CK .\|.\|.
- If
- .I vname\^
- is not given
- the names and values of each variable with
- the readonly attribute is printed with the values
- quoted in a manner that allows them to be re-inputed.
- The
- .B \-p
- option
- causes the word
- .B readonly
- to be inserted before each one.
- Otherwise, the given
- .IR vname s
- are marked
- readonly and these
- names cannot be changed
- by subsequent assignment.
- .TP
- \(dg \f3return\fP \*(OK \f2n\^\fP \*(CK
- Causes a shell
- .I function
- or
- \f3\|.\fP
- script to return
- to the invoking script
- with the return status specified by
- .IR n .
- The value will be the least significant 8 bits of the specified status.
- If
- .I n\^
- is omitted then the return status is that of the last command executed.
- If
- .B return
- is invoked while not in a
- .I function
- or a
- \f3\|.\fP
- script,
- then it behaves the same as
- .BR exit .
- .TP
- \(dg \f3set\fP \*(OK \f3\(+-CPabefhkmnopstuvx\fP \*(CK \*(OK \f3\(+-o\fP \f2option\^\fP \*(CK.\|.\|. \*(OK \f3\(+-A\fP \f2vname\^\fP \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK
- The options for this command have meaning as follows:
- .RS
- .PD 0
- .TP 8
- .B \-A
- Array assignment.
- Unset the variable
- .I vname
- and assign values sequentially from the
- list
- .IR arg .
- If
- .B +A
- is used, the variable
- .I vname
- is not unset first.
- .TP 8
- .B \-C
- Prevents redirection
- .B >
- from truncating existing files.
- Files that are created are opened with the O_EXCL mode.
- Require
- .B >\(bv
- to truncate a file when turned on.
- .TP 8
- .B \-P
- Causes the
- .B cd
- and
- .B pwd
- built-in commands to default to physical mode.
- .TP 8
- .B \-a
- All subsequent variables that are defined are automatically exported.
- .TP 8
- .B \-b
- Prints job completion messages as soon as a background job changes
- state rather than waiting for the next prompt.
- .TP 8
- .B \-e
- If a command has a non-zero exit status,
- execute the
- .SM
- .B ERR
- trap, if set,
- and exit.
- This mode is disabled while reading profiles.
- .TP 8
- .B \-f
- Disables file name generation.
- .TP 8
- .B \-h
- Each command
- becomes a tracked alias when first encountered.
- .TP 8
- .B \-k
- (Obsolete). All variable assignment arguments are placed in the environment for a command,
- not just those that precede the command name.
- .TP 8
- .B \-m
- Background jobs will run in a separate process group
- and a line will print upon completion.
- The exit status of background jobs is reported in a completion message.
- On systems with job control,
- this option is turned on automatically for
- interactive shells.
- .TP 8
- .B \-n
- Read commands and check them for syntax errors, but do not execute them.
- Ignored for interactive shells.
- .TP 8
- .B \-o
- The following argument can be one of the following option names:
- .RS
- .TP 8
- .B allexport
- Same as
- .BR \-a .
- .TP 8
- .B errexit
- Same as
- .BR \-e .
- .TP 8
- .B bgnice
- All background jobs are run at a lower priority.
- This is the default mode.
- .TP 8
- .B emacs
- Puts you in an
- .I emacs
- style in-line editor for command entry.
- .TP 8
- .B gmacs
- Puts you in a
- .I gmacs
- style in-line editor for command entry.
- .TP 8
- .B ignoreeof
- The shell will not exit on end-of-file.
- The command
- .B exit
- must be used.
- .TP 8
- .B keyword
- Same as
- .BR \-k .
- .TP 8
- .B markdirs
- All directory names resulting from file name generation have a trailing
- .B /
- appended.
- .TP 8
- .B monitor
- Same as
- .BR \-m .
- .TP 8
- .B noclobber
- Same as
- .BR \-C .
- .TP 8
- .B noexec
- Same as
- .BR \-n .
- .TP 8
- .B noglob
- Same as
- .BR \-f .
- .TP 8
- .B nolog
- Do not save function definitions in history file.
- .TP 8
- .B notify
- Same as
- .BR \-b .
- .TP 8
- .B nounset
- Same as
- .BR \-u .
- .TP 8
- .B physical
- Same as
- .BR \-P .
- .TP 8
- .B privileged
- Same as
- .BR \-p .
- .TP 8
- .B verbose
- Same as
- .BR \-v .
- .TP 8
- .B trackall
- Same as
- .BR \-h .
- .TP 8
- .B vi
- Puts you in insert mode of a
- .I vi\^
- style in-line editor
- until you hit escape character
- .BR 033 .
- This puts you in control mode.
- A return sends the line.
- .TP 8
- .B viraw
- Each character is processed as it is typed
- in
- .I vi\^
- mode.
- .TP 8
- .B xtrace
- Same as
- .BR \-x .
- .TP 8
- If no option name is supplied then the current option settings are printed.
- .RE
- .TP 8
- .B \-p
- Disables processing of the
- .B \s-1$HOME\s+1/.profile
- file and uses the file
- .B /etc/suid_profile
- instead of the
- .SM
- .B ENV
- file.
- This mode is on whenever the effective uid (gid)
- is not equal to the real uid (gid).
- Turning this off causes the effective uid and gid to be
- set to the real uid and gid.
- .TP 8
- .B \-s
- Sort the positional parameters lexicographically.
- .TP 8
- .B \-t
- (Obsolete). Exit after reading and executing one command.
- .TP 8
- .B \-u
- Treat unset parameters as an error when substituting.
- .TP 8
- .B \-v
- Print shell input lines as they are read.
- .TP 8
- .B \-x
- Print commands and their arguments as they are executed.
- .TP 8
- .B \-\|\-
- Do not change any of the options; useful in setting
- .B $1
- to a value beginning with
- .BR \- .
- If no arguments follow this option then the positional parameters are unset.
- .PD
- .PP
- As an obsolete feature,
- if the first
- .I arg\^
- is
- .B \-
- then the
- .B \-x
- and
- .B \-v
- options are turned off and the next
- .I arg
- is treated as the first argument.
- Using
- .B \+
- rather than
- .B \-
- causes these options to be turned off.
- These options can also be used upon invocation of the shell.
- The current set of options may be found in
- .BR $\- .
- Unless
- .B \-A
- is specified,
- the remaining arguments are positional
- parameters and are assigned, in order, to
- .B $1
- .B $2
- \&.\|.\|.\^.
- If no arguments are given then the names and values
- of all variables are printed on the standard output.
- .RE
- .TP
- \(dg \f3shift\fP \*(OK \f2n\^\fP \*(CK
- .br
- The positional parameters from
- \f3$\fP\f2n\fP\f3+1\fP
- \&.\|.\|.
- are renamed
- .B $1
- \&.\|.\|.\^
- , default
- .I n\^
- is 1.
- The parameter
- .I n\^
- can be any arithmetic expression that evaluates to a non-negative
- number less than or equal to
- .BR $# .
- .TP
- \f3sleep\fP \f2seconds\^\fP
- Suspends execution for the number of decimal seconds or fractions of a
- second given by
- .IR seconds .
- .TP
- \(dg \f3trap\fP \*(OK \f3\-p\fP \*(CK \*(OK \f2action\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|.
- The \-p
- option causes the trap
- action associated with each trap as specified by the arguments
- to be printed with appropriate quoting.
- Otherwise,
- .I action\^
- will be processed as if it were an argument to
- .B eval
- when the shell
- receives signal(s)
- .IR sig .
- Each
- .I sig\^
- can be given as a number or as the name of the signal.
- Trap commands are executed in order of signal number.
- Any attempt to set a trap on a signal that
- was ignored on entry to the current shell
- is ineffective.
- If
- .I action\^
- is omitted and the first
- .I sig\^
- is a number, or if
- .I action\^
- is
- .BR \- ,
- then the trap(s) for each
- .I sig\^
- are reset
- to their original values.
- If
- .I action\^
- is the null
- string then this signal is ignored by the shell and by the commands
- it invokes.
- If
- .I sig\^
- is
- .SM
- .B ERR
- then
- .I action\^
- will be executed whenever a command has a non-zero exit status.
- If
- .I sig\^
- is
- .SM
- .B DEBUG
- then
- .I action\^
- will be executed before each command.
- If
- .I sig\^
- is
- .B 0
- or
- .SM
- .B EXIT
- and the
- .B trap
- statement is executed inside the body of a function,
- then the command
- .I action\^
- is executed
- after the function completes.
- If
- .I sig\^
- is
- .B 0
- or
- .SM
- .B EXIT
- for a
- .B trap
- set outside any function
- then the command
- .I action\^
- is executed
- on exit from the shell.
- If
- .I sig\^
- is
- .SM
- .B KEYBD
- then
- .I action\^
- will be executed whenever a key is read
- while in
- .BR emacs ,
- .BR gmacs ,
- or
- .B vi\^
- mode.
- The
- .B trap
- command
- with no arguments prints a list
- of commands associated with each signal number.
- .TP
- \(dg\(dg \f3typeset\fP \*(OK \f3\(+-AHflnprtux\^\fP \*(CK \*(OK \f3\(+-EFLRZi\*(OK\f2n\^\fP\*(CK \*(CK \*(OK \f2vname\^\fP\*(OK\f3=\fP\f2value\^\fP \*(CK \^ \*(CK .\|.\|.
- Sets attributes and values for shell variables and functions.
- When invoked inside a function,
- a new instance of the variables
- .I vname\^
- is created.
- The variables' value and type are restored
- when the function completes.
- The following list of attributes may be specified:
- .RS
- .PD 0
- .TP
- .B \-A
- Declares
- .I vname\^
- to be an associate array.
- Subscripts are strings rather than arithmetic
- expressions.
- .TP
- .B \-E
- Declares
- .I vname\^
- to be a double precision floating point number.
- If
- .I n\^
- is non-zero it defines the number of significant figures
- that are used when expanding
- .IR vname .
- Otherwise ten significant figures will be used.
- .TP
- .B \-F
- Declares
- .I vname\^
- to be a double precision floating point number.
- If
- .I n\^
- is non-zero it defines the number of places after the
- decimal point that are used when expanding
- .IR vname .
- Otherwise ten places after the decimal point will be used.
- .TP
- .B \-H
- This option provides UNIX to host-name file mapping on non-UNIX
- machines.
- .TP
- .B \-L
- Left justify and remove leading blanks from
- .IR value .
- If
- .I n\^
- is non-zero it defines the width
- of the field,
- otherwise it is determined by the width of the value of
- first assignment.
- When the variable is assigned to, it is
- filled on the right with blanks or truncated, if necessary, to
- fit into the field.
- The
- .B \-R
- option is turned off.
- .TP
- .B \-R
- Right justify and fill with leading blanks.
- If
- .I n\^
- is non-zero it defines the width
- of the field,
- otherwise it is determined by the width of the value of
- first assignment.
- The field is left filled with blanks or
- truncated from the end if the
- variable is reassigned.
- The
- .B \-L
- option is turned off.
- .TP
- .B \-Z
- Right justify and fill with leading zeros if
- the first non-blank character is a digit and the
- .B \-L
- option has not been set.
- Remove leading zeros if the
- .B \-L
- option is also set.
- If
- .I n\^
- is non-zero it defines the width
- of the field,
- otherwise it is determined by the width of the value of
- first assignment.
- .TP
- .B \-f
- The names refer to function names rather than
- variable names.
- No assignments can be made and the only other
- valid options are
- .BR \-t ,
- .B \-u
- and
- .BR \-x .
- The option
- .B \-t
- turns on execution tracing for this function.
- The option
- .B \-u
- causes this function to be marked undefined.
- The
- .SM
- .B FPATH
- variable will be searched to find the function definition
- when the function is referenced.
- .TP
- .B \-i
- Declares
- .I vname\^
- to be represented internally as integer.
- The right hand side of an assignment is evaluated as an
- arithmetic expression when assigning to an integer.
- If
- .I n\^
- is non-zero it defines the output arithmetic base,
- otherwise the the output base will be ten.
- .TP
- .B \-l
- All upper-case characters are
- converted to lower-case.
- The upper-case option,
- .B \-u
- is turned off.
- .TP
- .B \-n
- Declares
- .I vname\^
- to be a reference to the variable whose name is
- defined by the value of variable
- .IR vname .
- This is usually used to reference a variable inside
- a function whose name has been passed as an argument.
- .TP
- .B \-r
- The given
- .IR vname s
- are marked
- readonly and these
- names cannot be changed
- by subsequent assignment.
- .TP
- .B \-t
- Tags the variables.
- Tags are user definable and have no special
- meaning to the shell.
- .TP
- .B \-u
- All lower-case characters are converted
- to upper-case characters.
- The lower-case option,
- .BR \-l ,
- is turned off.
- .TP
- .B \-x
- The given
- .IR vname s
- are marked for automatic
- export to the
- .I environment\^
- of subsequently-executed commands.
- Variables whose names contain a \fB\s+2.\s-2\fP
- can not be exported.
- .PD
- .PP
- The
- .B \-i
- attribute can not be specified along with
- .BR \-R ,
- .BR \-L ,
- .BR \-Z ,
- or
- .BR \-f .
- .PP
- Using
- .B \+
- rather than
- .B \-
- causes these options to be turned off.
- If no
- .I vname\^
- arguments are given
- a list of
- .I vnames\^
- (and optionally the
- .IR values\^ )
- of the
- .I variables\^
- is printed.
- (Using
- .B \+
- rather than
- .B \-
- keeps the
- values from being printed.)
- The
- .B \-p
- option causes
- .B typeset
- followed by the the option letters
- to be printed before each name
- rather than the names of the options.
- If any option other than
- .B \-p
- is given,
- only those variables
- which have all of the given
- options are printed.
- Otherwise, the
- .IR vname s
- and
- .I attributes\^
- of all
- .I variables\^
- are printed.
- .RE
- .TP
- \f3ulimit\fP \*(OK \f3\-HSacdfmnpstv\fP \*(CK \*(OK \f2limit\^\fP \*(CK
- Set or display a resource limit.
- The available resources limits are listed below.
- Many systems do not contain one or more of these limits.
- The limit for a specified resource is set when
- .I limit\^
- is specified.
- The value of
- .I limit\^
- can be a number in the unit specified below with each resource,
- or the value
- .BR unlimited .
- The
- .B \-H
- and
- .B \-S
- options specify whether the hard limit or the
- soft limit for the given resource is set.
- A hard limit cannot be increased once it is set. A soft
- limit can be increased up to the value of the hard limit.
- If neither the
- .B H
- or
- .B S
- options is specified, the limit applies to both.
- The current resource limit is printed when
- .I limit\^
- is omitted.
- In this case the soft limit is printed unless
- .B H
- is specified.
- When more that one resource is specified, then the limit
- name and unit is printed before the value.
- .RS
- .PD 0
- .TP
- .B \-a
- Lists all of the current resource limits.
- .TP
- .B \-c
- The number of 512-byte blocks on the size of core dumps.
- .TP
- .B \-d
- The number of K-bytes on the size of the data area.
- .TP
- .B \-f
- The number of 512-byte blocks on files that can be written the
- current process or by child processes (files of any size may be read).
- .TP
- .B \-m
- The number of K-bytes on the size of physical memory.
- .TP
- .B \-n
- The number of file descriptors plus 1.
- .TP
- .B \-p
- The number of 512-byte blocks for pipe buffering.
- .TP
- .B \-s
- The number of K-bytes on the size of the stack area.
- .TP
- .B \-t
- The number of seconds to be used by each process.
- .TP
- .B \-v
- The number of K-bytes for virtual memory.
- .PD
- .PP
- If no option is given,
- .B \-f
- is assumed.
- .RE
- .TP
- \f3umask\fP \*(OK \f3\-S\fP \*(CK \*(OK \f2mask\^\fP \*(CK
- The user file-creation mask is set to
- .I mask\^
- (see
- .IR umask (2)).
- .I mask
- can either be an octal number or
- a symbolic value as described in
- .IR chmod (1).
- If a symbolic value is given,
- the new
- umask value is the complement of the result of
- applying
- .I mask\^
- to the complement of the previous umask value.
- If
- .I mask\^
- is omitted, the current value of the mask is printed.
- The
- .B \-S
- option causes the mode to be printed as a symbolic
- value. Otherwise, the
- mask is printed in octal.
- .TP
- \(dg \f3unalias\fP \*(OK \f3\-a\fP \*(CK \f2name\^\fP .\|.\|.
- The
- .I aliases\^
- given by the list of
- .IR name s
- are removed from the
- .I alias\^
- list.
- The
- .B \-a
- option causes all the
- aliases to be unset.
- .TP
- \(dg\f3unset\fP \*(OK \f3\-fv\fP \*(CK \f2vname\^\fP .\|.\|.
- The variables given by the list of
- .IR vname s
- are unassigned,
- i.e.,
- their values and attributes are erased.
- Readonly variables cannot be unset.
- If the
- .B \-f
- option
- is set, then the names refer to
- .I function\^
- names.
- If the
- .B \-v
- option is set, then the names refer to
- .I variable\^
- names.
- The default is equivalent to
- .BR \-v .
- Unsetting
- .SM
- .BR ERRNO ,
- .SM
- .BR LINENO ,
- .SM
- .BR MAILCHECK ,
- .SM
- .BR OPTARG ,
- .SM
- .BR OPTIND ,
- .SM
- .BR RANDOM ,
- .SM
- .BR SECONDS ,
- .SM
- .BR TMOUT ,
- and
- .SM
- .B _
- removes their special meaning even if they are
- subsequently assigned to.
- .TP
- \f3wait\fP \*(OK \f2job\^\fP .\|.\|. \*(CK
- Wait for the specified
- .I job
- and
- report its termination status.
- If
- .I job\^
- is not given then all currently active child processes are waited for.
- The exit status from this command is that of
- the last process waited for.
- See
- .I Jobs
- for a description of the format of
- .IR job .
- .TP
- \f3whence\fP \*(OK \f3\-apv\fP \*(CK \f2name\^\fP .\|.\|.
- For each
- .IR name ,
- indicate how it
- would be interpreted if used as a command name.
- .P
- The
- .B \-v
- option
- produces a more verbose report.
- .P
- The
- .B \-p
- option
- does a path search for
- .I name\^
- even if name is an alias, a function, or a reserved word.
- The
- .B \-a
- is similar to the
- .B \-v
- option but causes
- all interpretations of the given name to be reported.
- .SS Invocation.
- If the shell is invoked by
- .IR exec (2),
- and the first character of argument zero
- .RB ( $0 )
- is
- .BR \- ,
- then the shell is assumed to be a
- .I login
- shell and
- commands are read from
- .B /etc/profile
- and then from either
- .B .profile
- in the current directory or
- .BR \s-1$HOME\s+1/.profile ,
- if either file exists.
- Next, commands are read from
- the file named by
- performing parameter expansion, command substitution,
- and arithmetic substitution on
- the value of the environment variable
- .SM
- .B ENV
- if the file exists.
- If the
- .B \-s
- option is not present and
- .I arg\^
- is, then a path search is performed on the first
- .I arg\^
- to determine the name of the script to execute.
- The script
- .I arg\^
- must have read permission and any
- .I setuid
- and
- .I getgid
- settings will be ignored.
- If the script is not found on the path,
- .I arg\^
- is processed as if it named a built-in command or function.
- Commands are then read as described below;
- the following option are interpreted by the shell
- when it is invoked:
- .PP
- .PD 0
- .TP 10
- .BI \-c
- If the
- .B \-c
- option is present then
- commands are read from the first
- .IR arg .
- Any remaining arguments become
- position parameters starting at
- .B 0 .
- .TP
- .B \-s
- If the
- .B \-s
- option is present or if no
- arguments remain
- then commands are read from the standard input.
- Shell output,
- except for the output of the
- .I Special Commands\^
- listed above,
- is written to
- file descriptor 2.
- .TP
- .B \-i
- If the
- .B \-i
- option is present or
- if the shell input and output are attached to a terminal (as told by
- .IR ioctl (2))
- then this shell is
- .IR interactive .
- In this case \s-1TERM\s+1 is ignored (so that \f3kill 0\fP
- does not kill an interactive shell) and \s-1INTR\s+1 is caught and ignored
- (so that
- .B wait
- is interruptible).
- In all cases, \s-1QUIT\s+1 is ignored by the shell.
- .TP
- .B \-r
- If the
- .B \-r
- option is present the shell is a restricted shell.
- .PD
- .PP
- The
- .B \-I
- .I filename\^
- option is used
- to generate a cross reference database
- that can be used by a separate utility
- to find definitions and references for variables and commands.
- .PP
- The remaining options and arguments are described under the
- .B set
- command above.
- An optional
- .B \-
- as the first argument is ignored.
- .if \nZ=0 \{.SS Rsh Only.
- .I Rsh\}
- .if \nZ=1 \{.SS Rksh Only.
- .I Rksh\}
- is used to set up login names and execution environments whose
- capabilities are more controlled than those of the standard shell.
- The actions of
- .if \nZ=0 .B rsh\^
- .if \nZ=1 .B rksh\^
- are identical to those of
- .if \nZ=0 .BR sh\^ ,
- .if \nZ=1 .BR ksh\^ ,
- except that the following are disallowed:
- .RS
- .PD 0
- .PP
- changing directory (see
- .IR cd (1)),
- .br
- setting or unsetting the value or attributes of
- .SM
- .BR SHELL ,
- .SM
- .BR ENV ,
- or
- .SM
- .BR PATH\*S,
- .br
- specifying path or
- command names containing
- .BR / ,
- .br
- redirecting output
- .RB ( > ,
- .BR >| ,
- .BR <> ,
- and
- .BR >> ).
- .PD
- .RE
- .PP
- The restrictions above are enforced
- after \f3.profile\fP and the
- .SM
- .B ENV
- files are interpreted.
- .PP
- When a command to be executed is found to be a shell procedure,
- .if \nZ=0 \{.B rsh\^
- invokes
- .I sh\^\}
- .if \nZ=1 \{.B rksh\^
- invokes
- .I ksh\^\}
- to execute it.
- Thus, it is possible to provide to the end-user shell procedures
- that have access to the full power of
- the standard shell,
- while imposing a limited menu of commands;
- this scheme assumes that the end-user does not have write and
- execute permissions in the same directory.
- .PP
- The net effect of these rules is that the writer of the
- .B .profile
- has complete control over user actions,
- by performing guaranteed setup actions
- and leaving the user in an appropriate directory
- (probably
- .I not\^
- the login directory).
- .PP
- The system administrator often sets up a directory
- of commands
- (i.e.,
- .BR /usr/rbin )
- that can be safely invoked by
- .if \nZ=0 .BR rsh .
- .if \nZ=1 .BR rksh .
- .SH EXIT STATUS
- Errors detected by the shell, such as syntax errors,
- cause the shell
- to return a non-zero exit status.
- Otherwise, the shell returns the exit status of
- the last command executed (see also the
- .B exit
- command above).
- If the shell is being used non-interactively
- then execution of the shell file is abandoned.
- Run time errors detected by the shell are reported by
- printing the command or function name and the error condition.
- If the line number that the error occurred on is greater than one,
- then the line number is also printed in square brackets
- .RB ( "[]" )
- after the command or function name.
- .SH FILES
- /etc/passwd
- .br
- /etc/profile
- .br
- /etc/suid_profile
- .br
- \s-1$HOME\s+1/\f3.\fPprofile
- .br
- /tmp/sh\(**
- .br
- /dev/null
- .SH SEE ALSO
- cat(1),
- cd(1),
- chmod(1),
- cut(1),
- echo(1),
- emacs(1),
- env(1),
- gmacs(1),
- newgrp(1),
- stty(1),
- test(1),
- umask(1),
- vi(1),
- dup(2),
- exec(2),
- fork(2),
- ioctl(2),
- lseek(2),
- paste(1),
- pipe(2),
- umask(2),
- ulimit(2),
- wait(2),
- rand(3),
- a.out(5),
- profile(5),
- environ(7).
- .PP
- Morris I. Bolsky and David G. Korn,
- .IR "The KornShell Command and Programming Language" ,
- Prentice Hall, 1989, ISBN 0-13-516972-0.
- .SH CAVEATS
- .PP
- If a command
- is executed, and then a command with the same name is
- installed in a directory in the search path before the directory where the
- original command was found, the shell will continue to
- .I exec\^
- the original command.
- Use the
- .B \-t
- option of the
- .B alias\^
- command to correct this situation.
- .PP
- Some very old shell scripts contain a
- .B ^
- as a synonym for the pipe character
- .BR \(bv .
- .PP
- Using the
- .B hist\^
- built-in command within a compound command will cause the whole
- command to disappear from the history file.
- .PP
- The built-in command \f3\|.\fP \f2file\^\fP
- reads the whole file before any commands are executed.
- Therefore,
- .B alias
- and
- .B unalias
- commands in the file
- will not apply to any commands defined in the file.
- .PP
- Traps are not processed while a job is waiting for a foreground process.
- Thus, a trap on
- .B CHLD
- won't be executed until the foreground job terminates.
|