gno-docs/refs.aug96/gnoshell-95.doc

2326 lines
275 KiB
Plaintext

{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Times;}{\f5\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica;}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier;}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva{\*\falt Arial};}{\f8\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Tms Rmn;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helv;}{\f10\froman\fcharset0\fprq2{\*\panose 00000000000000000000}MS Serif;}{\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York{\*\falt Times New Roman};}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f16\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Bookman;}{\f17\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_240 RG 564 NO;}{\f18\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM;}{\f19\froman\fcharset0\fprq2{\*\panose 00000000000000000000}ACaslon Bold;}{\f20\froman\fcharset0\fprq2{\*\panose 00000000000000000000}ACaslon Regular;}{\f21\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Bodoni BoldCondensed;}{\f22\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}BrushScript;}{\f23\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}GillSans;}{\f24\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}LetterGothic;}{\f25\fswiss\fcharset0\fprq2{\*\panose 020b0600000000000000}LotusLineDraw;}{\f26\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}LotusWPSet;}{\f27\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}NewsGothic;}{\f28\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Perpetua;}{\f29\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Anna;}{\f30\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Poppl-Laudatio Regular;}{\f31\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Boulevard;}{\f32\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Boton Regular;}{\f33\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Baskerville BE Regular;}{\f34\fdecor\fcharset0\fprq2{\*\panose 00000000000000000000}Giddyup Thangs;}{\f35\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Giddyup;}{\f36\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_100 LT 250 CN;}{\f37\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_100 LT 564 NO;}{\f38\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_100 LT 850 EX;}{\f39\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_240 RG 250 CN;}{\f40\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_240 RG 850 EX;}{\f41\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_503 BD 250 CN;}{\f42\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_503 BD 488 NO;}{\f43\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}TektoMM_503 BD 850 EX;}{\f44\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;}{\f45\fswiss\fcharset0\fprq2{\*\panose 020f0704030504030204}Arial Rounded MT Bold;}{\f46\froman\fcharset0\fprq2{\*\panose 02040602050305030304}Book Antiqua;}{\f47\fswiss\fcharset0\fprq2{\*\panose 020b0502020202020204}Century Gothic;}{\f48\froman\fcharset0\fprq2{\*\panose 02040604050505020304}Century Schoolbook;}{\f49\froman\fcharset0\fprq2{\*\panose 00050102010706020507}Map Symbols;}{\f50\fswiss\fcharset0\fprq2{\*\panose 020b0706040902060204}Haettenschweiler;}{\f51\fdecor\fcharset0\fprq2{\*\panose 04020705040a02060702}Algerian;}{\f52\fdecor\fcharset0\fprq2{\*\panose 04030b070d0b02020403}Braggadocio;}{\f53\fswiss\fcharset0\fprq2{\*\panose 020b0903060703020204}Britannic Bold;}{\f54\fscript\fcharset0\fprq2{\*\panose 03060802040406070304}Brush Script MT;}{\f55\fdecor\fcharset0\fprq2{\*\panose 04020805060202030203}Colonna MT;}{\f56\fdecor\fcharset0\fprq2{\*\panose 04020505020e03040504}Desdemona;}{\f57\froman\fcharset0\fprq2{\*\panose 0204060206030a020304}Footlight MT Light;}{\f58\fdecor\fcharset0\fprq2{\*\panose 040307050d0c02020703}Kino MT;}{\f59\froman\fcharset0\fprq2{\*\panose 020a0a07050505020404}Wide Latin;}{\f60\fscript\fcharset0\fprq2{\*\panose 03020802060602070202}Matura MT Script Capitals;}{\f61\fdecor\fcharset0\fprq2{\*\panose 040506030a0602020202}Playbill;}{\f62\froman\fcharset2\fprq2{\*\panose 05050102010205020202}MT Extra;}{\f63\fswiss\fcharset0\fprq2{\*\panose 020e0602030304020304}Albertus Medium;}{\f64\fswiss\fcharset0\fprq2{\*\panose 020e0802040304020204}Albertus Extra Bold;}{\f65\fswiss\fcharset0\fprq2{\*\panose 020b0603020204030204}Antique Olive;}{\f66\fswiss\fcharset0\fprq2{\*\panose 020b0502050508020304}CG Omega;}{\f67\froman\fcharset0\fprq2{\*\panose 02020603050405020304}CG Times;}{\f68\froman\fcharset0\fprq2{\*\panose 02040706040705040204}Clarendon Condensed;}{\f69\fscript\fcharset238\fprq2{\*\panose 03030502040406070605}Coronet;}{\f70\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;}{\f71\fmodern\fcharset0\fprq1{\*\panose 020b0409020202030204}Letter Gothic;}{\f72\fscript\fcharset0\fprq2{\*\panose 03020702040402020504}Marigold;}{\f73\fswiss\fcharset0\fprq2{\*\panose 020b0603020202030204}Univers;}{\f74\fswiss\fcharset0\fprq2{\*\panose 020b0606020202060204}Univers Condensed;}{\f75\fswiss\fcharset0\fprq2{\*\panose 020e0702040304020204}Albertus;}{\f76\fswiss\fcharset0\fprq2{\*\panose 020b0504020202050204}Metrostyle;}{\f77\fswiss\fcharset0\fprq2{\*\panose 020b0507020202060204}Metrostyle Extended;}{\f78\froman\fcharset0\fprq2{\*\panose 0208090404030b020404}Ozzie Black;}{\f79\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f80\froman\fcharset0\fprq2{\*\panose 02020500000000000000}CODABAR1;}{\f81\froman\fcharset0\fprq2{\*\panose 02020500000000000000}CODE3OF9X1;}{\f82\fswiss\fcharset0\fprq2{\*\panose 020b0500000000000000}INT2OF5X1;}{\f83\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}USPS Bar Code;}{\f84\fmodern\fcharset2\fprq1{\*\panose 050b0009000000000000}OCR-A;}{\f85\fswiss\fcharset0\fprq2{\*\panose 020b0000000000000000}QuickType;}{\f86\fswiss\fcharset0\fprq2{\*\panose 020b0506030403020203}QuickType Condensed;}{\f87\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}QuickType Pi;}{\f88\fdecor\fcharset0\fprq2{\*\panose 04040a05050d02020502}Beesknees ITC;}{\f89\fscript\fcharset0\fprq2{\*\panose 03070402050302030203}Bradley Hand ITC;}{\f90\froman\fcharset0\fprq2{\*\panose 02040603050505030304}Calisto MT;}{\f91\fdecor\fcharset0\fprq2{\*\panose 04040404050702020202}Curlz MT;}{\f92\froman\fcharset0\fprq2{\*\panose 02020904090505020303}Elephant;}{\f93\fswiss\fcharset0\fprq2{\*\panose 020b0907030504020204}Eras Bold ITC;}{\f94\fswiss\fcharset0\fprq2{\*\panose 020b0805030504020804}Eras Demi ITC;}{\f95\fswiss\fcharset0\fprq2{\*\panose 020b0402030504020804}Eras Light ITC;}{\f96\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020804}Eras Medium ITC;}{\f97\fswiss\fcharset0\fprq2{\*\panose 020b0a07030504020204}Eras Ultra ITC;}{\f98\fdecor\fcharset0\fprq2{\*\panose 04040403040a02020202}Juice ITC;}{\f99\fdecor\fcharset0\fprq2{\*\panose 04040403030d02020704}Matisse ITC;}{\f100\froman\fcharset0\fprq2{\*\panose 02060603020205020403}Rockwell;}{\f101\froman\fcharset0\fprq2{\*\panose 02060903040505020403}Rockwell Extra Bold;}{\f102\fdecor\fcharset0\fprq2{\*\panose 04040a07060a02020202}Snap ITC;}{\f103\fdecor\fcharset0\fprq2{\*\panose 04020404030d07020202}Tempus Sans ITC;}{\f104\fscript\fcharset0\fprq2{\*\panose 03070502030502020203}Viner Hand ITC;}{\f105\fswiss\fcharset0\fprq2{\*\panose 020b0500000000000000}Anson;}{\f106\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Andes;}{\f107\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Fences;}{\f108\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}BlackChancery;}{\f109\fmodern\fcharset0\fprq1{\*\panose 020b0009000000000000}QuickType Mono;}{\f110\fscript\fcharset238\fprq2{\*\panose 03010101010201010101}Monotype Corsiva;}{\f111\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}MICRSSK;}{\f112\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f113\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;}{\f114\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;}{\f115\fnil\fcharset2\fprq2{\*\panose 01010601010101010101}Monotype Sorts;}{\f116\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;}{\f117\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Bookshelf Symbol 3;}{\f118\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;}{\f119\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Outlook;}{\f120\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}AvantGarde;}{\f121\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica-Narrow;}{\f122\froman\fcharset0\fprq2{\*\panose 00000000000000000000}NewCenturySchlbk;}{\f123\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Palatino;}{\f124\froman\fcharset0\fprq2{\*\panose 00000000000000000000}ZapfChancery;}{\f125\fdecor\fcharset2\fprq2{\*\panose 00000000000000000000}ZapfDingbats;}{\f216\fswiss\fcharset238\fprq2 Tahoma CE;}{\f217\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f219\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f220\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f221\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f408\fswiss\fcharset238\fprq2 Century Gothic CE;}{\f409\fswiss\fcharset204\fprq2 Century Gothic Cyr;}{\f412\fswiss\fcharset162\fprq2 Century Gothic Tur;}{\f413\fswiss\fcharset186\fprq2 Century Gothic Baltic;}{\f504\fswiss\fcharset238\fprq2 Albertus Medium CE;}{\f505\fswiss\fcharset204\fprq2 Albertus Medium Cyr;}{\f508\fswiss\fcharset162\fprq2 Albertus Medium Tur;}{\f509\fswiss\fcharset186\fprq2 Albertus Medium Baltic;}{\f510\fswiss\fcharset238\fprq2 Albertus Extra Bold CE;}{\f511\fswiss\fcharset204\fprq2 Albertus Extra Bold Cyr;}{\f514\fswiss\fcharset162\fprq2 Albertus Extra Bold Tur;}{\f515\fswiss\fcharset186\fprq2 Albertus Extra Bold Baltic;}{\f516\fswiss\fcharset238\fprq2 Antique Olive CE;}{\f517\fswiss\fcharset204\fprq2 Antique Olive Cyr;}{\f520\fswiss\fcharset162\fprq2 Antique Olive Tur;}{\f521\fswiss\fcharset186\fprq2 Antique Olive Baltic;}{\f522\fswiss\fcharset238\fprq2 CG Omega CE;}{\f523\fswiss\fcharset204\fprq2 CG Omega Cyr;}{\f526\fswiss\fcharset162\fprq2 CG Omega Tur;}{\f527\fswiss\fcharset186\fprq2 CG Omega Baltic;}{\f528\froman\fcharset238\fprq2 CG Times CE;}{\f529\froman\fcharset204\fprq2 CG Times Cyr;}{\f532\froman\fcharset162\fprq2 CG Times Tur;}{\f533\froman\fcharset186\fprq2 CG Times Baltic;}{\f534\froman\fcharset238\fprq2 Clarendon Condensed CE;}{\f535\froman\fcharset204\fprq2 Clarendon Condensed Cyr;}{\f538\froman\fcharset162\fprq2 Clarendon Condensed Tur;}{\f539\froman\fcharset186\fprq2 Clarendon Condensed Baltic;}{\f546\froman\fcharset238\fprq2 Garamond CE;}{\f547\froman\fcharset204\fprq2 Garamond Cyr;}{\f549\froman\fcharset161\fprq2 Garamond Greek;}{\f550\froman\fcharset162\fprq2 Garamond Tur;}{\f551\froman\fcharset186\fprq2 Garamond Baltic;}{\f552\fmodern\fcharset238\fprq1 Letter Gothic CE;}{\f553\fmodern\fcharset204\fprq1 Letter Gothic Cyr;}{\f556\fmodern\fcharset162\fprq1 Letter Gothic Tur;}{\f557\fmodern\fcharset186\fprq1 Letter Gothic Baltic;}{\f558\fscript\fcharset238\fprq2 Marigold CE;}{\f562\fscript\fcharset162\fprq2 Marigold Tur;}{\f564\fswiss\fcharset238\fprq2 Univers CE;}{\f565\fswiss\fcharset204\fprq2 Univers Cyr;}{\f568\fswiss\fcharset162\fprq2 Univers Tur;}{\f569\fswiss\fcharset186\fprq2 Univers Baltic;}{\f570\fswiss\fcharset238\fprq2 Univers Condensed CE;}{\f571\fswiss\fcharset204\fprq2 Univers Condensed Cyr;}{\f574\fswiss\fcharset162\fprq2 Univers Condensed Tur;}{\f575\fswiss\fcharset186\fprq2 Univers Condensed Baltic;}{\f576\fswiss\fcharset238\fprq2 Albertus CE;}{\f577\fswiss\fcharset204\fprq2 Albertus Cyr;}{\f580\fswiss\fcharset162\fprq2 Albertus Tur;}{\f581\fswiss\fcharset186\fprq2 Albertus Baltic;}{\f582\fswiss\fcharset238\fprq2 Metrostyle CE;}{\f583\fswiss\fcharset204\fprq2 Metrostyle Cyr;}{\f586\fswiss\fcharset162\fprq2 Metrostyle Tur;}{\f587\fswiss\fcharset186\fprq2 Metrostyle Baltic;}{\f588\fswiss\fcharset238\fprq2 Metrostyle Extended CE;}{\f589\fswiss\fcharset204\fprq2 Metrostyle Extended Cyr;}{\f592\fswiss\fcharset162\fprq2 Metrostyle Extended Tur;}{\f593\fswiss\fcharset186\fprq2 Metrostyle Extended Baltic;}{\f594\froman\fcharset238\fprq2 Ozzie Black CE;}{\f595\froman\fcharset204\fprq2 Ozzie Black Cyr;}{\f598\froman\fcharset162\fprq2 Ozzie Black Tur;}{\f599\froman\fcharset186\fprq2 Ozzie Black Baltic;}{\f624\fnil\fcharset238\fprq2 USPS Bar Code CE;}{\f628\fnil\fcharset162\fprq2 USPS Bar Code Tur;}{\f762\fnil\fcharset238\fprq2 Andes CE;}{\f766\fnil\fcharset162\fprq2 Andes Tur;}{\f774\fnil\fcharset238\fprq2 BlackChancery CE;}{\f778\fnil\fcharset162\fprq2 BlackChancery Tur;}{\f798\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f799\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}{\f801\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f802\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f803\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}{\f804\fswiss\fcharset238\fprq2 Arial Black CE;}{\f805\fswiss\fcharset204\fprq2 Arial Black Cyr;}{\f807\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f808\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f809\fswiss\fcharset186\fprq2 Arial Black Baltic;}{\f810\froman\fcharset238\fprq2 Bookman Old Style CE;}{\f811\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f813\froman\fcharset161\fprq2 Bookman Old Style Greek;}{\f814\froman\fcharset162\fprq2 Bookman Old Style Tur;}{\f815\froman\fcharset186\fprq2 Bookman Old Style Baltic;}{\f822\fswiss\fcharset238\fprq2 Impact CE;}{\f823\fswiss\fcharset204\fprq2 Impact Cyr;}{\f825\fswiss\fcharset161\fprq2 Impact Greek;}{\f826\fswiss\fcharset162\fprq2 Impact Tur;}{\f827\fswiss\fcharset186\fprq2 Impact Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar\widctlpar\adjustright \f12\cgrid \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \sbasedon10 page number;}{\s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid \sbasedon0 \snext0 toc 1;}{\s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid \sbasedon0 \snext17 footer;}{\s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid \sbasedon0 \snext18 header;}{\s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid \sbasedon0 \snext0 index 1;}{\s20\fi-240\li480\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 2;}{\s21\fi-240\li720\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 3;}{\s22\fi-240\li960\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 4;}{\s23\fi-240\li1200\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 5;}{\s24\fi-240\li1440\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 6;}{\s25\fi-240\li1680\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 7;}{\s26\fi-240\li1920\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 8;}{\s27\fi-240\li2160\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs18\cgrid \sbasedon0 \snext0 index 9;}{\s28\li140\sb240\sa120\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid \sbasedon0 \snext19 index heading;}{\s29\li480\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 3;}{\s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \cgrid \sbasedon0 \snext0 toc 2;}{\s31\li720\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 4;}{\s32\li960\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 5;}{\s33\li1200\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 6;}{\s34\li1440\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 7;}{\s35\li1680\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 8;}{\s36\li1920\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \f12\cgrid \sbasedon0 \snext0 toc 9;}{\s37\nowidctlpar\widctlpar\adjustright \b\f6\fs20\cgrid \sbasedon0 \snext37 Command;}{\s38\nowidctlpar\widctlpar\adjustright \f6\fs20\cgrid \snext38 Variable Name;}}{\*\revtbl {Unknown;}}{\info{\title GNO Shell User's Manual}{\author Lisa K Holsberg}{\operator Lisa K Holsberg}{\creatim\yr1997\mo8\dy27\hr16\min7}{\revtim\yr1997\mo8\dy27\hr16\min7}{\printim\yr1996\mo8\dy7\hr23\min48}{\version2}{\edmins0}{\nofpages10}{\nofwords17329}{\nofchars98780}{\*\company Promethean Enterprises}{\nofcharsws121308}{\vern71}}\margl1080\margr1080\margb720 \facingp\widowctrl\ftnbj\aenddoc\hyphhotz0\margmirror\sprstsp\otblrul\brkfrm\sprstsm\truncex\nolead\msmcap\lytprtmet\hyphcaps0\viewkind1\viewscale83\viewzk2\pgbrdrhead\pgbrdrfoot \fet0\sectd \pgnrestart\linex0\endnhere\sectdefaultcl {\footerl \pard\plain \s17\nowidctlpar\widctlpar\brdrb\brdrs\brdrw30\brsp20 \tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\field{\*\fldinst {\cs15\b PAGE }}{\fldrslt {\cs15\b\lang1024 4}}}{
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \nowidctlpar\widctlpar\adjustright \f12\cgrid {
\par }\pard \nowidctlpar\widctlpar\adjustright {
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par
\par }\pard \qr\nowidctlpar\widctlpar\adjustright {\b\f4\fs76 GNO Shell User's Manual
\par }\pard \qr\nowidctlpar\widctlpar\adjustright {\f4\fs36 By Tim Meekins, Albert Chin, and Jawaid Bazyar
\par Edited by Andrew Roughan}{\f4\fs36
\par
\par }{\f4\fs36
\par }\pard \nowidctlpar\widctlpar\adjustright {\f4\fs48 \page \page }{\f4\fs48 Table of Contents}{\f4
\par }\pard \nowidctlpar\widctlpar\adjustright {
\par }\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {\field\fldedit{\*\fldinst {\b0\f4 TOC \\f }}{\fldrslt {\lang1024 Chapter 1\tab Getting started with the GNO Shell\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095762 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095762 }}{\fldrslt {\lang1024 5}}}}}{\lang1024
\par }\pard\plain \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \cgrid {\lang1024 Introduction\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095763 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095763 }}{\fldrslt {\lang1024 5}}}}}{\lang1024
\par }\pard \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright {\lang1024 Customizing the Shell Environment\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095764 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095764 }}{\fldrslt {\lang1024 5}}}}}{\lang1024
\par Invoking gsh\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095765 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095765 }}{\fldrslt {\lang1024 7}}}}}{\lang1024
\par }\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {\lang1024 Chapter 2\tab Interacting with the GNO Shell\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095766 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095766 }}{\fldrslt {\lang1024 9}}}}}{\lang1024
\par }\pard\plain \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \cgrid {\lang1024 Executing Commands\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095767 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095767 }}{\fldrslt {\lang1024 9}}}}}{\lang1024
\par }\pard \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright {\lang1024 Command-line Editor\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095768 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095768 }}{\fldrslt {\lang1024 9}}}}}{\lang1024
\par Command Input\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095769 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095769 }}{\fldrslt {\lang1024 10}}}}}{\lang1024
\par Command Editing\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095770 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095770 }}{\fldrslt {\lang1024 10}}}}}{\lang1024
\par History Editing Keys\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095771 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095771 }}{\fldrslt {\lang1024 12}}}}}{\lang1024
\par Command, Filename and Variable completion\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095772 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095772 }}{\fldrslt {\lang1024 12}}}}}{\lang1024
\par }\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {\lang1024 Chapter 3\tab Using the GNO Shell more productively\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095773 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095773 }}{\fldrslt {\lang1024 15}}}}}{\lang1024
\par }\pard\plain \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \cgrid {\lang1024 What does this command do?\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095774 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095774 }}{\fldrslt {\lang1024 15}}}}}{\lang1024
\par }\pard \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright {\lang1024 Option Arguments\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095775 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095775 }}{\fldrslt {\lang1024 15}}}}}{\lang1024
\par Entering Multiple commands\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095776 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095776 }}{\fldrslt {\lang1024 17}}}}}{\lang1024
\par Using Aliases as Shorthand\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095777 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095777 }}{\fldrslt {\lang1024 17}}}}}{\lang1024
\par Redirecting Input and Output\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095778 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095778 }}{\fldrslt {\lang1024 18}}}}}{\lang1024
\par Pipelines\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095779 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095779 }}{\fldrslt {\lang1024 19}}}}}{\lang1024
\par Job Control\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095780 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095780 }}{\fldrslt {\lang1024 21}}}}}{\lang1024
\par Working with Pathnames\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095781 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095781 }}{\fldrslt {\lang1024 24}}}}}{\lang1024
\par Pathname Expansion\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095782 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095782 }}{\fldrslt {\lang1024 24}}}}}{\lang1024
\par Quoting Special Characters\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095783 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095783 }}{\fldrslt {\lang1024 26}}}}}{\lang1024
\par How gsh Finds a Command\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095784 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095784 }}{\fldrslt {\lang1024 27}}}}}{\lang1024
\par }\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {\lang1024 Chapter 4\tab Built-in Commands\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095785 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095785 }}{\fldrslt {\lang1024 29}}}}}{\lang1024
\par }\pard\plain \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \cgrid {\lang1024 Built-ins vs EXE Commands\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095786 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095786 }}{\fldrslt {\lang1024 29}}}}}{\lang1024
\par }\pard \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright {\lang1024 Shell Commands\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095787 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095787 }}{\fldrslt {\lang1024 29}}}}}{\lang1024
\par Kernel Commands\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095788 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095788 }}{\fldrslt {\lang1024 33}}}}}{\lang1024
\par Environment Commands\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095789 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095789 }}{\fldrslt {\lang1024 35}}}}}{\lang1024
\par }\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {\lang1024 Chapter 5\tab Shell Variables\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095790 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095790 }}{\fldrslt {\lang1024 39}}}}}{\lang1024
\par }\pard\plain \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright \cgrid {\lang1024 Using shell variables\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095791 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095791 }}{\fldrslt {\lang1024 39}}}}}{\lang1024
\par }\pard \s30\li2160\nowidctlpar\widctlpar\tqr\tldot\tx10080\adjustright {\lang1024 Scope\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095792 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095792 }}{\fldrslt {\lang1024 39}}}}}{\lang1024
\par Description of Pre-defined Shell Variables\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095793 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095793 }}{\fldrslt {\lang1024 39}}}}}{\lang1024
\par Accessing shell variables\tab }{\field\flddirty{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095794 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095794 }}{\fldrslt {\lang1024 42}}}}}{\lang1024
\par }\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {\lang1024 Appendix A\tab Sample gsh session\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095795 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095795 }}{\fldrslt {\lang1024 45}}}}}{\lang1024
\par }\pard \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright {\lang1024 Appendix B\tab Prefix Conventions\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095796 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095796 }}{\fldrslt {\lang1024 51}}}}}{\lang1024
\par Appendix C\tab Errors\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095797 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095797 }}{\fldrslt {\lang1024 52}}}}}{\lang1024
\par Appendix D\tab Signals\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095798 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095798 }}{\fldrslt {\lang1024 55}}}}}{\lang1024
\par Appendix E\tab Non-Compliant Applications\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095799 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095799 }}{\fldrslt {\lang1024 57}}}}}{\lang1024
\par Appendix F\tab Termcaps\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095800 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095800 }}{\fldrslt {\lang1024 59}}}}}{\lang1024
\par Glossary\tab \tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc364095801 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc364095801 }}{\fldrslt {\lang1024 60}}}}}{\lang1024
\par }}}\pard\plain \s16\ri720\nowidctlpar\widctlpar\tx2160\tqr\tldot\tx10080\adjustright \b\cgrid {Index\tab \tab 63
\par }\pard\plain \nowidctlpar\widctlpar\adjustright \f12\cgrid {
\par \page \sect }\sectd \psz1\linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Getting started with the GNO Shell\tab Chapter 1
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Chapter 1\tab Getting started with the GNO Shell
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\brdrb\brdrs\brdrw30\brsp20 \tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\field{\*\fldinst {\cs15\b PAGE }}{\fldrslt {\cs15\b\lang1024 8}}}{
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\brdrb\brdrs\brdrw30\brsp20 \tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {
\par }\pard \s17\qr\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\field{\*\fldinst {\cs15\b PAGE }}{\fldrslt {\cs15\b\lang1024 7}}}{
\par }}{\headerf \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {
\par }}\pard\plain \nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Chapter 1
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4\fs48 Getting started with the GNO Shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364095762}Getting started with the GNO Shell{\*\bkmkend _Toc364095762}\tcl1}}}{\f4\fs48
\par }\pard \qr\nowidctlpar\widctlpar\adjustright {\f4\fs20 "Computer operating systems are among the most complex objects created by mankind..."
\par Douglas Comer, Operating System Design, The Xinu Approach
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par
\par }{\b\f4 Introduction}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095763}Introduction{\*\bkmkend _Toc364095763}\tcl1}}}{\f4
\par
\par The GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 is an integral part of the GNO Multitasking Environment (GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 ). The GNO shell provides the interface between the user and the GNO Kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Kernel}}}{\f4 . While both work together, the jobs they perform are quite different. This manual documents the functions of the shell.
\par
\par The user interacts with the shell through a command-line}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 interface. Command-line interfaces provide a unique way of interacting with the operating system. Unlike GUI}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GUI}}}{\f4 s (Graphical User Interfaces), with which you are already familiar with by using programs such as the Finder and ShrinkIt! GS, all commands are typically entered using the keyboard. The shell interprets commands and passes them to the kernel for control and execution.
\par
\par The command-line interface will be unfamiliar to some people However, once the command-line interface has been mastered, the user should have no difficulty using any current or future GNO applications. Those of you already familiar with Unix interfaces, such as the C shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 C shell}}}{\f4 , Bourne shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Bourne shell}}}{\f4 , and Korn shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Korn shell}}}{\f4 , or the ORCA shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA shell}}}{\f4 on the Apple IIGS, will begin to realize the advantages which GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 is able to provide.
\par
\par The way this manual is presented allows the complete beginner to simply work through the chapters in a chronological prder. Chapter 2 familiarises the user with entering basic commands whereas the more powerful GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 features are introduced in Chapter 3. Chapter 4 documents the commands which are built into the GNO Shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Shell}}}{\f4 and Chapter 5 explains shell variables}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 variables}}}{\f4 which give the user control over how thier installation functions.
\par
\par
\par }{\b\f4 Customizing the Shell Environment}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095764}Customizing the Shell Environment{\*\bkmkend _Toc364095764}\tcl1}}}{\f4
\par
\par When }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 , the implimentation of the GNO Shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Shell}}}{\f4 , is executed, it reads in and processes the }{\i\f4 gshrc}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc }}}{\f4 file. This file contains start-up instructions for the shell, which can be used to customize the operation of the shell and other aspects of the system. It is created by the GNO Installer}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Installer}}}{\f4 during the installation process.
\par
\par The following is a sample }{\i\f4 gshrc}{\f4 file (line numbers have been added for convenience):
\par }\pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {
\par }\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx7920\adjustright \f12\cgrid {\f6\fs20 \tab ###\tab line #1
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx7920\adjustright {\f6\fs20 \tab #\tab line #2
\par \tab # GNO 2.0 gshrc file\tab line #3
\par \tab #\tab line #4
\par \tab ###\tab line #5
\par \tab #\tab line #6
\par \tab # Initialize our environment\tab line #7
\par \tab #\tab line #8
\par \tab set path=":hard:gno:bin :hard:gno:usr:bin"\tab line #9
\par \tab set prompt="[%h] %S%t%s %C> "\tab line #10
\par \tab set home=":hard:gno:user:root"\tab line #11
\par \tab set term=gnocon\tab line #12
\par \tab export path prompt home term\tab line #13
\par \tab setenv history=100 savehist=25\tab line #14
\par \tab ###\tab line #15
\par \tab #\tab line #16
\par \tab #Set up standard prefixes for utilities.\tab line #17
\par \tab #\tab line #18
\par \tab ###\tab line #19
\par \tab prefix 2 :software:orca:libraries\tab line #20
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx7920\adjustright {\f6\fs20 \tab prefix 3 :software:orca\tab line #21
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx7920\adjustright {\f6\fs20 \tab prefix 4 :software:orca:shell\tab line #22
\par \tab prefix 5 :software:orca:languages\tab line #23
\par \tab prefix 6 :software:orca:utilities\tab line #24
\par \tab prefix 7 :tmp\tab line #25
\par \tab ###\tab line #26
\par \tab #\tab line #27
\par \tab # Set up prefixes for Orca2.0(tm)'s benefit\tab line #28
\par \tab #\tab line #29
\par \tab ###\tab line #30
\par \tab prefix 13 :software:orca:libraries\tab line #31
\par \tab prefix 14 :software:orca\tab line #32
\par \tab prefix 15 :software:orca:shell\tab line #33
\par \tab prefix 16 :software:orca:languages\tab line #34
\par \tab prefix 17 :software:orca:utilities\tab line #35
\par \tab alias ls 'ls -CF'\tab line #36
\par \tab alias dir 'ls -al'\tab line #37
\par \tab alias cp 'cp -i'\tab line #38
\par \tab alias rm 'cp -p rm'\tab line #39
\par \tab alias mv 'cp -p mv'\tab line #40
\par \tab setenv usrman='/usr/man'\tab line #41
\par \tab set fignore='.a .root .sym'\tab line #42
\par \tab alias zcat 'compress -cd'\tab line #43
\par \tab setenv pager=less\tab line #44
\par \tab setenv less=-e\tab line #45
\par \tab set nonewline=1\tab line #46
\par \tab #\tab line #47
\par \tab # Move to home directory\tab line #48
\par \tab #\tab line #49
\par \tab cd\tab line #50
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par When you install GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 , the GNO installer}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO installer}}}{\f4 knows where to find the GNO utilities and any ORCA}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA}}}{\f4 utilities you may have. Unfortunately it does not know where all the other utilities and applications that you may wish to use are located. It is therefore necessary to edit the setup file in order to tell the GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 where these programs are on your hard disk.
\par
\par The setup file, }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\v\f4 ,}{\f4 is located in the /usr directory of the path where you installed GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 . You can use any text editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 editor}}}{\f4 from the desktop to edit the }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file, or if you are already familiar with the editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 editor}}}{\f4 }{\b\f4 vi}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 vi}}}{\f4 you can use this utility after launching the GNO kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO kernel}}}{\f4 .
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par Line 9 is the statement that we are concerned with. }{\b\f4 Hard }{\f4 represents the name of your particular hard drive volume where you have installed GNO/ME.
\par
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx7920\adjustright {\f6\fs20 \tab set path=":hard:gno:bin :hard:gno:usr:bin"\tab line #9
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 You will see that spaces have been inserted between pathnames. The space is the pathname separator}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 pathname separator}}}{\f4 and the colon has been used as the path delimiter}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 path delimiter}}}{\f4 for this specific variable, PATH}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 PATH}}}{\f4 . As an exercise, add your system directory to this statement. Line 9 should now look like this:
\par
\par }{\f6\fs20 \tab set path=":hard:gno:bin :hard:gno:usr:bin :hard:system"
\par }{\f4
\par What you have just done allows the GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 to find the }{\b\f4 Finder}{\f4 application. Now go ahead and add any pathnames that hold utilities or applications that you will use frequently from GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 . It should also be noted that it is possible to have more than one pathname containing EXE}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 , SYS16}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 SYS16}}}{\f4 , or EXEC}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXEC}}}{\f4 files; this is impossible under ORCA}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA}}}{\f4 . The PATH}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 PATH}}}{\f4 variable is discussed thoroughly in Chapter 5.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 For now, the remaining lines of the }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file do not need editing. As you gain an understanding of the system you may wish to make further changes to the }{\i\f4 gshrc}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc }}}{\f4 file. Make sure you save the file before you exit the editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 editor}}}{\f4 .
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par It is possible to modify these instructions while the GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 is active, but any changes will be lost upon exiting }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\b\f4 .}{\f4 If you wish the changes to remain effective for the next session you must add them to the }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file.
\par
\par By customizing the }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file it is possible to make the GNO environment more like U}{\f4\fs20 NIX}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 UNIX}}}{\f4\fs20 , }{\f4 the ORCA }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA }}}{\f4 environment, or something completly different. Customization of the GNO environment leads to greater user productivity.
\par }\pard \nowidctlpar\widctlpar\adjustright {\f4
\par
\par }{\b\f4 Invoking }{\v\f4 .i.}{\b\f4 gsh}{\pard\plain \nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095765}Invoking .i.gsh{\*\bkmkend _Toc364095765}\tcl1}}}{\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 GNO/ME can be launched from a program launcher, such as the System 6.0 Finder. Launch the GNO Kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Kernel}}}{\f4 program, }{\b\f4 kern}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 kern}}}{\f4 by double clicking on it. The GNO kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO kernel}}}{\f4 automatically executes the supplied GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 , }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 .
\par
\par The prompt}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 prompt}}}{\f4 , "[1] 2:00am root }{\f6\fs20 %}{\f4 ", indicates that }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 is ready to receive input from the keyboard.
\par
\par To start a new }{\b\f4 gsh}{\f4 from the command-line simply type }{\b\f4 gsh}{\f4 . If multiple copies of the }{\b\f4 gsh}{\f4 process are undesirable, use the command }{\b\f4 source}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 source}}}{\b\f4 gsh}{\f4 instead. This is useful for testing changes made to the }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file. }{\b\f4 Source}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 Source}}}{\f4 is a built-in comand which is discussed in Chapter 4 }{\b\f4 Shell commands}{\f4 .
\par }{\f4 \page \sect }\sectd \psz1\linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Interacting with the GNO Shell\tab Chapter 2
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Chapter 2\tab Interacting with the GNO Shell
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\brdrb\brdrs\brdrw30\brsp20 \tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\field{\*\fldinst {\cs15 PAGE }}{\fldrslt {\cs15\lang1024 10}}}{
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\brdrb\brdrs\brdrw30\brsp20 \tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {
\par }\pard \s17\qr\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\field{\*\fldinst {\cs15 PAGE }}{\fldrslt {\cs15\lang1024 35}}}{
\par }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Chapter 2
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4\fs48 Interacting with the GNO Shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364095766}Interacting with the GNO Shell{\*\bkmkend _Toc364095766}\tcl1}}}{\f4\fs48
\par }{\f6
\par
\par
\par }{\b\f4 Executing Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095767}Executing Commands{\*\bkmkend _Toc364095767}\tcl1}}}{\f4
\par
\par A command consists of two parts: a name and its arguments. The command name}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command name}}}{\f4 is the name used to start the command. The name is usually the name of a file which can be executed. The only exceptions are commands which are built-in to the shell. These commands are documented in Chapter 4 }{\b\f4 Built-In Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 Built-In Commands}}}{\f4 . Any shell utility command with a filetype of EXE}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 , SYS16}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 SYS16}}}{\f4 , or EXEC}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXEC}}}{\v\f4 ,}{\f4 can be executed in this fashion. The command name must be separated from the command arguments with a space.
\par
\par The command arguments}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command arguments}}}{\f4 are parameters}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 parameters}}}{\f4 that the command takes as data to work with (In Applesoft BASIC, "}{\f6\fs20 HELLO WORLD}{\f4 " would be an argument for the }{\f6\fs20 PRINT}{\f4 command). Command arguments are separated from each other with a space. Note that although arguments extend the usefulness of a command, not all commands have arguments. Any arguments entered after the command will be passed by the shell to the program when it starts exectuting.
\par
\par The examples below use the following commands:
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright {\f4 \tab }{\b\f6\fs20 qtime}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 qtime}}}{\f4 \tab displays time in English text.
\par \tab }{\b\f6\fs20 echo}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 echo}}}{\f4 \tab prints arguments to the screen.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par Examples:
\par }{\f6\fs20 \tab % }{\b\f6\fs20 qtime}{\f6\fs20
\par \tab It's almost five.
\par \tab % }{\b\f6\fs20 echo II Infinitum}{\f6\fs20
\par \tab II Infinitum
\par }{\f4
\par At the simplest level the user enters commands to the shell by typing them on the keyboard. }{\b\f4 Gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 Gsh}}}{\f4 includes a command-line}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 editor to help the user enter and edit commands. The editor also provides a way to modify and execute previous commands. Additionally the editor can help complete the names of commands, filenames and variables.
\par
\par
\par }{\b\f4 Command-line Editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095768}Command-line Editor{\*\bkmkend _Toc364095768}\tcl1}}}{\f4
\par
\par Below is a complete description of the functions of the command-line editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line editor}}}{\f4 with short examples depicting how each editing key works.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 Throughout the examples the underline character, "}{\f6\fs20 _}{\f4 ", will be used to represent the current cursor position. In addition, "OA}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA}}}{\f4 " is used to represent the Open Apple}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Open Apple}}}{\f4 key and the term }{\i\f4 word}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 word }}}{\f4 is used to indicate a string of characters consisting of only letters, digits, and underscores. To the right of a editing key entry is the }{\f6\fs20 bindkey}{\f4\fs20 }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 bindkey }}}{\f4 function name which is used to remap editing functions to new keys. This information is included for reference purposes only. See Chapter 4 }{\b\f4 Shell Commands}{\f4 for more information on the }{\f6\fs20 bindkey}{\f4 command.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par It should be pointed out that at this stage that the user should not be concerned with what the actual commands used in the examples do, rather the user should concentrate on how the command-line editor functions work.
\par
\par }{\b\f4 Command Input}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095769}Command Input{\*\bkmkend _Toc364095769}\tcl1}}}{\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright {\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 These command-line editor keys deal with entering text directly on the command-line.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright {\f6\fs20
\par RETURN}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 RETURN}}}{\f4 \tab }{\b\f6\fs20 newline}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 newline}}}{\f4
\par \tab The return key is used to terminate line input. }{\b\f4 gsh}{\f4 then interprets the command on the line and acts accordingly. The position of the cursor on the command-line does not matter.
\par \tab }{\f6\fs20 Before
\par \tab % }{\b\f6\fs20 echo f}{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20 \tab (RETURN)
\par \tab After
\par \tab foo bar
\par \tab % _}{\f4
\par
\par }{\f6\fs20 CTRL-D}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-D}}}{\f4 \tab <no bindkey name>
\par \tab Exits }{\b\f4 gsh}{\f4 if it was the first character typed on the command-line. If there are still jobs running in the background or stopped, }{\b\f4 gsh}{\f4 will display "}{\f6\fs20 There are stopped jobs.}{\f4 " If you press }{\f6\fs20 CTRL-D}{\f4 a second time without an intervening command, }{\b\f4 gsh}{\f4 will terminate all the jobs in the job list and exit.
\par
\par }{\f6\fs20 CTRL-R}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-R}}}{\f4 \tab }{\b\f6\fs20 redraw}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 redraw}}}{\f4
\par \tab Moves to the next line and re-displays the current command-line. Use this to redraw the current line if the screen becomes garbled.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f6\fs20
\par CTRL-L}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-L}}}{\f4 \tab }{\b\f6\fs20 clear-screen}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 clear-screen}}}{\f6\fs20
\par }{\f4 \tab Clears the screen, moves the cursor to the top line, and redraws the prompt and any command-line that was in the process of being edited.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright {\f4
\par
\par }{\b\f4 Command Editing}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095770}Command Editing{\*\bkmkend _Toc364095770}\tcl1}}}{\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f6\fs20
\par These command-line editor keys allow editing of the command-line text.
\par
\par CTRL-B}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-B}}}{\f6\fs20 \tab }{\b\f6\fs20 backward-char}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 backward-char}}}{\f6\fs20
\par LEFT-ARROW}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 LEFT-ARROW}}}{\f4 \tab Moves the cursor one character to the left. You cannot move past the first character on the line. If so, }{\b\f4 gsh}{\f4 will output an error beep.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print f}{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20 \tab (LEFT-ARROW)\tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul f}{\b\f6\fs20 oo bar}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 CTRL-F}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-F}}}{\f6\fs20 \tab }{\b\f6\fs20 forward-char}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 forward-char}}}{\f6\fs20
\par RIGHT-ARROW}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 RIGHT-ARROW}}}{\f4 \tab Moves the cursor one character to the right. You cannot move past the last character on the line. If so, }{\b\f4 gsh}{\f4 will output an error beep.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print f}{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20 \tab (RIGHT-ARROW)\tab % }{\b\f6\fs20 print fo}{\b\f6\fs20\ul o}{\b\f6\fs20 bar}{\f6\fs20
\par }{\f4
\par }{\f4
\par }{\f6\fs20 DELETE}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 DELETE}}}{\f4 \tab }{\b\f6\fs20 backward-delete-char}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 backward-delete-char}}}{\f6\fs20
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4 \tab Deletes the character to the left of the cursor. You can delete up to the first character on the command-line.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print f}{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20 \tab (DELETE)\tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 CLEAR}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CLEAR}}}{\f6\fs20 \tab }{\b\f6\fs20 kill-whole-line}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 kill-whole-line}}}{\f4
\par }{\f6\fs20 CTRL-X}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-X}}}{\f4 \tab Deletes all characters on the command line and positions the cursor after the prompt.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 prin}{\b\f6\fs20\ul t}{\b\f6\fs20 foo bar}{\f6\fs20 \tab (CTRL-X)\tab % }{\b\f6\fs20 _}{\f6\fs20
\par }{\f4
\par }{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 }}}{\f6\fs20
\par CTRL-Y}{\v\f6\fs20 ;}{\f4 \tab }{\b\f6\fs20 kill-end-of-line}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 kill-end-of-line}}}{\f4
\par \tab Deletes all characters from the cursor to the end of the command-line.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print f}{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20 \tab (CTRL-Y)\tab % }{\b\f6\fs20 print f_}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 CTRL-D}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-D}}}{\f6\fs20 \tab }{\b\f6\fs20 delete-char}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 delete-char}}}{\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f6\fs20 OA-D}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA-D}}}{\f4 \tab Deletes the character under the cursor.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print fo}{\b\f6\fs20\ul o}{\b\f6\fs20 bar}{\f6\fs20 \tab (OA-D)\tab % }{\b\f6\fs20 print fo}{\b\f6\fs20\ul }{\b\f6\fs20 bar}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 CTRL-A}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-A}}}{\f6\fs20 \tab }{\b\f6\fs20 beginning-of-line}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 beginning-of-line}}}{\f4
\par }{\f6\fs20 OA-<}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA-<}}}{\f4 \tab Moves the cursor to the beginning of the line.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul f}{\b\f6\fs20 oo bar}{\f6\fs20 \tab (OA-<)\tab % }{\b\f6\fs20\ul p}{\b\f6\fs20 rint foo bar}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 CTRL-E}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-E}}}{\f6\fs20 \tab }{\b\f6\fs20 end-of-line}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 end-of-line}}}{\f4
\par }{\f6\fs20 OA->}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA->}}}{\f4 \tab Moves the cursor to the first position past the last character on the line.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul f}{\b\f6\fs20 oo bar}{\f6\fs20 \tab (OA->)\tab % }{\b\f6\fs20 print foo bar}{\b\f6\fs20\ul _}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 OA-RIGHT-ARROW}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA-RIGHT-ARROW}}}{\f6\fs20 }{\b\f6\fs20 forward-word}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 forward-word}}}{\f4
\par \tab Moves the cursor right to the last character of the current word.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul f}{\b\f6\fs20 oo bar}{\f6\fs20 \tab (OA-RIGHT-ARROW)\tab % }{\b\f6\fs20 print fo}{\b\f6\fs20\ul o}{\b\f6\fs20 bar}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 OA-LEFT ARROW}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA-LEFT ARROW}}}{\f6\fs20 }{\b\f6\fs20 backward-word}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 backward-word}}}{\f4
\par \tab Moves the cursor left to the beginning of the current word.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print f}{\b\f6\fs20\ul o}{\b\f6\fs20 o bar}{\f6\fs20 \tab (OA-LEFT ARROW)\tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul f}{\b\f6\fs20 oo bar}{\f6\fs20
\par \tab % }{\b\f6\fs20 print foo }{\b\f6\fs20\ul b}{\b\f6\fs20 ar}{\f6\fs20 \tab (OA-LEFT ARROW)\tab % }{\b\f6\fs20 print }{\b\f6\fs20\ul f}{\b\f6\fs20 oo bar}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 OA-E}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA-E}}}{\f4 \tab }{\b\f6\fs20 toggle-cursor}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 toggle-cursor}}}{\f4
\par \tab Toggles input mode between insert }{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 insert }}}{\f4 and overstrike}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 overstrike}}}{\f4 . Overstrike mode is distinguished by a solid inverse cursor and insert mode by a blinking '}{\b\f6\fs20 _}{\f4 ' cursor. In overstrike mode, any characters that are typed directly over-write those characters below the cursor. In insert mode, the characters typed are inserted before the character below the cursor.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4
\par
\par }{\f4
\par }{\b\f4 History Editing Keys}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095771}History Editing Keys{\*\bkmkend _Toc364095771}\tcl1}}}{\b\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par These command-line editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line editor}}}{\f4 keys allow access to previously entered commands. The GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 automatically keeps track of previous commands in what is called a history buffer}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 history buffer}}}{\f4 .
\par
\par The maximum number of command-lines saved in the history buffer}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 history buffer}}}{\f4 is determined by the shell variable }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $HISTORY}}}{\f4 . A default value for this variable is set in the }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file that the GNO Installer}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Installer}}}{\f4 creates. The lines saved to the history buffer}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 history buffer}}}{\f4 are kept between sessions. That is, when you exit }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 , $}{\f6\fs20 SAVEHIST}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 $SAVEHIST}}}{\f4 command-lines are saved to the }{\f6\fs20 history}{\f4 file in your }{\f6\fs20 $HOME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $HOME}}}{\f4 directory. When }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 is invoked again, all command-lines saved in the history buffer will be available using history editing keys. See Chapter 5 }{\b\f4 Description of Predefined Shell Variables}{\f4 for more informtation on the }{\f6\fs20 HISTORY}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 HISTORY}}}{\f4 and }{\f6\fs20 SAVEHIST}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 SAVEHIST}}}{\f4 variables.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4
\par }{\f6\fs20 CTRL-P}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-P}}}{\f6\fs20 \tab }{\b\f6\fs20 up-history}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 up-history}}}{\f4
\par }{\f6\fs20 UP-ARROW}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 UP-ARROW}}}{\f4 Fetches the previous command-line. If the current command-line is the first line in the history buffer, the next line fetched will be an empty command-line. If invoked again, the last line in the history buffer will be displayed.
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 print foo bar}{\f6\fs20
\par \tab % }{\b\f6\fs20 echo Apple II}{\f6\fs20
\par \tab % }{\b\f6\fs20 echo GNO/ME}{\f6\fs20
\par \tab % }{\b\f6\fs20 _}{\f6\fs20 \tab (UP-ARROW)\tab % }{\b\f6\fs20 echo GNO/ME_}{\f6\fs20
\par \tab % }{\b\f6\fs20 echo GNO/ME_}{\f6\fs20 \tab (UP-ARROW)\tab % }{\b\f6\fs20 echo Apple II_}{\f6\fs20
\par }{\f4
\par }{\f6\fs20 CTRL-N}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-N}}}{\f6\fs20 \tab }{\b\f6\fs20 down-history}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 down-history}}}{\f4
\par }{\f6\fs20 DOWN-ARROW}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 DOWN-ARROW}}}{\f4 Fetches the next command-line. If the current command-line is the last command line in the history buffer, the next line fetched will be the first command-line in the history buffer.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3960\tx5760\adjustright {\f6\fs20 \tab Before\tab \tab After
\par \tab % print foo bar
\par \tab % echo Apple II
\par \tab % echo GNO/ME
\par \tab % }{\b\f6\fs20 _}{\f6\fs20 \tab (DOWN-ARROW)\tab % }{\b\f6\fs20 print foo bar_}{\f6\fs20
\par \tab % }{\b\f6\fs20 print foo bar_}{\f6\fs20 \tab (DOWN-ARROW)\tab % }{\b\f6\fs20 echo Apple II_}{\f6\fs20
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4
\par
\par }{\b\f4 Command, Filename and Variable completion}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095772}Command, Filename and Variable completion{\*\bkmkend _Toc364095772}\tcl1}}}{\b\f4
\par }{\f4
\par These command-line editor}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line editor}}}{\f4 keys can be used to complete filenames, commands and variables.
\par
\par }{\f6\fs20 CTRL-D}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-D}}}{\f4 \tab }{\b\f6\fs20 list-choices}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 list-choices}}}{\f4
\par \tab Lists commands and pathnames that match the current word.
\par }{\f6\fs20 \tab Before
\par \tab % }{\b\f6\fs20 print foo_ bar}{\f6\fs20 \tab (CTRL-D)
\par \tab After
\par \tab foo.c fool foo.m
\par \tab % }{\b\f6\fs20 print foo_ bar}{\f6\fs20
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f6\fs20 TAB}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 TAB}}}{\f4 \tab }{\b\f6\fs20 complete-word}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 complete-word}}}{\f4
\par \tab Command, pathname and variable completion. If the cursor is positioned on the first word of the command-line, command pathname is performed, else pathname or variable completion is performed. The word is expanded to the closest matching command, pathname or variable. Characters are appended up to the point that they would cause more than one. If a complete pathname results for pathname completion, }{\b\f4 gsh}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 appends a "}{\f6\fs20 /}{\f4 " if the pathname is a directory; otherwise, it appends a space.
\par
\par }{\f6\fs20 \tab Before\tab \tab After
\par \tab % }{\b\f6\fs20 ca_}{\f6\fs20 \tab (TAB)\tab % }{\b\f6\fs20 cat_}{\f6\fs20
\par \tab % }{\b\f6\fs20 mo_ foo.c}{\f6\fs20 \tab (TAB)\tab % }{\b\f6\fs20 more_ foo.c}{\f6\fs20
\par \tab % }{\b\f6\fs20 more fo_}{\f6\fs20 \tab (TAB)\tab % }{\b\f6\fs20 more foo_}{\f6\fs20
\par \tab % }{\b\f6\fs20 echo $TERMC_}{\f6\fs20 \tab (TAB)\tab % }{\b\f6\fs20 echo $TERMCAP_}{\f6\fs20
\par }{\f4\fs20
\par \tab }{\f4 Note that if there is more than one match for the partial command, }{\b\f4 gsh}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 will sound a beep on the speaker. You can use the CTRL-D}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 CTRL-D}}}{\f4 (}{\f6\fs20 list-choices}{\f4 ) command to see the list of possible matches, and should either finish entering the command manually or type enough additional characters to guarantee a unique match.
\par
\par \tab If the }{\f6\fs20 $FIGNORE}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $FIGNORE}}}{\f6\fs20 }{\f4 variable is set, }{\b\f4 gsh}{\f4 ignores filenames (when doing completion) that end with any of the suffixes in }{\f6\fs20 $FIGNORE}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $FIGNORE}}}{\f4 . See Chapter 5 }{\b\f4 Description of Pre-defined Shell Variables}{\f4 for more information regarding the }{\f6\fs20 $FIGNORE }{\f4 variable.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4
\par
\par }{\b\f4 Other ways of entering commands}{\f4
\par
\par }{\f4\ul Terminal Input
\par }{\f4
\par An example involving the connection of a terminal; will be dealt with in Chapter 3 }{\b\f4 Redirecting Input and Output}{\f4 but it is necessary to mention here that when using }{\v\f4 .i.}{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 terminal\; will be dealt with in Chapter 3 Redirecting Input and Output but it is necessary to mention here that when using .i.gsh}}}{\f4 over a terminal, some keystrokes must be slightly modified. This is because there are no terminals that can transmit the OA}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA}}}{\f4 key. Instead, a two-key sequence must be used which replaces OA}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA}}}{\f4 with ESC}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ESC}}}{\f4 . For example, instead of pressing OA-E}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA-E}}}{\f4 to toggle insert }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 insert }}}{\f4 mode, you can type ESC-E}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ESC-E}}}{\f4 over a terminal to do the same thing.
\par
\par If you will be using terminals seriously then you should install the Remote Access}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Remote Access}}}{\f4 package.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx1440\tx3600\tx5760\adjustright {\f4
\par }{\f4\ul Script File
\par }{\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 While you would normally type commands on the command-line}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 , you can also store a series of often used commands in a file. A file containing such a series of commands is called a script}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 script}}}{\f4 . A script is normally created by using a text editor.
\par
\par By typing the name of the script file, the shell will execute it, line by line, as if you had typed each command separately. The }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 file presented in Chapter 1 }{\b\f4 Customizing the Shell Environment}{\f4 is an example of a script file.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\b\f4
\par
\par \page \sect }\sectd \psz1\linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Using the GNO Shell more productively\tab Chapter 3
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Chapter 3\tab Using the GNO Shell more productively
\par }}\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \f12\cgrid {\f4\fs48 Chapter 3
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4\fs48 Using the GNO Shell more productively}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364095773}Using the GNO Shell more productively{\*\bkmkend _Toc364095773}\tcl1}}}{\f4\fs48
\par }\pard \qr\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4\fs20 "And then one day, hooray! Another way for gnomes to say hooray!"
\par Syd Barret, The Gnome
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\b\f4
\par
\par
\par What does this command do?}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095774}What does this command do?{\*\bkmkend _Toc364095774}\tcl1}}}{\f4
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4 If you are unfamiliar with what a particular command actually does or what arguments it accepts, you can check quickly by using the electronic manual. GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 includes a utility called }{\b\f4 man}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 man}}}{\b\f4 }{\f4 which displays the manual pages}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 manual pages}}}{\f4 for a command whose name you supply as an argument. The }{\b\f4 man}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 man}}}{\f4 utility uses another utility called }{\b\f4 more}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 more}}}{\f4 to actually display the pages nicely on the screen. While both of these utilities have electronic manual entries, we have included the printed manual pages in the GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 package to get you started.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par }{\b\f4 Option Arguments}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095775}Option Arguments{\*\bkmkend _Toc364095775}\tcl1}}}{\f4
\par
\par As mentioned in Chapter 2 }{\b\f4 Executing Commands}{\f4 , arguments are passed to a command to extend its usefulness. The arguments presented in the last chapter were words, such as foo, bar and foo.c. Standards exist under unix for programs to accept command-line option arguments}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 option arguments}}}{\f4 . Option arguments (as the name suggests) are optional. There are two standards, short options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 short options}}}{\f4 and long options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 long options}}}{\f4 . Short options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Short options}}}{\f4 are characters that represent commands, whereas long options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 long options}}}{\f4 contain the entire option name.
\par
\par Consider the following output of the }{\f6\fs20 CATALOG}{\f4 command from ProDOS}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ProDOS}}}{\f4 :
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx360\tqr\tx9360\adjustright {\f6\fs20 \tab /DEV
\par \tab NAME TYPE BLOCKS MODIFIED CREATED ENDFILE SUBTYPE
\par
\par \tab FINDER.DATA $C9 1 21-OCT-91 22:38 14-APR-90 18:24 260
\par \tab FINDER.ROOT $C9 1 22-OCT-91 17:12 6-OCT-91 15:40 82
\par \tab GENESYS DIR 1 21-OCT-91 23:37 25-APR-91 15:46 512
\par \tab GSBUG DIR 1 21-OCT-91 23:38 19-JUL-90 16:48 512
\par \tab MERLIN DIR 2 22-OCT-91 2:50 30-APR-91 20:21 1024
\par \tab LIFEGUARD $B3 73 4-SEP-87 4:51 25-DEC-89 20:22 36608
\par \tab ORCA DIR 2 22-OCT-91 17:12 14-SEP-89 18:27 1024
\par \tab GNO DIR 2 22-OCT-91 17:12 13-AUG-91 16:36 1024
\par \tab FAST.ANIM DIR 2 21-OCT-91 23:44 11-MAY-91 10:50 1024
\par \tab MICOL DIR 2 22-OCT-91 3:10 14-JAN-90 2:46 1024
\par \tab SRC DIR 1 21-OCT-91 23:44 7-AUG-91 20:30 512
\par \tab NIFTYLIST.V3.3 DIR 2 21-OCT-91 23:44 29-JUL-91 4:04 1024
\par \tab MCSRC DIR 1 21-OCT-91 23:45 7-AUG-91 20:34 512
\par
\par \tab BLOCKS FREE:43923 BLOCKS USED:21185 TOTAL BLOCKS:65108
\par }{\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4 It is impossible to get any variation in the format of this output. While the GNO/ME utility }{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 serves the same purpose as the command }{\f6\fs20 CATALOG}{\f4 from Applesoft BASIC}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 BASIC}}}{\f4 , it has a wide number of options which can tailor the output to specific needs. Here is how }{\b\f4 ls}{\f4 can be used to give similar output to the }{\f6 CATALOG}{\f4 command:
\par
\par }{\f6\fs20 \tab [1] 2:13am root % }{\b\f6\fs20 ls -l}{\f6\fs20
\par \tab :dev
\par \tab total 45k
\par \tab drw--rd 0000 dir 512 Oct 21 23:45 1991 MCSrc
\par \tab drw--rd 0000 dir 1024 Oct 21 23:44 1991 NiftyList.v3.3
\par \tab drw--rd 0000 dir 1024 Oct 21 23:44 1991 fast.anim
\par \tab drw--rd 0000 dir 512 Oct 21 23:37 1991 genesys
\par \tab drw--rd 0000 dir 1024 Oct 22 17:29 1991 gno
\par \tab drw--rd 0000 dir 512 Oct 21 23:38 1991 gsbug
\par \tab drw--rd 0000 dir 1024 Oct 22 02:50 1991 merlin
\par \tab drw--rd 0000 dir 1024 Oct 22 03:10 1991 micol
\par \tab drw--rd 0100 dir 1024 Oct 22 17:28 1991 orca
\par \tab drw--rd 0000 dir 512 Oct 21 23:44 1991 src
\par }{\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4 The }{\b\f6\fs20 -l}{\f4 short option argument tells }{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 to format the output in long format. }{\b\f4 ls}{\f4 supports only short options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 short options}}}{\f4 . If }{\b\f4 ls}{\f4 did support long options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 long options}}}{\f4 , the above command could be changed to }{\b\f4 ls +format-long}{\f4 . This is clearly more descriptive of what function }{\b\f4 ls}{\f4 will perform. For users to new to the U}{\f4\fs20 NIX}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 UNIX}}}{\f4 environment, long format options are more user-friendly. However, advanced U}{\f4\fs20 NIX}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 UNIX}}}{\f4 users prefer short options because of their brevity.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par As indicated above, }{\b\f4 ls}{\f4 has a wide number of options available to format the output. Use the command "}{\b\f4 ls -?}{\f4 "}{\b\f4 }{\f4 to get a short list of these options. It is left as an exercise for the user to discover how these options affect the output of }{\b\f4 ls}{\f4 . For a complete description of the }{\b\f4 ls}{\f4 command and its options use the command }{\b\f4 man}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 man}}}{\b\f4 ls}{\f4 .
\par
\par As an example of the usage and importance of long options}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 long options}}}{\f4 , the following is the result of the }{\f6\fs20 +help}{\f4 option given to the }{\b\f4 coff}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 coff}}}{\f4 utility. Note the use of both short and long options:
\par
\par }{\f6\fs20 \tab coff }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 coff }}}{\f6\fs20 [-OPTIONS] filename [segment..] [loadsegment..]
\par
\par \tab OPTIONS DESCRIPTION
\par \tab -v [+version] display coff's version number
\par \tab -D [+default] disable default options
\par \tab -d [+asm] dump segment body in 65816-format disassembly
\par \tab -T [+tool] interpret Toolbox, GS/OS, ProDOS, ROM calls
\par \tab -x [+hex] dump segment body in hex (can be used with '+asm')
\par \tab -l [+label] print expressions using labels (default is offsets)
\par \tab -t [+infix] display expressions in infix form
\par \tab -p [+postfix] display expressions in postfix form (default)
\par \tab -m [+merlin] format of '+asm' to use merlin opcodes (default)
\par \tab -o [+orca] format of '+asm' to use orca/m opcodes
\par \tab -a [+shorta] assume 8-bit accumulator for disassembly
\par \tab -i [+shorti] assume 8-bit index registers for disassembly
\par \tab -s [+header] dump segment headers only
\par \tab -n [+noheader] do not print segment headers
\par \tab -f [+nooffset] do not print offset into file
\par \tab -h [+help] print this information, then quit
\par \tab filename name of file to dump
\par \tab [segment] names of segments in file to dump
\par \tab [loadsegment] names of load segments in file to dump
\par }{\f4
\par The long options are much more descriptive, and provide a very easy way to remember options of programs. If an option passed to a shell utility program is not understood by that program, you will generally receive an error message stating that the option is not understood. If the program is user-friendly, a brief list of supported options will also be displayed.
\par }{\f4
\par }{\f4
\par
\par }{\b\f4 Entering Multiple commands}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095776}Entering Multiple commands{\*\bkmkend _Toc364095776}\tcl1}}}{\f4
\par
\par It is possible to give multiple commands to the GNO shell}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO shell}}}{\f4 for processing. To execute multiple commands, place a semi-colon, ";", between them. The commands will be executed sequentially in the order they are entered on the command-line. Take care not to exceed the 1024 character command-line buffer}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line buffer}}}{\f4 . It is possible to execute multiple commands at the same time, this feature is discussed in Chapter 3 }{\b\f4 Background Execution of Commands}{\f4 .
\par
\par To run the }{\b\f4 echo}{\f4 command and the }{\b\f4 ls}{\f4 command in succession, enter the following on the command line:
\par }{\f6\fs20 \tab % }{\b\f6\fs20 echo Running ls ; ls -l}{\f6\fs20
\par }{\f4
\par The output of the preceeding command will display the string "}{\f6\fs20 Running ls}{\f4 " followed by the output of the "}{\b\f4 ls -l}{\f4 " command. This method of running several commands in succession is used often to save typing.
\par
\par
\par }{\b\f4 Using Aliases as Shorthand}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095777}Using Aliases as Shorthand{\*\bkmkend _Toc364095777}\tcl1}}}{\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\b\f4 gsh}{\f4 provides a built-in command, }{\f6\fs20 alias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 alias}}}{\f4 , which allows any command you would type on the command-line to be renamed. You are not limited to renaming a single command name}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command name}}}{\f4 . Rather, you could rename an entire command-line}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 , which could allow you to use the name "}{\f6\fs20 backup}{\f4 " to execute the command "}{\f6\fs20 backup +source /system +destination /tape.drive}{\f4 ". The }{\f6\fs20 alias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 alias}}}{\f4 command is also a very powerful means of customizing your GNO environment to emulate other computing environments.
\par
\par To emulate the ORCA}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA}}}{\f4 environment, the following aliases could be entered into your }{\i\f4 gshrc}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc }}}{\f4 file, or a script called }{\i\f4 orca.alias}{\f4 that }{\i\f4 gshrc}{\f4 would run:
\par
\par }{\f6\fs20 \tab }{\b\f6\fs20 alias copy cp}{\f6\fs20
\par \tab }{\b\f6\fs20 alias cat "ls -l"}{\f6\fs20
\par \tab }{\b\f6\fs20 alias catalog "ls -l"
\par }{\f6\fs20 \tab }{\b\f6\fs20 alias move mv}{\f6\fs20
\par \tab }{\b\f6\fs20 alias rename mv}{\f6\fs20
\par \tab }{\b\f6\fs20 alias delete rm}{\f6\fs20
\par \tab }{\b\f6\fs20 alias type cat}{\f6\fs20
\par \tab }{\b\f6\fs20 alias prefix cd}{\f6\fs20
\par \tab }{\b\f6\fs20 alias create mkdir}{\f6\fs20
\par }{\f4
\par If you alias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 alias}}}{\f4 a string containing multiple words, you must enclose the string in quotes, as done for the catalog alias.}{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\b\f4 }{\f4 interprets the string as one value. If you do not include both the opening and closing quotes, the alias command will notify you of your error.
\par
\par You can view any alias' that are set by entering the }{\f6\fs20 alias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 alias}}}{\f4 command without any arguments. The setting of a particular alias can be viewed by entering one argument consisting of the name of the alias to view.
\par
\par If you wish to remove an alias, use the command }{\f6\fs20 unalias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 unalias}}}{\f4 with the aliased name as the argument. To remove the aliases from the }{\f6\fs20 orca.alias}{\f4 file given above, you could do the following:
\par
\par }{\f6\fs20 \tab % }{\b\f6\fs20 unalias copy cat catalog move rename delete type prefix create}{\f6\fs20
\par }{\f4
\par Unlike the }{\f6\fs20 alias}{\f4 command, the }{\f6\fs20 unalias}{\f4 command can take multiple arguments. See Chapter 5 }{\b\f4 Built-in Commands}{\f4 for further discussion of the }{\f6\fs20 alias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 alias}}}{\f4 and }{\f6\fs20 unalias}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 unalias}}}{\f4 commands.
\par }{\b\f4 Redirecting Input and Output}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095778}Redirecting Input and Output{\*\bkmkend _Toc364095778}\tcl1}}}{\f4
\par
\par Most shell utilities write their output to the screen. However, under GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 , like ORCA}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA}}}{\f4 , it is possible to redirect}{\b\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 redirect }}}{\f4 that output to a file or a GS/OS}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GS/OS}}}{\f4 device. The output of the }{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 command above was imported into this manual by redirecting it to a file. In addition to redirecting the output of a shell utility, it is also possible to redirect the input of that utility. Consider the following }{\b\f4 gsh}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh }}}{\f4 session:
\par
\par }{\f6\fs20 \tab [1]% }{\b\f6\fs20 echo}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 echo}}}{\b\f6\fs20 this is a test}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab this is a test
\par \tab [2]% }{\b\f6\fs20 echo this is a test >}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 >}}}{\b\f6\fs20 file1}{\f6\fs20
\par \tab [3]% }{\b\f6\fs20 cat}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cat}}}{\b\f6\fs20 file1}{\f6\fs20
\par \tab this is a test
\par \tab [4]% }{\b\f6\fs20 cat <}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 <}}}{\b\f6\fs20 file1}{\f6\fs20
\par \tab this is a test
\par }{\f4
\par In the example above, }{\b\f4 cat}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 cat}}}{\f4 takes input from }{\i\f4 standard input}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 standard input}}}{\f4 . In command 3 above, }{\b\f4 cat}{\f4 takes as an argument the filename file1 and writes the contents of that file to }{\i\f4 standard output}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 standard output}}}{\f4 . Where no filename argument is given, }{\b\f4 cat}{\f4 reads input from standard input}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard input}}}{\f4 and writes the output to standard output}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard output}}}{\f4
\par
\par In the case of command 4 above, }{\b\f4 cat}{\f4 contains no arguments and therefore reads from standard input}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard input}}}{\f4 . However, }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 interprets the "<}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 <}}}{\f4 " redirection}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 redirection}}}{\f4 operator and opens the file }{\f6\fs20 file1}{\f4 for use as standard input}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard input}}}{\f4 . Therefore, }{\b\f4 cat}{\f4 will take its input from }{\f6\fs20 file1}{\f4 , even though it thinks it is reading input from standard input}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard input}}}{\f4 . This input redirection}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 redirection}}}{\f4 is transparent to the utility, making it work with most shell utilities.
\par
\par Command 2 above created a new file called file1. If this file had existed prior to the command then it would have been erased. It is possible to append output to the end of the file by using the "}{\f6\fs20 >>}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 >>}}}{\f4 " redirection }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 redirection }}}{\f4 operator. Consider the following }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 session:
\par
\par \tab }{\f6\fs20 [5]% }{\b\f6\fs20 echo second line >>}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 >>}}}{\b\f6\fs20 file1}{\f6\fs20
\par \tab [6]% }{\b\f6\fs20 cat file1}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab this is a test
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab second line}{\f4
\par
\par Output that is sent to }{\i\f4 standard error}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 standard error}}}{\f4 , can also be redirected. The "}{\f6\fs20 >&}{\f4 " operator redirects standard error to a file and "}{\f6\fs20 >>&}{\f4 " appends standard error}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard error}}}{\f4 to the end of the file. Below is a summary of the redirection operators}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 redirection operators}}}{\f4 :
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tx2160\tx4320\tx6480\tqr\tx9360\adjustright {\f4 Standard Input}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2160\tx4320\tx6480\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Standard Input}}}{\f4 \tab Standard Output}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2160\tx4320\tx6480\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Standard Output}}}{\f4 \tab Standard Error}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2160\tx4320\tx6480\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\f4 Standard Error}}}{\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tx2520\tx4680\tx6480\tqr\tx9360\adjustright {\f4 \tab }{\f6\fs20 <}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2520\tx4680\tx6480\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 <}}}{\f4 \tab \tab \tab Redirect Input from file
\par \tab \tab }{\f6\fs20 >}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2520\tx4680\tx6480\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 >}}}{\f4 \tab }{\f6\fs20 >&}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2520\tx4680\tx6480\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 >&}}}{\f4 \tab Redirect Output to file
\par \tab \tab }{\f6\fs20 >>}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2520\tx4680\tx6480\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 >>}}}{\f4 \tab }{\f6\fs20 >>&}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2520\tx4680\tx6480\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 >>&}}}{\f4 \tab Redirect Output to EOF
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par Output can be redirected to a storage device}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 storage device}}}{\f4 , printer}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 printer}}}{\f4 , modem}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 modem}}}{\f4 , or any other valid GNO or GS/OS}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GS/OS}}}{\f4 device. This provides a very powerful means of communicating directly with these devices from within }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 . One quick and dirty example of redirection allows a background version of }{\b\f4 gsh}{\f4 to be run on a terminal}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 terminal}}}{\f4 connected directly through the modem serial port}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 serial port}}}{\f4 :
\par
\par }{\f6\fs20 [1]% }{\b\f6\fs20 gsh < ttya}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ttya}}}{\b\f6\fs20 > ttya >& ttya &}{\f4
\par
\par
\par }{\b\f4
\par }{\b\f4 Pipelines}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095779}Pipelines{\*\bkmkend _Toc364095779}\tcl1}}}{\f4
\par
\par In addition to the redirection operators, there is one additional operator which gives control over how input and output are handled. The operator is a }{\b\f4 pipeline}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 pipeline}}}{\f4 , "}{\f6\fs20 |}{\f4 ". Pipelines allow the standard output of one command to be used as the standard input to another command. This is almost equivalent to running the first command with its output redirected to a temporary file, then running the second command with its input redirected from the temporary file, then removing the temporary file. Pipelines make useful }{\i\f4 filter}{\f4 processes}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 filter processes}}}{\f4 where the output of one command can be sent to another command which filters the output to whatever parameters you give the second command. As an example, you could display all the filenames with the character "a" in their name:
\par
\par }{\f6\fs20 \tab [1]% }{\b\f6\fs20 echo foo > file1; echo abc >> file1; echo aabc >> file1}{\f6\fs20
\par \tab [2]% }{\b\f6\fs20 echo GNO >> file1; echo standard >> file1; echo oof >> file1}{\f6\fs20
\par \tab [3]% }{\b\f6\fs20 cat file1}{\f6\fs20
\par \tab foo
\par \tab abc
\par \tab aabc
\par \tab GNO
\par \tab standard
\par \tab oof
\par \tab [4]% }{\b\f6\fs20 cat file1 | grep}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 grep}}}{\b\f6\fs20 'a'}{\f6\fs20
\par \tab abc
\par \tab aabc
\par \tab standard
\par }{\f4
\par Pipelines are useful when you wish to view lines of text in a file that contain a phrase, or if you want to connect two programs directly, bypassing intermediate files. It is also possible to connect multiple commands with multiple pipelines.
\par
\par Pipelines are frequently used for paging }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 paging }}}{\f4 output. The }{\b\f4 coff}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 coff}}}{\f4 program mentioned above prints the output of an OMF}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OMF}}}{\f4 disassembly to the screen but does not pause when a key is pressed. In order to pause the display, the output must be piped through a paging utility. The ORCA shell}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ORCA shell}}}{\f4 requires that you wait for the entire command to complete execution before the pipeline is processed. However, GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 executes both commands concurrently which allows the }{\b\f4 coff}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 coff}}}{\f4 utility to execute while the paging utility displays the program output. GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 comes with two page utilities, }{\b\f4 more}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 more}}}{\f4 and }{\b\f4 less}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 less}}}{\f4 . Complete desciptions of }{\b\f4 coff}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 coff}}}{\f4 , }{\b\f4 more}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 more}}}{\f4 , }{\b\f4 less}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 less}}}{\f4 can be found in the electronic manual using the }{\b\f4 man}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 man}}}{\f4 command.
\par
\par
\par }{\v\f4 c.}{\b\f4 Background}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 Background}}}{\b\f4 Execution of Commands}{\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4 A major benefit of GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 is }{\i\f4 multitasking}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 multitasking}}}{\f4 . Multitasking is a means of running multiple applications at once (not literally but very close). On the Apple IIGS, GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 accomplishes pre-emptive multitasking}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 pre-emptive multitasking}}}{\f4 by switching among applications that are running in the background}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 background}}}{\f4 . Any GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 utility can be run in the background}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 background}}}{\f4 . Applications running in the background}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 background}}}{\f4 generally run for the same period of time (GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 switches between applications 20 times a second).
\par
\par To background }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 background }}}{\f4 a shell utility, place the "}{\f6\fs20 &}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 &}}}{\f4 " character at the end of the command-line}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 . The GNO shell displays a unique process ID}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 process ID}}}{\f4 and job number}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 job number}}}{\f4 for each backgrounded command.
\par
\par It is possible to use the background character "}{\f6\fs20 &}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f6\fs20 &}}}{\f4 " to separate commands as with the ";}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 \;}}}{\f4 " character. Each command with a following "}{\f6\fs20 &}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f6\fs20 &}}}{\f4 " is executed in the background.
\par
\par Up to 32 processes can executed concurrently under the GNO Kernel}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Kernel}}}{\f4 .
\par
\par Warning: When you exit the GNO Shell}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO Shell}}}{\f4 all processes will be terminated including any you may have running in the background.
\par
\par Below is a sample session with background tasks:
\par
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [5] script> }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 ps}}}{\f6\fs20
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 138 running co 1006 0000 0:00 ps
\par \tab [6] script> }{\b\f6\fs20 cmpl}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cmpl}}}{\b\f6\fs20 +p script.c keep=script > outputfile &}{\f6\fs20
\par \tab [1] + 141 Running cmpl +p script.c keep=script &
\par \tab [7] script> }{\b\f6\fs20 ps}{\f6\fs20
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 141 waiting co 1006 0000 0:00 cmpl +p script.c keep=script
\par \tab 142 ready co 100B 0000 0:00 5/cc
\par \tab 143 running co 100D 0000 0:00 ps
\par \tab [8] script> }{\b\f6\fs20 cmpl}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cmpl}}}{\b\f6\fs20 +p script.asm keep=script1 > output2 & ps ; ls -s}{\f6\fs20
\par \tab [2] - 145 Running cmpl +p script.asm keep=script1 &
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 141 waiting co 1006 0000 0:00 cmpl +p script.c keep=script
\par \tab 144 ready co 100E 0000 0:07 5/linker
\par \tab .145 ready co 100D 0000 0:00 cmpl +p script.asm keep=script1
\par \tab 146 running co 100F 0000 0:00 ps
\par \tab 147 ready co 1011 0000 0:00 5/asm65816
\par \tab 3 barf 1 outputfile 6 script.asm 1 script.root
\par \tab 1 foobar 19 script 3 script.c 36 script.sym
\par \tab 1 output2 6 script.a 6 script.mac 1 typescript
\par \tab [9] script> }{\b\f6\fs20 cp}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cp}}}{\b\f6\fs20 script.asm script2 &}{\f6\fs20
\par \tab [3] 150 Running cp script.asm script2 &
\par
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [2] - Done cmpl +p script.asm keep=script1 &
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20
\par \tab [1] + Done cmpl +p script.c keep=script &
\par
\par \tab [3] - Done cp script.asm script2 &
\par
\par \tab [10] script> }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 ps}}}{\f6\fs20
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 151 running co 1006 0000 0:00 ps
\par }{\f4
\par The first command line sends the }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ps}}}{\f4 command to the shell. }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ps}}}{\f4 lists the processes currently being executed by the GNO kernel}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 kernel}}}{\f4 . The processes named }{\b\f4 gsh}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 and }{\b\f4 NullProcess}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 NullProcess}}}{\f4 are always present. For a complete description of the }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\fs20\cgrid {\xe {\v\f4\fs20 }{\b\f6\fs20 ps}}}{\b\f4 }{\f4 command see Chapter 4 }{\b\f4 Kernel Commands}{\f4 .
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par When a command is executing in the background, keyboard input is not sent to it. However, output is still treated in the same way. If the command sends output to the standard output}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard output}}}{\f4 or standard error}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard error}}}{\f4 , the screen will become cluttered. Try this example:
\par
\par }{\f6\fs20
\par }{\f6\fs20 \tab [1]% }{\b\f6\fs20 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ls}}}{\b\f6\fs20 -l&}{\f6\fs20
\par \tab [2]% }{\b\f6\fs20 ls -l
\par }{\f4
\par Both the output of commands #1 and #2 will be sent to the screen. After command #1 is entered and you begin typing command #2, you will see the output of the first "}{\f6\fs20 ls -l}{\f4 " command being sent to the screen while you enter command #2. Utilities which produce output should have their standard output}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard output}}}{\f4 and standard error}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard error}}}{\f4 redirected to a file when they are executed in the background. See Chapter 3 }{\b\f4 Redirecting }{\b\f4
\par }{\b\f4 Input and Output}{\f4 .
\par }{\f4
\par }{\f4 Executing commands in the background hinders the performance}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 performance}}}{\f4 of the Apple IIGS. This is not too noticeable when one or two commands are being executed but performance will degrade more noticably as more commands are started. The Apple IIGS was not designed as a multitasking}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 multitasking}}}{\f4 computer so the performance of GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 should be understandable. If you have an accelerator}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 accelerator}}}{\f4 (such as the Transwarp GS or Zip GS) installed, performance of multiple tasks will be acceptable.
\par }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 }{\f4 {\*\bkmkstart _Toc364095780}.i.Job Control{\*\bkmkend _Toc364095780}\tcl1}}}{\b\f4
\par }{\f4 Now that command backgrounding and multitasking have been discussed, some more definitions can be mentioned. A process}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 process}}}{\f4 is a command which has been submitted to the shell for execution. }{\b\f4 Gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 Gsh}}}{\f4 contains a set of special commands which make dealing with processes much easier. }{\b\f4 gsh}{\f4 treats each command entered at the command-line as a }{\b\f4 job}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 job}}}{\f4 , where a single job may contain multiple processes. For example:
\par
\par }{\f6\fs20 \tab % }{\b\f6\fs20 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ls}}}{\f6\fs20 \tab \{one command, one process, one job\}
\par \tab % }{\b\f6\fs20 ls ; ps}{\f6\fs20 \tab \{two commands, two processes, two jobs\}
\par \tab % }{\b\f6\fs20 ls & ps}{\f6\fs20 \tab \{two commands, two processes, two jobs\}
\par \tab % }{\b\f6\fs20 ls | more}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 more}}}{\f6\fs20 \tab \{two processes, one job)
\par }{\f4
\par When a job is run from the shell, it can be in several modes of operation. Jobs can be in any of three states: }{\b\f4 running}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 running}}}{\f4 , }{\b\f4 stopped}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 stopped}}}{\f4 , or }{\b\f4 done}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 done}}}{\f4 . A job can be executing in either the foreground}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 foreground}}}{\f4 or the background}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 background}}}{\f4 .
\par
\par Commands exist to place a job in any mode of operation. When a job is run directly from a command-line}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 it is running and it is in the foreground}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 foreground}}}{\f4 . Since the command-line}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line}}}{\f4 cannot be accessed, two special keys have been defined: }{\b\f6\fs20 ^C}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ^C}}}{\f4 kill}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 kill}}}{\f4 s the job and }{\b\f6\fs20 ^Z}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ^Z}}}{\f4 will stop}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 stop}}}{\f4 the job. When the job is killed, it is gone forever, but a stopped job can be restarted. When a job is stopped, the kernel suspends each of the processes in the job.
\par
\par Jobs that are running in the background or have been stopped can be accessed using several built-in commands. The }{\b\f4 bg}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 bg}}}{\f4 command will place a job in the background}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 background}}}{\f4 , placing it in the running state if necessary. The }{\b\f4 fg}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 fg}}}{\f4 command will similarly place a job in the foreground}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 foreground}}}{\f4 , and the }{\b\f4 stop}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 stop}}}{\f4 command will stop a backgrounded job. The }{\b\f4 kill}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 kill}}}{\f4 command will terminate a job.
\par
\par Each time }{\b\f4 job control}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 job control}}}{\f4 is accessed, a special job status line is displayed following the command. The first item on the left in brackets is the job number. Next is a single character, either a '}{\f6\fs20 +}{\f4 ', '}{\f6\fs20 -}{\f4 ', or a blank. The '}{\f6\fs20 +}{\f4 ' designates the currently accessed job, the '}{\f6\fs20 -}{\f4 ' is the previously accessed job, and all other jobs are not specified. The }{\f6\fs20 jobs}{\f4 command will display a list of all jobs.
\par
\par This example was used in Chapter 3 }{\b\f4 Background Execution of Commands}{\f4 , but now more of the notation will be understandable
\par
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [5] script> }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 ps}}}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab ID STATE TT MMID UID TIME COMMAND
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 138 running co 1006 0000 0:00 ps
\par \tab [6] script> }{\b\f6\fs20 cmpl}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cmpl}}}{\b\f6\fs20 +p script.c keep=script > outputfile &}{\f6\fs20
\par \tab [1] + 141 Running cmpl +p script.c keep=script &
\par \tab [7] script> }{\b\f6\fs20 ps}{\f6\fs20
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 141 waiting co 1006 0000 0:00 cmpl +p script.c keep=script
\par \tab 142 ready co 100B 0000 0:00 5/cc
\par \tab 143 running co 100D 0000 0:00 ps
\par \tab [8] script> }{\b\f6\fs20 cmpl}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cmpl}}}{\b\f6\fs20 +p script.asm keep=script1 > output2 & ps ; ls -s}{\f6\fs20
\par \tab [2] - 145 Running cmpl +p script.asm keep=script1 &
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 141 waiting co 1006 0000 0:00 cmpl +p script.c keep=script
\par \tab 144 ready co 100E 0000 0:07 5/linker
\par \tab .145 ready co 100D 0000 0:00 cmpl +p script.asm keep=script1
\par \tab 146 running co 100F 0000 0:00 ps
\par \tab 147 ready co 1011 0000 0:00 5/asm65816
\par \tab 3 barf 1 outputfile 6 script.asm 1 script.root
\par \tab 1 foobar 19 script 3 script.c 36 script.sym
\par \tab 1 output2 6 script.a 6 script.mac 1 typescript
\par \tab [9] script> }{\b\f6\fs20 cp}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cp}}}{\b\f6\fs20 script.asm script2 &}{\f6\fs20
\par \tab [3] 150 Running cp script.asm script2 &
\par
\par \tab [2] - Done cmpl +p script.asm keep=script1 &
\par
\par \tab [1] + Done cmpl +p script.c keep=script &
\par
\par \tab [3] - Done cp script.asm script2 &
\par
\par \tab [10] script> }{\b\f6\fs20 ps}{\pard\plain \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 ps}}}{\f6\fs20
\par \tab ID STATE TT MMID UID TIME COMMAND
\par \tab 1 ready co 1002 0000 0:45 NullProcess
\par \tab 2 ready co 1007 0000 0:05 gsh
\par \tab 151 running co 1006 0000 0:00 ps
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par Each of the special commands, bg, fg, stop and kill, take an argument which specifies the job to perform the operation on. The argument is either a number specifying the process id, or a '}{\f6\fs20 %}{\f4 ' followed by one of the following: '}{\f6\fs20 +}{\f4 ' or '}{\f6\fs20 %}{\f4 ' for the current job, a '}{\f6\fs20 -}{\f4 ' for the previous job, or a number to specify any specific job. If nothing follows the '}{\f6\fs20 %}{\f4 ' or the argument is missing, then the current job is the default.
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [1] gno> }{\b\f6\fs20 cat gshrc}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab ###
\par \tab #
\par \tab # GNO 2.0 gshrc file
\par \tab #
\par \tab ###
\par \tab #
\par \tab # Initialize our environment
\par \tab #
\par \tab set path=":right:gno:bin :right:gno:usr:bin"
\par \tab set prompt="[%h] %S%t%s %C> "
\par \tab set home=":right:gno:user:root"
\par \tab set term=gnocon
\par \tab export path prompt home term
\par \tab setenv history=100 savehist=25
\par \tab ###
\par \tab #
\par \tab #Set up standard prefixes for utilities.
\par \tab #
\par \tab ###
\par \tab prefix 2 :software:orca:libraries
\par \tab prefix 3 :software:orca
\par \tab prefix 4 :software:orca:shell
\par \tab prefix 5 :software:or}{\b\f6\fs20 ^Z
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [1] + Stopped (signal) cat gshrc
\par \tab [2] gno> }{\b\f6\fs20 jobs}{\f6\fs20
\par \tab [1] + Running cat gshrc
\par \tab [3] gno> }{\b\f6\fs20 bg\tab }{\f6\fs20 \{output was not redirected, so screen gets cluttered\}
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [1] + Running cat gshrc
\par \tab ca:languages
\par \tab prefix 6 :software:orca:utilities
\par \tab prefix 7 :tmp
\par \tab ###
\par \tab #
\par \tab # Set up prefixes for Orca2.0(tm)'s benefit
\par \tab #
\par \tab ###
\par \tab prefix 13 :software:orca:libraries
\par \tab prefix 14 :software:orca
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab prefix 15 :software:or
\par \tab [4] gno> }{\b\f6\fs20 stop\tab }{\f6\fs20 \{Incredibly fast typing :-) \}
\par \tab [1] + Stopped (signal) cat gshrc
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [5] gno> }{\b\f6\fs20 jobs}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [1] + Running cat gshrc
\par \tab [6] gno> }{\b\f6\fs20 fg}{\f6\fs20
\par \tab [1] + Running cat gshrc
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab ca:shell
\par \tab prefix 16 :software:orca:languages
\par \tab prefix 17 :software:orca:utilities
\par \tab alias ls 'ls -CF'
\par \tab alias dir 'ls -al'
\par \tab alias cp 'cp -i'
\par \tab alias rm 'cp -p rm'
\par \tab alias mv 'cp -p mv'
\par \tab setenv usr}{\b\f6\fs20 ^Z
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [1] + Stopped (signal) cat gshrc
\par \tab [7] gno> }{\b\f6\fs20 jobs}{\f6\fs20
\par \tab [1] + Running cat gshrc
\par }\pard \nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [8] gno> }{\b\f6\fs20 kill %1
\par \tab }{\f6\fs20 [9] gno> }{\b\f6\fs20 jobs}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [10] gno>}{\f4
\par
\par There is one additional way that a job may be stopped. If the job is placed in the background and it attempts to read from the console, the job will be stopped, and the status line says "}{\f6\fs20 (tty input)}{\f4 " as the reason for the job being stopped. The job should be foregrounded so that the user may enter input to the program. It can then be placed back in the background as necessary (with }{\f6\fs20 ^Z}{\f4 and }{\f6\fs20 bg}{\f4 ).
\par
\par
\par }{\b\f4 Working with Pathnames}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095781}Working with Pathnames{\*\bkmkend _Toc364095781}\tcl1}}}{\f4
\par
\par To move easily to directories descended from the home directory, }{\b\f4 gsh}{\f4 provides the "}{\b\f6\fs20 ~}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ~}}}{\f4 " (tilde}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 tilde}}}{\f4 ) character. This character represents the home directory}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 home directory}}}{\f4 . Therefore, if your home directory}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 home directory}}}{\f4 was "}{\f6\fs20 :hard:gno:user:root}{\f4 ", you could use the command "}{\b\f6\fs20 cd ~}{\f4 " to move to the home directory (note that }{\f6\fs20 cd}{\f4 without any arguments also defaults to the home directory). To move to subdirectories of the home directory, you could use the command "}{\b\f6\fs20 cd ~/dir1}{\f4 " command. The tilde}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 tilde}}}{\f4 character is recognized by }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 before the command is interpreted.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par Another special sequence "}{\b\f6\fs20 ..}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 ..}}}{\f4 ", when used as part of a pathname, will strip the last path between pathname seperators. For example, the pathname "/dev/gno/.." would be expanded to "}{\f6\fs20 /dev}{\f4 ". The "}{\f6\fs20 /gno}{\f4 " path is stripped as it is before the periods. This provides an excellent way to backup into your directories. "Backing up" is limited by the volume directory of the device being used.
\par
\par Additionally, the character "}{\b\f6\fs20 .}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 .}}}{\f4 ", can be used to signify the current directory.
\par
\par Examples:
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\tqr\tx10080\adjustright {\f6\fs20 \tab [/dev/gno]% }{\b\f6\fs20 cd ~\tab }{\f4\fs20 \{ change to home directory \}}{\f6\fs20
\par \tab [/dev/gno]% }{\b\f6\fs20 cd ~/src}{\f6\fs20
\par \tab [/dev/gno/src]% }{\b\f6\fs20 cp ~/file1 file2\tab }{\f4\fs20 \{ copy /dev/gno/file1 to /dev/gno/src/file2 \}
\par }{\f6\fs20 \tab [/dev/gno/src]% }{\b\f6\fs20 echo ~/..}{\f6\fs20
\par \tab /dev/gno/..
\par \tab [/dev/gno/src]% }{\b\f6\fs20 cd ~/..}{\f6\fs20
\par \tab [/dev]% }{\b\f6\fs20 mkdir}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\tqr\tx10080\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 mkdir}}}{\b\f6\fs20 ~/utilities\tab }{\f4\fs20 \{ create directory /dev/gno/utilities \}
\par \tab }{\f6\fs20 [/dev]% }{\b\f6\fs20 mkdir ./libraries}{\f4\fs20 \tab \{ create directory /dev/libraries \}}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\tqr\tx10080\adjustright {\f6\fs20 \tab [/dev]% }{\b\f6\fs20 cd ~}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [/dev/gno]% }{\b\f6\fs20 cp src/file1}{\f6\fs20 }{\b\f6\fs20 .}{\f6\fs20 \tab }{\f4\fs20 \{ copy /dev/gno/src/file1 to /dev/gno/file1 \}}{\f4
\par
\par }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 }{\f4 {\*\bkmkstart _Toc364095782}.i.Pathname Expansion{\*\bkmkend _Toc364095782}\tcl1}}}{\f4
\par
\par Many utilities supplied with }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 take, as an argument}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 argument}}}{\f4 , a filename or filenames. The shell utilities }{\b\f4 cat}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 cat}}}{\f4 , }{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 , }{\b\f4 grep}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 grep}}}{\f4 , and }{\b\f4 cp}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 cp}}}{\f4 can take multiple filenames as arguments. If you wish to invoke any of these utilities on filenames that have a sequence of characters in common (ie. }{\f6\fs20 AND}{\f4 , }{\f6\fs20 APPLE}{\f4 , }{\f6\fs20 SHK}{\f4 , }{\f6\fs20 TXT}{\f4 , }{\f6\fs20 FILE2}{\f4 , }{\f6\fs20 FILE3}{\f4 , etc.), }{\b\f4 gsh}{\f4 provides special characters, called regular expressions}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 regular expressions}}}{\f4 or wildcards}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 wildcards}}}{\f4 , which match multiple filenames without having to enter all filename arguments manually.
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tx2160\tqr\tx9360\adjustright {\f4 \tab }{\b\f6\fs20 *}{\f4 \tab Matches any string of characters.
\par \tab }{\b\f6\fs20 ?}{\f4 \tab Matches a single character.
\par \tab }{\b\f6\fs20 [}{\f6\fs20 abc}{\b\f6\fs20 ]}{\f4 \tab Matches any of the characters enclosed in brackets.
\par \tab }{\b\f6\fs20 [^}{\f6\fs20 abc}{\b\f6\fs20 ]}{\f4 \tab Matches any of the characters not enclosed in brackets.
\par \tab }{\b\f6\fs20 [}{\f6\fs20 a}{\b\f6\fs20 -}{\f6\fs20 c}{\b\f6\fs20 ]}{\f4 \tab Matches the ascending sequence of characters enclosed in brackets.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par This method of matching filenames is known as }{\b\f4 globbing}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 globbing}}}{\f4 . }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 performs globbing on the word prior to executing the command. The following }{\b\f4 gsh}{\f4 session illustrates file globbing:
\par
\par }{\f6\fs20 \tab [1]% }{\b\f6\fs20 cd /dev/gno/utilities}{\f6\fs20
\par \tab [2]% }{\b\f6\fs20 ls}{\f6\fs20
\par \tab :dev:gno:utilities
\par \tab CONV Crunch CrunchIIGS DeRez DiskCheck
\par \tab DumpObj Duplicate EMACS Equal Express
\par \tab Files LinkIIGS MakeBin MakeDirect OrcaDumpIIGS
\par \tab Prizm ResEqual Search canon choose
\par \tab clrff cmdfix coff compact count
\par \tab detab dir dirff dumpfile eject
\par \tab emacs.doc emacs.hlp emacs.rc emacs.tut help
\par \tab init join link macgen makelib
\par \tab mem online pageeject pause pwd
\par \tab src
\par \tab [3]% }{\b\f6\fs20 ls e*}{\f6\fs20
\par \tab :dev:gno:utilities
\par \tab EMACS Equal Express eject emacs.doc
\par \tab emacs.hlp emacs.rc emacs.tut
\par \tab [4]% }{\b\f6\fs20 echo *r *m}{\f6\fs20
\par \tab dir Prizm mem
\par \tab [5]% }{\b\f6\fs20 echo *i*}{\f6\fs20
\par \tab cmdfix CrunchIIGS Prizm DiskCheck Duplicate Files init join LinkIIGS makelib
\par \tab MakeBin MakeDirect link dirff dumpfile online OrcaDumpIIGS dir
\par \tab [6]% }{\b\f6\fs20 echo NoMatch*}{\f6\fs20
\par \tab No match.
\par \tab [7]% }{\b\f6\fs20 echo [a-f]*}{\f6\fs20
\par \tab coff canon cmdfix compact Crunch CrunchIIGS DeRez DiskCheck DumpObj Duplicate
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab EMACS emacs.doc emacs.hlp emacs.rc emacs.tut Equal Express Files choose clrff
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab count detab CONV dirff dumpfile eject dir
\par \tab [8]% }{\b\f6\fs20 echo [a-fs-t]*}{\f6\fs20
\par \tab coff canon cmdfix compact Crunch CrunchIIGS DeRez DiskCheck DumpObj Duplicate
\par \tab EMACS emacs.doc emacs.hlp emacs.rc emacs.tut Equal Express Files choose clrff
\par \tab count detab Search src CONV dirff dumpfile eject dir
\par \tab [9]% }{\b\f6\fs20 echo emacs?*}{\f6\fs20
\par \tab EMACS emacs.doc emacs.hlp emacs.rc emacs.tut
\par \tab [10]% }{\b\f6\fs20 echo [^a-f]*}{\f6\fs20
\par \tab Prizm help init join LinkIIGS makelib MakeBin MakeDirect link mem ResEqual
\par \tab Search src online pageeject pause OrcaDumpIIGS pwd macgen
\par \tab [11]% }{\b\f6\fs20 echo [^a-fs-t]*}{\f6\fs20
\par \tab Prizm help init join LinkIIGS makelib MakeBin MakeDirect link mem ResEqual
\par \tab online pageeject pause OrcaDumpIIGS pwd macgen
\par \tab [12]% }{\b\f6\fs20 echo ???}{\f6\fs20
\par \tab mem src pwd dir
\par \tab [13]% }{\b\f6\fs20 echo ?}{\f6\fs20
\par \tab No match.
\par \tab [14]% }{\b\f6\fs20 echo "???"}{\f6\fs20
\par \tab ???
\par \tab [15]% }{\b\f6\fs20 do you have a light?}{\f6\fs20
\par \tab No match.
\par }{\f4
\par As can be seen by the above example, character matches are case insensitive. The ProDOS}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ProDOS}}}{\f4 file system treats the filenames "}{\f6\fs20 file}{\f4 " and "}{\f6\fs20 FILE}{\f4 " as the same file. }{\b\f4 gsh}{\f4 recognizes this and does not detract from the underlying file system.
\par
\par File globbing makes passing arguments to commands much easier and much more powerful. You could easily use "}{\f6\fs20 *.c}{\f4 " as an argument in a number of ways:
\par
\par }{\f6\fs20 \tab [1]% }{\b\f6\fs20 ls *.C
\par \tab ...\tab }{\f4\fs20 \{ lists all filenames ending in ".C" \}}{\f6\fs20
\par \tab [2]% }{\b\f6\fs20 cc *.C
\par \tab ...\tab }{\f4\fs20 \{ compiles all files ending in ".C" \}}{\f6\fs20
\par \tab [3]% }{\b\f6\fs20 more *.C
\par \tab ...\tab }{\f4\fs20 \{ displays contents of all files ending in ".C" \}}{\f6\fs20
\par }{\f4
\par
\par }{\b\f4 Quoting Special Characters}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095783}Quoting Special Characters{\*\bkmkend _Toc364095783}\tcl1}}}{\f4
\par
\par Beginning with Apple II}{\f4\fs20 GS}{\f4 System Software 6.0, GS/OS is able to read files from Macintosh computers. The Macintosh uses a filesystem known as HFS}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 HFS}}}{\f4 , which allows filenames to contain any character except the colon ("}{\f6\fs20 :}{\f4 "). Because a filename such as "emacs?*" is valid under HFS, care must be taken or unexpected results will occur. The word "emacs?*" was used as a regular expression above to specify a list of filenames beginning with the word "emacs" and one or more trailing characters. }{\b\f4 gsh}{\f4 does provide a way to pass an argument which contains special shell characters to a command. This is known as quoting an argument. There are three different ways to quote an expression:
\par
\par The single quote will quote everything between the single quote marks. Thus, to display the contents of a file on an HFS volume named "emacs?*":
\par
\par }{\f6\fs20 \tab % }{\b\f6\fs20 more}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 more}}}{\b\f6\fs20 'emacs?*'
\par }{\f4
\par The double quote will quote everything between the double quote marks except variables. See Chapter 5 for more on variables.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab % }{\b\f6\fs20 echo "emacs?* $home"}{\f6\fs20
\par \tab emacs?* /dev/gno
\par }{\f4
\par The backslash is used to quote one character. To pass "}{\f6\fs20 emacs?*}{\f4 " as a regular expression using the backslash, enter the following:
\par
\par }{\f6\fs20 \tab % }{\b\f6\fs20 ls emacs\\?\\*}{\f6\fs20
\par }{\f4
\par One additional purpose of the quoting mechanism built into }{\b\f4 gsh}{\f4 is to add spaces to command arguments. Each command and its arguments is separated by a space. Multiple spaces between arguments are treated as one space. Thus, consider the following:
\par
\par }{\f6\fs20 \tab % }{\b\f6\fs20 echo}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 echo}}}{\b\f6\fs20 a b c}{\f6\fs20
\par \tab a b c
\par \tab % }{\b\f6\fs20 echo 'a b c'}{\f6\fs20
\par \tab a b c
\par }{\f4
\par
\par }{\b\f4 How gsh Finds a Command}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095784}How gsh Finds a Command{\*\bkmkend _Toc364095784}\tcl1}}}{\b\f4
\par }{\f4
\par }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 has a special variable, }{\f6\fs20 PATH}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 PATH}}}{\f4 , which specifies the directories and order of directories to search for shell utilities. This variable is often setup in the }{\i\f4 gshrc}{\f4 file although it can be changed as often as needed. The purpose of the }{\f6\fs20 PATH}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 PATH}}}{\f4 variable was discussed in Chapter 1 }{\b\f4 Customizing the Shell Environment}{\f4 .
\par
\par When }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 starts up, it searches all directories specified in the }{\f6\fs20 PATH}{\f4 variable and establishes a table of all commands, called a hash table. Because of this table, }{\b\f4 gsh}{\f4 "knows" where a command is and can execute the command much faster than searching through all directories every time the command is entered.
\par
\par The search process begins with alias names. See Chapter 3 }{\b\f4 Using aliases as shorthand}{\f4 . If an alias is found that matches the command, the alias is replaced with its value and the command-line is again parsed. If it was not an alias, }{\b\f4 gsh}{\f4 checks to see if it was a special built-in utility. The search process then searches for the name in the hash table. If an entry is found in the hash table, the path name of the command is retrieved and the command is executed. If an entry is not found, the current path is searched. If the command name is not found, an error results.
\par
\par When the }{\f6\fs20 PATH}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 PATH }}}{\f4 variable is changed, }{\b\f4 gsh}{\f4 does not automatically recreate the command hash table. You need to issue the command }{\b\f6\fs20 rehash}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 rehash}}}{\f4 to recreate the hash table. The more pathnames specified, the greater the delay in starting }{\b\f4 gsh}{\f4 and in invoking the }{\f6\fs20 rehash}{\f4 command. The following shell script }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 script }}}{\f4 changes }{\f6\fs20 PATH}{\f4 and invokes the rehash command in one step.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f4
\par }{\f6\fs20 \tab echo Resetting PATH variable $PATH to $1
\par \tab set path=$1
\par \tab rehash
\par }{\f4
\par The }{\f6\fs20 $1}{\f4 variable will be expanded with the first argument passed to the script.
\par
\par }{\f6\fs20 rehash}{\f4 should also be used if a new utility is copied to one of the directories specified in the PATH variable. Of}{\f4 }{\f4 course, it is possible to specify the absolute pathname of any command, but this is undesirable if the command is frequently used.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 \page \sect }\sectd \psz1\linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Built-in Commands\tab Chapter 4
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Chapter 4\tab Built-in Commands
\par }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Chapter 4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4\fs48 Built-in Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\v\f4\fs48 }{\f4\fs48 {\*\bkmkstart _Toc364095785}Built-in Commands{\*\bkmkend _Toc364095785}\tcl1}}}{\f4\fs48
\par }{\f4
\par
\par
\par }{\b\f4 Built-ins vs EXE Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095786}Built-ins vs EXE Commands{\*\bkmkend _Toc364095786}\tcl1}}}{\f4
\par
\par The term "built-ins}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 built-ins}}}{\f4 " is used to describe commands that exist within the shell itself. These utilities run faster than external commands because the code is already loaded into memory. Files of type "EXE}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 ", on the other hand, must be loaded into memory by }{\b\f4 gsh}{\f4 and executed. If an EXE command is executed again, it might, again, have to be loaded into memory. This results in longer execution time for the program.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 gsh}{\f4 has a number of built-in commands which allow you to work with the shell, the GNO kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO kernel}}}{\f4 , and the shell environment.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par The following section describes the commands that are built-in to }{\b\f4 gsh}{\f4 . The "[..]" character sequence represents an optional argument to a command. The term "}{\f6\fs20 SIGNAL}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 SIGNAL}}}{\f4 " is used to represent one of the signal names or numbers listed in Appendix D }{\b\f4 Signals}{\f4 . The sequence "..." means the command accepts multiple arguments of the same type as the argument before the "..." sequence. The sequence "\{..\}" is used to represent a set, which is a list of possible arguments to choose from.
\par
\par
\par }{\b\f4 Shell Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095787}Shell Commands{\*\bkmkend _Toc364095787}\tcl1}}}{\f4
\par
\par Shell built-ins provide support for external shell commands (i.e. EXE}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 files and shell scripts) and provide some commands used in every-day work.
\par
\par }{\b\f6\fs20 bindkey }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 bindkey }}}{\b\f6\fs20 [-l] function string
\par }{\f4 Bindkey is used to customize the shell's command-line editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line editor}}}{\f4 . Any key on the keyboard can be mapped to any of a number of functions. The various functions are as follows:
\par }\pard \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright {\f6\fs20 backward-char}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 backward-char}}}{\f4 \tab move cursor left
\par }{\f6\fs20 backward-delete-char}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 backward-delete-char}}}{\f4 \tab delete character to left
\par }{\f6\fs20 backward-word}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 backward-word}}}{\f4 \tab move cursor left one word
\par }{\f6\fs20 beginning-of-line}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 beginning-of-line}}}{\f4 \tab move cursor to beginning of line
\par }{\f6\fs20 clear-screen}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 clear-screen}}}{\f4 \tab clear screen and redraw prompt
\par }{\f6\fs20 complete-word}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 complete-word}}}{\f4 \tab perform filename completion
\par }{\f6\fs20 delete-char}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 delete-char}}}{\f4 \tab delete character under cursor
\par }{\f6\fs20 down-history}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 down-history}}}{\f4 \tab replace command line with next history
\par }{\f6\fs20 end-of-line}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 end-of-line}}}{\f4 \tab move cursor to end of line
\par }{\f6\fs20 forward-char}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 forward-char}}}{\f4 \tab move cursor to the right
\par }{\f6\fs20 forward-word}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 forward-word}}}{\f4 \tab move cursor one word to the right
\par }{\f6\fs20 kill-end-of-line}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 kill-end-of-line}}}{\f4 \tab delete line from cursor to end of line
\par }{\f6\fs20 kill-whole-line}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 kill-whole-line}}}{\f4 \tab delete the entire command line
\par }{\f6\fs20 list-choices}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 list-choices}}}{\f4 \tab list file completion matches
\par }{\f6\fs20 newline}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 newline}}}{\f4 \tab finished editing, accept command line
\par }{\f6\fs20 raw-char}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 raw-char}}}{\f4 \tab character as-is
\par }{\f6\fs20 redisplay}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 redisplay}}}{\f4 \tab redisplay the command line
\par }{\f6\fs20 toggle-cursor}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 toggle-cursor}}}{\f4 \tab toggle between insert and overwrite cursor
\par }{\f6\fs20 undefined-char}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 undefined-char}}}{\f4 \tab this key does nothing
\par }{\f6\fs20 up-history}{\pard\plain \qj\li720\nowidctlpar\widctlpar\tx3240\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 up-history}}}{\f4 \tab replace command line with previous history
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par Keys are bound to functions, not vice-versa. This means that you can have any number of commands refer to the same function. For example, the default bindings have }{\f6\fs20 CTRL-A}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 CTRL-A}}}{\f4 and }{\f6\fs20 OA-<}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 OA-<}}}{\f4 both bound to }{\f6\fs20 beginning-of-line}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 beginning-of-line}}}{\f4 .
\par
\par Most of the function names are self-explanatory, and are explained in Chapter 2, but a few deserve discussion. }{\f6\fs20 raw-char}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 raw-char}}}{\f4 is what you should bind a key that should be inserted into the command-line as-is. The regular printable ASCII set, such as the letters a-z, numbers, etc. are bound to }{\f6\fs20 raw-char}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 raw-char}}}{\f4 . Control characters should not be bound to }{\f6\fs20 raw-char}{\f4 because the command-line editor}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 command-line editor}}}{\f4 will become confused (most control characters act as special GNO/ME console feature codes - see the }{\i\f4 GNO Kernel Reference Manual}{\f4 , Chapter 4 }{\b\f4 TextTools Replacement}{\f4 ).
\par
\par Any keystroke that should be rejected by the editor should be bound to }{\f6\fs20 undefined-char}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 undefined-char}}}{\f4 . By default, this includes control characters and OA-sequences that are not assigned to any editing features. Any key bound to }{\f6\fs20 undefined-char}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 undefined-char}}}{\f4 will cause }{\b\f4 gsh}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh }}}{\f4 to beep and ignore the key.
\par
\par You can actually bind key sequences, not just keystrokes, to functions. There is no limit other than memory to how many characters are in a command sequence.
\par
\par Because terminals do not have the OA}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA}}}{\f4 (Open Apple) key, }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 .i.OA}}}{\v\f4 ;}{\f4 is actually mapped by the kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 kernel}}}{\f4 to a two-character sequence consisting of }{\f6\fs20 ESC}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 ESC}}}{\f4 and the key. For example, OA-Y}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA-Y}}}{\f4 would actually produce }{\f6\fs20 ESC-Y}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 ESC-Y}}}{\f4 .
\par
\par Control characters in the }{\b\f6\fs20 string}{\f4 are represented in ^X format; e.g. CTRL-A is represented by ^A. ESC (and OA) is represented by ^[.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 Examples:
\par }\pard \qj\nowidctlpar\widctlpar\tx4320\adjustright {\f6\fs20 % }{\b\f6\fs20 bindkey kill-end-of-line ^K}{\f4 \tab map CTRL-K}{\pard\plain \qj\nowidctlpar\widctlpar\tx4320\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 CTRL-K}}}{\f4 to kill-end-of-line (like Emacs)
\par }{\f6\fs20 % }{\b\f6\fs20 bindkey clear-screen ^[^X}{\f4 \tab map OA-CLEAR}{\pard\plain \qj\nowidctlpar\widctlpar\tx4320\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 OA-CLEAR}}}{\f4 to clear-screen
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }{\b\f6\fs20 commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 commands}}}{\f4
\par Displays a list of all built-in shell commands.
\par
\par }{\b\f6\fs20 cd }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 cd }}}{\b\f6\fs20 [pathname]
\par chdir }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 chdir }}}{\b\f6\fs20 [pathname]
\par }{\f4 Changes the current working directory to pathname. If }{\f6\fs20 pathname}{\f4 is not given, the default }{\f6\fs20 HOME}{\f4 directory (i.e. the value of the }{\f6\fs20 HOME}{\f4 environment variable) is used. This makes it easy to move back to your home directory. Under }{\b\f4 gsh}{\f4 , unlike most U}{\f4\fs20 NIX}{\f4 shells, the cd is not necessary, except to change automatically to your HOME directory. If a command is not a built-in or EXE file, but is instead the name of a directory, a cd is implied and performed on the directory unless the }{\f6\fs20 NODIREXEC}{\f4 variable has been set.
\par
\par }{\f6\fs20 \tab [1] gno> }{\b\f6\fs20 cd utilities}{\f6\fs20
\par \tab [2] gno/utilities> }{\b\f6\fs20 echo $HOME}{\f6\fs20
\par \tab /dev/gno
\par \tab [3] gno/utilities> }{\b\f6\fs20 cd}{\f6\fs20
\par \tab [4] gno> }{\b\f6\fs20 utilities}{\f6\fs20
\par \tab [5] gno/utilities> }{\b\f6\fs20 ../utilities}{\f6\fs20
\par \tab [6] gno/utilities> }{\b\f6\fs20 ~}{\f6\fs20
\par \tab [7] gno> _
\par }{\f4
\par }{\b\f6\fs20 clear}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 clear}}}{\b\f6\fs20
\par }{\f4 This command takes no arguments. When invoked, the screen will be cleared.
\par
\par }{\b\f6\fs20 df}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 df}}}{\b\f6\fs20
\par }{\f4 This command takes no arguments. When invoked, a listing of free blocks for every block device is given. In addition, the device name, type, file system, and capacity is listed.
\par
\par }{\f6\fs20 \tab [1] gno> }{\b\f6\fs20 df}{\f6\fs20
\par
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab .d## Volume Device Free Total Capacity System
\par \tab ---- ---------------- ---------------- ------- ------- -------- -----------
\par \tab .d1 :Procyon .CVTECH.S6.A 3166 41037 92% ProDOS
\par \tab .d2 Apple 3.5 Drive .APPLEDISK3.5A
\par \tab .d3 Apple 3.5 Drive .APPLEDISK3.5B
\par \tab .d4 Console Driver .CONSOLE
\par \tab .d5 :Day .CVTECH.S6.B 15881 65535 75% ProDOS
\par \tab .d6 :Night .CVTECH.S6.C 39274 65535 40% HFS
\par \tab .d7 :Left .CVTECH.S6.D 5365 51776 89% ProDOS
\par \tab .d8 :Right .CVTECH.S6.E 27477 65535 58% ProDOS
\par \tab .d9 :Software .CVTECH.S6.F 3289 40960 91% ProDOS
\par \tab .d10 :RAM5 .RAMDISK 505 512 1% ProDOS
\par \tab .d11 :Conner 40 .AFP1 7368 80604 90% AppleShare
\par \tab .d12 AppleTalk fsd .AFP2
\par \tab ....
\par \tab .d24 AppleTalk fsd .AFP14
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab .d25 AppleTalk RPM .RPM
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab .d26 AppleTalk Main .APPLETALK
\par \tab .d27 Serial Modem .SERIAL2
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab .d28 :system .APPLESCSI.HD01. 27561 50773 45% ProDOS
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab .d29 :dev .APPLESCSI.HD01. 43431 65108 33% ProDOS
\par \tab .d30 :usr .APPLESCSI.HD01. 44376 48725 8% ProDOS
\par }{\f4
\par }{\f6\fs20 Volume}{\f4 - Name of device.
\par }{\f6\fs20 Device}{\f4 - GS/OS device name.
\par }{\f6\fs20 Free}{\f4 - Total number of free blocks on device.
\par }{\f6\fs20 Total}{\f4 - Total number of blocks on device.
\par }{\f6\fs20 Capacity}{\f4 - Percentage of used blocks on device.
\par }{\f6\fs20 System}{\f4 - Format of file system. With System Software 6.0.1, the file systems available are ProDOS, HFS, Pascal, MS-DOS, and DOS 3.3, and some CD-ROM formats.
\par
\par }{\b\f6\fs20 echo }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 echo }}}{\b\f6\fs20 [-n] arg [arg ...]
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 Expands the "}{\f6\fs20 arg}{\f4 " expression(s) and outputs them to the screen. If the "}{\f6\fs20 -n}{\f4 " switch is specified, a }{\f6\fs20 NEWLINE}{\f4 character is not output after the last "}{\f6\fs20 arg}{\f4 " expression. Special escape sequences may also be included in the arguments, similar to those used in C strings:
\par \tab }{\f6\fs20 \\b}{\f4 - Backspace
\par \tab }{\f6\fs20 \\f}{\f4 - Clears screen (form feed)
\par \tab }{\f6\fs20 \\n}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 \\\\n }}}{\f4 - Newline
\par \tab }{\f6\fs20 \\r}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 \\\\r}}}{\f4 - Return
\par \tab }{\f6\fs20 \\t}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 \\\\t}}}{\f4 - Tab
\par \tab }{\f6\fs20 \\nnn}{\f4 - A decimal ASCII code. nnn represents the ASCII code.
\par
\par }{\f6\fs20 \tab [1] gno> }{\b\f6\fs20 echo Hello World}{\f6\fs20
\par \tab Hello World
\par \tab [2] gno> }{\b\f6\fs20 echo -n Hello World}{\f6\fs20
\par \tab Hello World[3] gno> }{\b\f6\fs20 echo $PATH $HOME 'come get to $gnome'}{\f6\fs20
\par \tab /dev/gno/utilities /dev/orca/utilities /dev/gno come get to $gnome
\par }{\f4
\par }{\b\f6\fs20 exit}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 exit}}}{\b\f6\fs20
\par }{\f4 Exits the shell or terminates a shell script.
\par
\par }{\b\f6\fs20 history}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 history}}}{\b\f6\fs20
\par }{\f4 This command displays the list of previous command-line entries. The number of entries saved is set in the }{\f6\fs20 $HISTORY}{\f4 variable.
\par
\par }{\b\f4 pushd}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\xe {\b\f4 pushd}}}{\f4
\par }{\b\f4 popd}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 popd}}}{\b\f4 [+n]}{\f4
\par }{\b\f4 dirs}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\xe {\b\f4 dirs}}}{\f4
\par
\par These three commands maintain the shell's }{\i\f4 directory stack.}{\f4 Let's say you're working in a directory /src/myprogs/class/program.1/, and you want to temporarily go to another directory. Instead of having to 'cd' there and 'cd' back to a very long directory name (i.e., lots of typing), you can use the pushd command, like so:
\par
\par }\pard \qj\nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 gsh> }{\b\f6\fs20 pushd /etc}{\f6\fs20 \tab }{\f4\fs20 \{ start in /src/myprogs/class/program.1/ \}}{\f6\fs20
\par ...
\par gsh> }{\b\f6\fs20 popd}{\f6\fs20 \tab }{\f4\fs20 \{ back in /src/myprogs/class/program.1/ \}}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 The }{\f6\fs20 pushd}{\f4 command stores the current directory on a stack, and then changes the current directory to the argument. When you want to go back to the original directory, type popd. The shell will pull the last directory off the stack and 'cd' to that directory.
\par
\par The }{\f6\fs20 popd }{\f4 command when given an argument of +n will remove the n'th directory from the stack. It does not change to that directory.
\par
\par The }{\f6\fs20 dirs }{\f4 command displays the current directory stack.
\par
\par }{\b\f6\fs20 pwd}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 pwd}}}{\b\f6\fs20
\par }{\f4 Displays the current working directory. This is useful if you have not configured the }{\f6\fs20 $PROMPT}{\f4 string to output your current working directory.
\par
\par }{\f6\fs20 \tab [1]> }{\b\f6\fs20 cd $HOME}{\f6\fs20
\par \tab [2]> }{\b\f6\fs20 pwd}{\f6\fs20
\par \tab /user/root
\par \tab [3]> }{\b\f6\fs20 cd utilities}{\f6\fs20
\par \tab [4]> }{\b\f6\fs20 pwd}{\f6\fs20
\par \tab /user/root/utilities
\par }{\f4
\par }{\b\f6\fs20 source}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 source}}}{\f4
\par When a script }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 script }}}{\f4 is executed, }{\b\f4 gsh}{\f4 creates a new process to run the script. As a result, scripts cannot change the shell's prefixes and certain other parameters. Instead of executing the script directly, you may use the }{\f6\fs20 source}{\f4 command which does not create a new process to execute the script. Thus, the }{\f6\fs20 source}{\f4 command is effectively exactly like typing all the commands in the script from the keyboard.
\par }{\f4
\par
\par }{\b\f6\fs20 tset}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 tset}}}{\f4
\par The }{\f6\fs20 tset}{\f4 command causes the shell to reread the }{\f6\fs20 /etc/termcap}{\f4 file and reset its output system to use the terminal type specified in the $TERM variable. On startup, after reading the }{\f6\fs20 gshrc}{\f4 file, }{\b\f4 gsh}{\f4 automatically does a }{\f6\fs20 tset}{\f4 . }{\b\f4 gsh}{\f4 also automatically does a tset whenever the }{\f6\fs20 $TERM}{\f4 variable is changed with the }{\f6\fs20 set}{\f4 command. You would use tset manually if, for example, a utility changed the value of }{\f6\fs20 $TERM}{\f4 .
\par
\par }{\b\f6\fs20 which }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 which }}}{\b\f6\fs20 command_name [command_name ...]
\par }{\f4 Let's say that you are working on a new version of the venerable shell utility }{\f6\fs20 ls}{\f4 . Since a search of the hash table is done before searching the current directory, you might accidentally be using the wrong version of the command. You make changes and run the new program, but your changes don't seem to appear! Use the }{\f6\fs20 which}{\f4 command to check your sanity. Which also comes in handy in locating duplicate program names in the }{\f6\fs20 $PATH}{\f4 directories (for example, an }{\f6\fs20 ls}{\f4 in both }{\f6\fs20 /bin}{\f4 and }{\f6\fs20 /usr/bin}{\f4 .)
\par
\par The way to access a utility in the current directory which has the same name as a program in the }{\f6\fs20 $PATH}{\f4 is to prefix the command name with '}{\f6\fs20 .}{\f4 ', as in "}{\f6\fs20 ./ls}{\f4 ". Also, see }{\f6\fs20 unhash}{\f4 .
\par
\par }{\b\f4
\par }{\b\f4 Kernel Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095788}Kernel Commands{\*\bkmkend _Toc364095788}\tcl1}}}{\f4
\par
\par }{\b\f4 gsh}{\f4 provides a set of commands to control the GNO kernel. These commands mainly deal with job control. See Chapter 3 }{\b\f4 Job Control}{\f4 .
\par
\par }\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\f6\fs20\cgrid {bg }{\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\v }{bg }}}{\{ %job | pid \}
\par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4 Starts the specified job, if stopped, and places it in the background.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\f6\fs20\cgrid {fg }{\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\v }{fg }}}{\{ %job | pid \}
\par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4 Starts the specified job, if stopped, and brings it into the foreground.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\f6\fs20\cgrid {jobs }{\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\v }{jobs }}}{[-l]
\par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4 Displays a list of the shell's jobs. If the "}{\f6\fs20 -l}{\f4 " switch is specified, the process id is included in the job list.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }{\f6\fs20 \tab [1] gno> }{\b\f6\fs20 cmpl foo.c keep=foo &}{\f6\fs20
\par \tab [1] + Running cmpl foo.c keep=foo &
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab [2] gno> }{\b\f6\fs20 echo hello}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab hello
\par \tab [3] gno> }{\b\f6\fs20 jobs}{\f6\fs20
\par \tab [1] + Running cmpl foo.c keep=foo &
\par }{\f4
\par }\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\f6\fs20\cgrid {kill }{\pard\plain \s37\qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\v }{kill }}}{\{[-SIGNAL] %job | pid | [-l]
\par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4 The kill command will send the signal}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 signal}}}{\f4 }{\f6\fs20 SIGNAL}{\f4 to the process number pid. The ps command documented below describes how to list all process ID's currently executing.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }{\f6\fs20 SIGNAL}{\f4 can be either a numeric value or string representing the signal to be sent to the process. All signals are documented in Appendix D }{\b\f4 Signals}{\f4 , with numeric and string value listed. Alternatively, specifying the }{\f6\fs20 -l}{\f4 option will list all the signals and their names.
\par
\par If the process number isn't known, but the job number is, replace the pid with a '%' followed by the job number.
\par
\par }{\b\f6\fs20
\par
\par }{\b\f6\fs20 ps}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 ps}}}{\b\f6\fs20
\par }{\f4 This command takes no arguments. When invoked, a list of all currently running processes is displayed.
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20
\par [2] 9:52pm root> }{\b\f6\fs20 ls -lR :hard:gno > /ram5/dev &}{\f6\fs20
\par [1] + 35 Running ls -lR :hard:gno &
\par [3] 9:53pm root> }{\b\f6\fs20 ps}{\f6\fs20
\par ID STATE TT MMID UID TIME COMMAND
\par 1 ready co 1002 0000 0:26 NullProcess
\par 2 ready co 1005 0000 0:02 gsh
\par 35 ready co 100A 0000 0:01 ls -lR :hard:gno
\par 36 running co 1007 0000 0:00 ps
\par [4] 9:53pm root>
\par [1] + Done ls -lR :hard:gno
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 ID}{\f4 - A unique process ID assigned to a command by GNO. Use this number to reference any process.
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 STATE}{\f4 - Current state of the process. Each process can be in any of the following states:
\par
\par }\pard \fi-2160\li2880\nowidctlpar\widctlpar\adjustright {\f6 RUNNING}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 RUNNING}}}{\f4 \tab the process is currently in execution.
\par }\pard \fi-2160\li2880\nowidctlpar\widctlpar\adjustright {\f6 READY}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 READY}}}{\f4 \tab the process is not currently executing, but is ready to be executed as soon as it is assigned a time slice.
\par }{\f6 BLOCKED}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 BLOCKED}}}{\f4 \tab the process is waiting for a slow I/O operation to complete (for instance, a read from a TTY).
\par }{\f6 NEW}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 NEW}}}{\f4 \tab the process has been created, but has not executed yet.
\par }{\f6 SUSPENDED}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 SUSPENDED}}}{\f4 \tab the process was stopped with SIGSTOP,SIGTSTP,SIGTTIN, or SIGTTOU.
\par }{\f6 WAITING}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 WAITING}}}{\f4 \tab the process is waiting on a semaphore 'signal' operation. Programs waiting for data from a pipe have this state.
\par }{\f6 WAITSIGCH}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 WAITSIGCH}}}{\f4 \tab the process is waiting to receive a SIGCHLD signal.
\par }{\f6 PAUSED}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 PAUSED}}}{\f4 \tab the process is waiting for any signal.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20
\par TTY}{\f4 - Terminal connected to process.
\par MMID - Memory Manager ID assigned to process.
\par UID - ID of the user who initiated the process.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 TIME}{\f4 - How much CPU time this process has used. This is not the elapsed time of the process.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f6\fs20 COMMAND}{\f4 - Command-line string used to invoke process.
\par
\par }{\b\f6\fs20 setdebug }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 setdebug }}}{\b\f6\fs20 \{ val | \{+|-\}flag \}
\par }{\f4 Turns GNO kernel debugging code on or off. The value passed consists of a bit field, where each bit specifies a different type of debugging code to activate. An alternate method is to provide a list of debug flags, either preceded by a '+' or a '-'. Those preceded by a '+' are activated, and those preceeded with a '-' are deactivated. All debugging is deactivated by passing a value of 0. Running setdebug wtth no arguments returns a list of the debugging flags. Legal flags include:
\par \tab }{\f6\fs20 gsostrace}{\f4 \tab - Trace GS/OS calls
\par \tab }{\f6\fs20 gsosblocks}{\f4 \tab - Trace GS/OS parameter blocks
\par \tab }{\f6\fs20 gsoserrors}{\f4 \tab - Trace GS/OS errors
\par \tab }{\f6\fs20 pathtrace}{\f4 \tab - Trace GS/OS pathnames
\par \tab }{\f6\fs20 sigtrace}{\f4 \tab - Trace signals
\par \tab }{\f6\fs20 systrace}{\f4 \tab - Trace system calls
\par
\par }{\b\f6\fs20 stop }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 stop }}}{\b\f6\fs20 \{ %job | pid \}
\par }{\f4 Stops the execution of all processes in a specified job.
\par
\par }{\b\f4 Environment Commands}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364095789}Environment Commands{\*\bkmkend _Toc364095789}\tcl1}}}{\f4
\par
\par The last set of commands, environment commands, modify the }{\b\f4 gsh}{\f4 environment. Many of these commands have been used in other parts of this manual and, therefore, should not be new.
\par
\par }{\b\f6\fs20 alias }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 alias }}}{\b\f6\fs20 [name] [value]
\par }{\f4 Creates an alias for a string. When this alias is referenced as a command, }{\f6\fs20 value}{\f4 will be expanded into the command line. For commands that require many arguments or have several steps, you could set up an alias to save typing. You can also use aliases to create new names for commands. To obtain a list of all aliases, invoke }{\f6\fs20 alias}{\f4 with no arguments. To list the value of an alias, invoke }{\f6\fs20 alias}{\f4 with name only. Here are some alias examples:
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright {\f4 \tab }{\f4\ul Alias}{\f4 \tab }{\f4\ul Command Name}{\f4
\par }{\f6\fs20 \tab ll or list_long\tab ls -l
\par \tab backup_sys\tab cp -r /system /BackupDrive&
\par \tab backup_home\tab cp -r $HOME /BackupDrive&
\par \tab print\tab echo
\par \tab catalog\tab ls -l
\par \tab delete\tab rm
\par \tab copy\tab cp
\par \tab type\tab more
\par \tab rename\tab mv
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 }}}{\f6\fs20
\par }{\b\f6\fs20 export }{\v\f6\fs20 ;}{\b\f6\fs20 [variable ...]
\par }{\f4 When a shell environment variable is marked as exportable, any process that is created from within the current process (most likely }{\b\f4 gsh}{\f4 ), will be passed copies of the exported variables. See }{\b\f6\fs20 setenv}{\f4 and Chapter 5 }{\b\f4 Scope of shell variables.}{\f4
\par
\par }{\b\f6\fs20 hash}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 hash}}}{\f4
\par Displays a list of all commands currently in the shell's hash table; i.e., a list of commands in the various $PATH directories.
\par
\par }{\b\f6\fs20 prefix }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 prefix }}}{\b\f6\fs20 [prefixnum [prefixname]]
\par }{\f4 GNO maintains a list of 32 'prefixes' for each process. Prefixes allow the user to reference a directory with a number. While }{\b\f4 gsh}{\f4 provides this ability with environment variables, the prefix command exists to support the ORCA compilers and other utilities that are dependent on certain GS/OS prefixes. Appendix B contains a list of these prefixes and their "default" meanings, as documented in the "}{\i\f4 Apple IIGS GS/OS Reference}{\f4 ", Volume 1.
\par
\par If }{\f6\fs20 prefixname}{\f4 is not given, the value of }{\f6\fs20 prefixnum}{\f4 is displayed. If neither argument is given, a list of currently assigned prefixes is displayed.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f6\fs20 rehash}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 rehash}}}{\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 To decrease the time spent searching for a command, }{\b\f4 gsh}{\f4 builds a table of all commands which were found in the pathnames set in the }{\f6\fs20 $PATH}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $PATH}}}{\f4 variable. When a command is invoked, only this list is searched. When the }{\f6\fs20 $PATH}{\f4 variable is changed, }{\b\f4 gsh}{\f4 must rebuild this list. The }{\b\f6\fs20 rehash}{\f4 command tells }{\b\f4 gsh}{\f4 to rebuild the list.
\par
\par While the old list is still active, if }{\f6\fs20 $PATH}{\f4 is changed and one of the previous search paths is no longer online, }{\b\f4 gsh}{\f4 will try and execute the command from the offline device, resulting in a command failure.
\par
\par To make this a one-step process, the }{\f6\fs20 change.path}{\f4 shell script listed in Chapter 5, }{\b\f4 Accessing shell variables}{\f4 can be used.
\par
\par }{\b\f6\fs20 set }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 set }}}{\b\f6\fs20 [var] [value] [\{var value\} ...]
\par set var=value [var=value ...]
\par setenv }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 setenv }}}{\b\f6\fs20 [var value]...
\par }{\f4 Use these command to create or modify environment variables. If }{\f6\fs20 set}{\f4 is invoked with no arguments, a list of the current environment variables is displayed. If only }{\f6\fs20 var}{\f4 is given as an argument, the value of }{\f6\fs20 var}{\f4 is displayed. To set or reset a variable, use both the }{\f6\fs20 var}{\f4 and }{\f6\fs20 value}{\f4 arguments. There are two ways to set a variable, either by "}{\f6\fs20 var value}{\f4 " or "}{\f6\fs20 var=value}{\f4 ". To set multiple variables at once, simply list them all on the command line as shown above.
\par
\par }{\f6\fs20 setenv}{\f4 works just like }{\f6\fs20 set}{\f4 , but automatically exports the variable(s) or lists only exported variables.
\par
\par When using }{\f6\fs20 set}{\f4 or }{\f6\fs20 setenv}{\f4 to view a list of variables, exported variables appear in ALL CAPS.
\par
\par }{\b\f6\fs20 unalias }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 unalias }}}{\b\f6\fs20 name [name ...]
\par }{\f4 To remove an alias from the alias list, use this command. To remove multiple aliases with one command, specify all the aliases on the command line.
\par
\par }{\b\f6\fs20 unhash}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \b\v\f6\fs20\cgrid {\xe {\b\f6\fs20 unhash}}}{\b\f6\fs20
\par }{\f4 To disable the internal hash table created with the }{\f6\fs20 rehash}{\f4 command, use this command. This is useful if you wish to use only utilities in the current working directory (during testing, for example).
\par }{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 }}}{\f6\fs20
\par }{\b\f6\fs20 unset }{\v\f6\fs20 ;}{\b\f6\fs20 var [var...]
\par }{\f4 To remove a variable from the environment, use }{\f6\fs20 unset}{\f4 . }{\f6\fs20 unset}{\f4 accepts multiple names if more than one variable is to be deleted. Future attempts to access the variable }{\f6\fs20 var}{\f4 will result in an error or a NULL string, depending on the circumstances.
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20
\par [8] 9:57pm root> }{\b\f6\fs20 set}{\f6\fs20
\par PAGER = less
\par PATH = :hard:gno:bin :right:gno:usr:bin
\par user1 = foo
\par USRMAN = /usr/man
\par HISTORY = 30
\par status = 227
\par fignore = .a .root .sym
\par TERM = gnocon
\par LESS = -e
\par PROMPT = [%h] %S%t%s %C>
\par HOME = :hard:gno:user:root
\par user = user1
\par nonewline = 1
\par [9] 9:57pm root> }{\b\f6\fs20 unset user1}{\f6\fs20
\par [10] 9:57pm root> }{\b\f6\fs20 unset user}{\f6\fs20
\par [11] 9:57pm root> }{\b\f6\fs20 set}{\f6\fs20
\par PAGER = less
\par PATH = :hard:gno:bin :right:gno:usr:bin
\par USRMAN = /usr/man
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 HISTORY = 30
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 status = 0
\par fignore = .a .root .sym
\par TERM = gnocon
\par LESS = -e
\par PROMPT = [%h] %S%t%s %C>
\par HOME = :hard:gno:user:root
\par nonewline = 1
\par }{
\par }\pard \nowidctlpar\widctlpar\adjustright {\page \sect }\sectd \psz1\linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Shell Variables\tab Chapter 5
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Chapter 5\tab Shell Variables
\par }}\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \f12\cgrid {\f4\fs48 Chapter 5
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4\fs48 Shell Variables}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\fs48\cgrid {\tc {\v\f4\fs48 }{\f4\fs48 {\*\bkmkstart _Toc364094779}{\*\bkmkstart _Toc364095790}Shell Variables{\*\bkmkend _Toc364094779}{\*\bkmkend _Toc364095790}\tcl1}}}{\f4\fs48
\par }\pard \qr\nowidctlpar\widctlpar\tx720\adjustright {\f4\fs20 And then one day, hurray! Another way for gnomes to say hooray!
\par Syd Barret, }{\f4\fs20\ul The Gnome}{\f4\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4
\par
\par
\par }{\b\f4 Using shell variables}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364094780}{\*\bkmkstart _Toc364095791}Using shell variables{\*\bkmkend _Toc364094780}{\*\bkmkend _Toc364095791}\tcl1}}}{\b\f4
\par }{\f4
\par }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 supports }{\b\f4 variables}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 variables }}}{\f4 in the shell environment. These variables can be used by any shell utility or script. Many EXE}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 files and shell scripts pre-define certain shell variables that contain formatting options or other options for a specific utility. As an example, the }{\b\f4 ls}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls }}}{\f4 utility looks for the variable }{\f6\fs20 TERM}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 TERM}}}{\f4 that defines the terminal type currently being used. When }{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 is started, it reads the value of the }{\f6\fs20 TERM}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 TERM}}}{\f4 variable and avoids printing Apple II specific MouseText}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 MouseText}}}{\f4 characters if the set terminal does not support them.
\par
\par }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 has set aside certain variables for its specific use. Shell utilities should be aware of these variables and use them appropriately. Use caution when changing shell variables, because the change could affect more than just the shell.
\par
\par
\par }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\tc {\v\f4 }{\f4 {\*\bkmkstart _Toc364094781}{\*\bkmkstart _Toc364095792}.i.Scope{\*\bkmkend _Toc364094781}{\*\bkmkend _Toc364095792}\tcl1}}}{\b\f4 of Shell Variables}{\f4
\par
\par There are two types of processes that are involved in any discussion of a multitasking}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 multitasking}}}{\f4 system.The original process, }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 for example, is called a parent process}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 parent process}}}{\f4 . If }{\b\f4 gsh}{\f4 invokes a process, such as }{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 , }{\b\f4 cp}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 cp}}}{\f4 , or }{\b\f4 mv}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 mv}}}{\f4 , that process is called a child process}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 child process}}}{\f4 . It is possible for any process to define a variable. These variables will not be made available to other processes unless the program that defined the variable specifically makes them available.
\par
\par The }{\i\f4 export}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 export }}}{\f4 command makes variables defined by one process available to its children. See the example }{\i\f4 gshrc}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 gshrc}}}{\f4 shell script shown in Chaper 1 }{\b\f4 Customizing the Shell Environment}{\f4 . In the case of the shell, most of its variables are export}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 export}}}{\f4 ed and, therefore, all shell utilities can read the value of a shell variable. However, programs cannot change the value of a shell variable. In general, executables share their environment with that of the shell, so that a utility can change variables in its parent's environment. This allows communication between programs and the shell.
\par }{\f4
\par }{\f4
\par }{\b\f4 Description of Pre-defined Shell Variables}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364094782}{\*\bkmkstart _Toc364095793}Description of Pre-defined Shell Variables{\*\bkmkend _Toc364094782}{\*\bkmkend _Toc364095793}\tcl1}}}{\f4
\par }\pard\plain \s38\qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \f6\fs20\cgrid {
\par }\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \f12\cgrid {\f4 The following variables have special meaning to }{\b\f4 gsh}{\f4 . Shell variables are not case sensitive.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f6\fs20 $0}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $0}}}{\f6\fs20 , $1}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $1}}}{\f6\fs20 , $2}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $2}}}{\f6\fs20 , ...
\par \tab }{\f4 \tab String values that contain the arguments to a shell script}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 shell script}}}{\f4 . Variable 0 contains the name of the script. The first argument begins with variable 1 and so on. To expand a variable, use the dollar character, "$" (See Chapter 5 }{\b\f4 Accessing shell variables}{\f4 )
\par
\par }{\f6\fs20 $<}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $<}}}{\f4 \tab \tab When encountered, the variable is expanded using a value obtained from standard input}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 standard input}}}{\f4 . This provides a means of obtaining user input in script files. Note that the shell variables are expanded before the command-line is executed (See Chapter 5 }{\b\f4 Accessing shell variables}{\f4 ) When prompting the user for input, be sure that the prompt is in a separate command-line than the $<. Also, if the user wishes to enter a value with spaces, he must quote what he types with double-quotes.
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f6\fs20 $ECHO}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $ECHO}}}{\f4 \tab \tab A boolean value that, if defined, will cause commands in a shell script to be echoed to standard output.
\par
\par }{\f6\fs20 $FIGNORE}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $FIGNORE}}}{\f6\fs20 \tab }{\f4 This variable, if set, contains a list of filename suffixes. When doing command or filename completion, }{\b\f4 gsh}{\f4 will ignore any filename with a suffix listed in }{\f6\fs20 FIGNORE}{\f4 . For example, you might want to }{\f6\fs20 set\~fignore=".A\~.ROOT\~.SYM"}{\f4 to ignore object files and other compiler droppings.}{\f6\fs20
\par
\par $HISTORY}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $HISTORY}}}{\f4 \tab A numeric value that contains the number of history }{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 history }}}{\f4 commands (command-lines) remembered. If the value is 0 or }{\f6\fs20 HISTORY}{\f4 is undefined, all commands will be remembered. Previous command-lines can be called back with the UP-ARROW and DOWN-ARROW (See Chapter 2}{\b\f4 , History Editing Commands}{\f4 ).
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4
\par }{\f6\fs20 $HOME}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $HOME}}}{\f4 \tab \tab The }{\f6\fs20 HOME}{\f4 directory is the main directory of the shell; it is the directory }{\b\f4 gsh}{\f4 defaults to when it starts. The tilde character ("~") can be used as a shorthand method of accessing the }{\f6\fs20 HOME}{\f4 directory (as discussed in Chapter 3, }{\b\f4 Tilde Expansion}{\f4 ).
\par
\par }{\f6\fs20 $IGNOREEOF}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $IGNOREEOF}}}{\f6\fs20 \tab }{\f4 A boolean value that, if enabled, will prevent ^D from exiting the shell.}{\f6\fs20
\par
\par $NOBEEP}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $NOBEEP}}}{\f4 \tab A boolean value that, if set, will prevent }{\b\f4 gsh}{\f4 from sounding the speaker when errors occur while editing a command-line.
\par
\par }{\f6\fs20 $NODIREXEC}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $NODIREXEC}}}{\f4 \tab A boolean value that, if set, will disable }{\b\f4 gsh}{\f4 's feature of treating directory names as commands; i.e. if a directory is specified as a command, }{\b\f4 gsh}{\f4 will move to that directory as though the cd command was being used.
\par
\par }{\f6\fs20 $NOGLOB}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $NOGLOB}}}{\f4 \tab A boolean value that, if enabled, will disable filename globbing}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 globbing}}}{\f4 . Command arguments will be passed to their commands "as-is", without any wildcard expansion.
\par
\par }{\f6\fs20 $NONEWLINE}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $NONEWLINE}}}{\f4 \tab A boolean value that, if set, will disable carriage returns being output before and after command execution. Previous examples given in this manual have this option set.
\par
\par }{\f6\fs20 $PATH}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $PATH}}}{\f4 \tab \tab A string value that defines the pathnames where shell scripts, EXE}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 utilities, and SYS16}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 SYS16}}}{\f4 programs can be found (See }{\b\f4 Chapter 3, How gsh finds a command}{\f4 ). Because GS/OS uses colons as separators in pathnames, }{\b\f4 gsh}{\f4 cannot allow colons to be used as separators in the PATH variable, as U}{\f4\fs20 NIX}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 UNIX}}}{\f4 does. If one of the path entries has a space within it (which is possible with the HFS}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 HFS}}}{\f4 FST), then the space should be quoted with a backslash, "\\".
\par
\par }{\f6\fs20 $PRECMD}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $PRECMD}}}{\f6\fs20 \tab }{\f4 Actually an }{\f4\ul alias}{\f4 }{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4\ul alias }}}{\f4 and not a variable, if }{\f6\fs20 PRECMD}{\f4 is defined it will be executed just before gsh prints the prompt for a command line. For example, }{\f6\fs20 alias precmd qtime}{\f4 will print the time in English text before every prompt.}{\f6\fs20
\par
\par $PROMPT}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $PROMPT}}}{\f4 \tab When }{\b\f4 gsh}{\f4 prompts you to enter a command, the prompt that appears before the cursor can be customized for your }{\b\f4 gsh}{\f4 environment. If }{\f6\fs20 PROMPT}{\f4 is undefined, the default prompt of "% " is used. The prompt string recognizes certain character sequences in the }{\f6\fs20 PROMPT}{\f4 variable and interprets them accordingly. The following are the special characters:
\par }\pard \qj\fi-2160\li3600\nowidctlpar\widctlpar\tx3600\adjustright {\f6\fs20 %h, %!, !}{\f4 \tab Current history number.
\par }{\f6\fs20 %t, %@}{\f4 \tab Current time of day in 12 hour am/pm format.
\par }{\f6\fs20 %d, %/}{\f4 \tab Current working directory.
\par }{\f6\fs20 %~}{\f4 \tab Current working directory with tilde ("}{\f6\fs20 ~}{\f4 ") replacement.
\par }{\f6\fs20 %c, %C, %.}{\f4 \tab Trailing component of current working directory.
\par }{\f6\fs20 %S, %s}{\f4 \tab Inverse mode ON (}{\f6\fs20 %S}{\f4 ) / OFF (}{\f6\fs20 %s}{\f4 ).
\par }{\f6\fs20 %U, %u}{\f4 \tab Begin and end Underline mode (only on terminals that support underline. }{\f6\fs20 gnocon}{\f4 will use inverse mode instead.)
\par }{\f6\fs20 %%}{\f4 \tab Displays a single "}{\f6\fs20 %}{\f4 " character.
\par }{\f6\fs20 %n}{\f4 \tab User name (contents of }{\f6\fs20 $USER}{\f4 variable).
\par }{\f6\fs20 %W}{\f4 \tab The date in mm/dd/yy format.
\par }{\f6\fs20 %D}{\f4 \tab The date in yy-mm-dd format.
\par }{\f6\fs20 \\n}{\pard\plain \qj\fi-2160\li3600\nowidctlpar\widctlpar\tx3600\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 \\\\n}}}{\f4 \tab Newline
\par }{\f6\fs20 \\r}{\pard\plain \qj\fi-2160\li3600\nowidctlpar\widctlpar\tx3600\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 \\\\r}}}{\f4 \tab Carriage Return
\par }{\f6\fs20 \\t}{\pard\plain \qj\fi-2160\li3600\nowidctlpar\widctlpar\tx3600\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 \\\\t}}}{\f4 \tab Tab
\par }{\f6\fs20 \\b}{\f4 \tab Bell (beep)
\par
\par }\pard \qj\li1440\nowidctlpar\widctlpar\tx3600\adjustright {\f4 Examples of prompts already used in this manual are "}{\f6 [1]%}{\f4 ", and "}{\f6 [/user/root]%}{\f4 "
\par }\pard \li1440\nowidctlpar\widctlpar\tx3600\adjustright {\f4 These were created by using the commands }{\b\f4 set prompt "[%h]}{\b\f6 %}{\f4 " and }{\b\f4 set prompt "[%d]}{\b\f6 %}{\b\f4 "}{\f4 .
\par }\pard \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4
\par }{\f6\fs20 $PUSHDSILENT}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\f6\fs20 $PUSHDSILENT}}}{\f6\fs20
\par \tab \tab }{\f4 If this variable is defined, }{\b\f4 gsh}{\f4 will not print the directory stack after any of the directory stack commands (See Chapter 4 }{\b\f6\fs20 pushd}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 pushd}}}{\f4 , }{\b\f6\fs20 popd}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 popd}}}{\f4 , .) }{\f6\fs20
\par
\par $SAVEHIST}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $SAVEHIST}}}{\f4 \tab A numeric value that contains the number of commands to save to disk when exiting }{\b\f4 gsh}{\f4 . These commands are then read back in when }{\b\f4 gsh}{\f4 is restarted which allows old commands to be reused. If the value is 0 or }{\f6\fs20 SAVEHIST}{\f4 is undefined, no commands will be saved to disk.
\par
\par }{\f6\fs20 $TERM}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $TERM}}}{\f6\fs20 \tab \tab }{\f4 This variable contains the name of the terminal emulation}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 terminal emulation}}}{\f4 that the shell and other applications should use. By default, it is '}{\f6\fs20 gnocon}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 gnocon}}}{\f4 '. When the shell encounters a '}{\f6\fs20 set term}{\f4 ' command, it automatically calls the }{\b\f6\fs20 tset}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\b\f6\fs20 tset}}}{\f4 command to reload the termcap information. See Appendix F }{\b\f4 Termcaps}{\f4 .}{\f6\fs20
\par
\par $TERMCAP}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $TERMCAP}}}{\f6\fs20 \tab }{\f4 This variable specifies the location of the }{\i\f4 termcap}{\f4 }{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\i\f4 termcap }}}{\f4 file. The shell and other applications look for }{\i\f4 termcap}{\f4 in the /etc directory, but if }{\f6\fs20 TERMCAP}{\f4 is set, the fully specified termcap file is used instead. This allows users to install custom termcap entries. See Appendix F }{\b\f4 Termcaps}{\f4 .}{\f6\fs20
\par
\par $USER}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 $USER}}}{\f4 \tab \tab A string that represents the name of the current user. This variable is usually set by }{\b\f4 login}{\f4 (1)}{\pard\plain \qj\fi-1440\li1440\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 login(1)}}}{\f4 .
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4
\par }{\b\f4 Accessing shell variables}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \b\v\f4\cgrid {\tc {\b\f4 {\*\bkmkstart _Toc364094783}{\*\bkmkstart _Toc364095794}Accessing shell variables{\*\bkmkend _Toc364094783}{\*\bkmkend _Toc364095794}\tcl1}}}{\f4
\par
\par Shell variables}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 variables}}}{\f4 are defined or changed with the }{\f6\fs20 set}{\f4 }{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 set }}}{\f4 command. The }{\f6\fs20 unset}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 unset}}}{\f4 command is used to delete a variable. See Chapter 4 }{\b\f4 Environment Commands}{\f4 for more information on the }{\f6\fs20 set}{\f4 and }{\f6\fs20 unset}{\f4 commands
\par
\par To access shell variables from the command line or a shell script, use the character "$}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 $}}}{\f4 " followed by the variable name. The dollar sign character will expand the variable to its value. If you wish to use the dollar sign character in a string from the command line, remember to enclose it in single quote}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 quote}}}{\f4 s or use the "\\" escape character. If you use double quotes, the shell will try to expand the variable. To differentiate the variable name from characters that may immediately follow it, the variable name may be optionally surrounded with braces, "\{" and "\}".This provides a very powerful way of user interaction with shell scripts. As an example,
\par
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20
\par \tab [1] 9:41pm root> }{\b\f6\fs20 set}{\f6\fs20
\par \tab PAGER = less
\par \tab SAVEHIST = 25
\par \tab PATH = :hard:gno:bin :right:gno:usr:bin
\par \tab USRMAN = /usr/man
\par \tab HISTORY = 100
\par \tab status = 0
\par \tab fignore = .a .root .sym
\par \tab TERM = gnocon
\par \tab LESS = -e
\par \tab PROMPT = [%h] %S%t%s %C>
\par \tab HOME = :hard:gno:user:root
\par \tab user = root
\par \tab nonewline = 1
\par \tab [2] 9:41pm root> }{\b\f6\fs20 set history 30 user user1 ; set}{\f6\fs20
\par \tab PAGER = less
\par \tab SAVEHIST = 25
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab PATH = :hard:gno:bin :right:gno:usr:bin
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 \tab USRMAN = /usr/man
\par \tab HISTORY = 30
\par \tab status = 0
\par \tab fignore = .a .root .sym
\par \tab TERM = gnocon
\par \tab LESS = -e
\par \tab PROMPT = [%h] %S%t%s %C>
\par \tab HOME = :hard:gno:user:root
\par \tab user = user1
\par \tab nonewline = 1
\par \tab [3] 9:41pm root> }{\b\f6\fs20 unset savehist ; set}{\f6\fs20
\par \tab PAGER = less
\par \tab PATH = :hard:gno:bin :hard:gno:usr:bin
\par \tab USRMAN = /usr/man
\par \tab HISTORY = 30
\par \tab status = 0
\par \tab fignore = .a .root .sym
\par \tab TERM = gnocon
\par \tab LESS = -e
\par \tab PROMPT = [%h] %S%t%s %c>
\par \tab HOME = :hard:gno:user:root
\par \tab user = user1
\par \tab nonewline = 1
\par \tab [6] 9:43pm root> }{\b\f6\fs20 echo 'Current value of $path = ' $path}{\f6\fs20
\par \tab Current value of $path = :right:gno:bin :right:gno:usr:bin
\par \tab [7] 9:44pm root> }{\b\f6\fs20 echo "value of $path = " $path}{\f6\fs20
\par \tab value of :right:gno:bin :right:gno:usr:bin = :right:gno:bin \tab :right:gno:usr:bin
\par \tab [9] 9:45pm root> }{\b\f6\fs20 set user1 foo}{\f6\fs20
\par \tab [10] 9:45pm root> }{\b\f6\fs20 echo $user1}{\f6\fs20
\par \tab foo
\par \tab [11] 9:45pm root> }{\b\f6\fs20 echo $\{user\}1}{\f6\fs20
\par \tab user11
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f6\fs20 \tab [12] 9:46pm root> }{\b\f6\fs20 echo "echo '\\$path = ' \\$path" >> change.path}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f6\fs20 \tab [13] 9:46pm root> }{\b\f6\fs20 echo "set path \\$1" >> change.path}{\f6\fs20
\par \tab [14] 9:47pm root> }{\b\f6\fs20 echo 'rehash' >> change.path}{\f6\fs20
\par \tab [15] 9:47pm root> }{\b\f6\fs20 cat change.path}{\f6\fs20
\par \tab echo '$path = ' $path
\par \tab set path $1
\par \tab rehash
\par \tab [16] 9:48pm root> }{\b\f6\fs20 change.path '/dev/gno/utilities'}{\f6\fs20
\par \tab $path = /dev/gno/orca /dev/gno/utilities
\par \tab hashed 22 files.
\par \tab [17] 9:49pm root> }{\b\f6\fs20 change.path $PATH}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f6\fs20 \tab $path = /dev/gno/orca /dev/gno/utilities
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f6\fs20 \tab hashed 55 files.
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqr\tx9360\adjustright {\f6\fs20 \tab [18] 9:50pm root> }{\b\f6\fs20 echo this is $homeplate}{\f6\fs20
\par \tab this is\tab }{\f4\fs20 \{ variable }{\f6\fs20 homeplate}{\f4\fs20 wasn't found \}
\par }{\f6\fs20 \tab [19] 9:51pm root> }{\b\f6\fs20 echo this is $\{home\}plate}{\f6\fs20
\par \tab this is /dev/gnoplate\tab }{\f4\fs20 \{ variable }{\f6\fs20 home}{\f4\fs20 is found \}}{\f6\fs20
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tqc\tx5760\adjustright {\f4\fs20
\par
\par
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 \page \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Sample gsh session\tab Appendix A}{
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Appendix A\tab Sample gsh session}{
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\chpgn
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}{\footerf \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}\pard\plain \nowidctlpar\widctlpar\tqr\tx9900\adjustright \f12\cgrid {\f4\fs48 Appendix A}{\f4\fs48
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f4\fs48 Sample gsh session}{\f4\fs48
\par }{\pard\plain \nowidctlpar\widctlpar\tqr\tx9900\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364094784}{\*\bkmkstart _Toc364095795}.i.Sample gsh session{\*\bkmkend _Toc364094784}{\*\bkmkend _Toc364095795}\tcl1}}}{\f4
\par
\par The following represents a sample session in gsh. Many of the features discussed in this manual are reviewed here. Comments are enclosed in braces ("\{\}").
\par }{
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 [1] gno> }{\b\f6\fs20 set}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 savehist = 25
\par path = /dev/orca/utilities /dev/gno/orca /dev/gno/utilities
\par history = 25
\par prompt = [%h] %C>
\par user = achin
\par home = /dev/gno
\par nonewline = 1
\par [2] gno> }{\b\f6\fs20 echo environment variable PROMPT = $PROMPT}{\f6\fs20
\par environment variable PROMPT = [%h] %C>
\par [3] gno> }{\b\f6\fs20 cat gshrc}{\f6\fs20
\par \tab }{\f4\fs20 \{ }{\b\f4\fs20 gshrc}{\f4\fs20 is the startup file. \}}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 ###
\par #
\par # GNO 2.0 gshrc file
\par #
\par ###
\par #
\par # Initialize our environment
\par #
\par set path=":hard:gno:bin :right:gno:usr:bin"
\par set prompt="[%h] %S%t%s %C> "
\par set home=":hard:gno:user:root"
\par set term=gnocon
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 export path prompt home term
\par }\pard \nowidctlpar\widctlpar\adjustright {\f6\fs20 setenv history=100 savehist=25
\par ###
\par #
\par #Set up standard prefixes for utilities.
\par #
\par ###
\par prefix 2 :software:orca:libraries
\par prefix 3 :software:orca
\par prefix 4 :software:orca:shell
\par prefix 5 :software:orca:languages
\par prefix 6 :software:orca:utilities
\par prefix 7 :tmp
\par ###
\par #
\par # Set up prefixes for Orca2.0(tm)'s benefit
\par #
\par ###
\par prefix 13 :software:orca:libraries
\par prefix 14 :software:orca
\par prefix 15 :software:orca:shell
\par prefix 16 :software:orca:languages
\par prefix 17 :software:orca:utilities
\par alias ls 'ls -CF'
\par alias dir 'ls -al'
\par alias cp 'cp -i'
\par alias rm 'cp -p rm'
\par alias mv 'cp -p mv'
\par setenv usrman='/usr/man'
\par set fignore='.a .root .sym'
\par alias zcat 'compress -cd'
\par setenv pager=less
\par setenv less=-e
\par set nonewline=1
\par #
\par # Move to home directory
\par #
\par cd
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 [4] gno> }{\b\f6\fs20 cat gshrc > .ttyb&}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 \tab }{\f4\fs20 \{ }{\b\f4\fs20 .ttyb}{\f4\fs20 is the printer connected to the printer port. \}}{\f6\fs20
\par [2]
\par [5] gno> }{\b\f6\fs20 echo File \\'gshrc\\' sent to printer.}{\f6\fs20
\par File 'gshrc' sent to printer.
\par [6] gno> }{\b\f6\fs20 alias l 'ls -F'; l}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 \tab }{\f4\fs20 \{ The ls "-F" option displays executable and directory files differently. \}}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 :dev:gno
\par doc/ foo* gsh* gshrc* kern*
\par man/ message message2 orca/ press.release
\par release.notes samples/ todo updates utilities/
\par [7] gno> }{\b\f6\fs20 history}{\f6\fs20
\par 1: set
\par 2: echo environment variable PROMPT = $PROMPT
\par 3: cat .gshrc
\par 4: cat .gshrc > .printer&
\par 5: echo File \\'gshrc\\' sent to printer.
\par 6: ls
\par 7: history
\par [8] gno> }{\b\f6\fs20 no_file}{\f6\fs20
\par no_file: Command not found.
\par [9] gno> }{\b\f6\fs20 message}{\f6\fs20
\par message: Not executable.
\par [10] gno> }{\b\f6\fs20 unset USER}{\f6\fs20
\par \tab }{\f4\fs20 \{ Environment variables are not case sensitive. \}}{\f6\fs20
\par [11] gno> }{\b\f6\fs20 set PATH}{\f6\fs20
\par
\par path = /dev/orca/utilities /dev/gno/orca /dev/gno/utilities
\par [12] gno> }{\b\f6\fs20 set PROMPT}{\f6\fs20
\par
\par prompt = [%h] %C>
\par [13] gno> }{\b\f6\fs20 unset PROMPT}{\f6\fs20
\par % }{\b\f6\fs20 cp message message2&}{\f6\fs20
\par [2]
\par % }{\b\f6\fs20 rm doc&}{\f6\fs20
\par rm: :dev:gno:doc directory
\par % }{\b\f6\fs20 rm -r doc&}{\f6\fs20
\par [3]
\par % }{\b\f6\fs20 ls *}{\f6\fs20
\par :dev:gno
\par foo* gsh* gshrc* kern* man/
\par message message2 orca/ press.release release.notes
\par samples/ todo updates utilities/
\par }{\f6\fs20
\par }{\f6\fs20 % }{\b\f6\fs20 echo *}{\f6\fs20
\par gshrc foo message Finder.Data utilities press.release man release.notes todo
\par updates gsh kern samples doc orca message2
\par % }{\b\f6\fs20 echo g* m*}{\f6\fs20
\par gshrc gsh message man message2
\par % }{\b\f6\fs20 echo g?}{\f6\fs20
\par No match.
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 % }{\b\f6\fs20 pwd}{\f6\fs20
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 /dev/gno
\par % }{\b\f6\fs20 clear ; df
\par }{\f6\fs20 .d## Volume Device Free Total Capacity System
\par ---- ---------------- ---------------- ------- ------- -------- -----------
\par .d1 :system .APPLESCSI.HD01. 25746 50773 49% ProDOS
\par .d2 :dev .APPLESCSI.HD01. 44868 65108 31% ProDOS
\par .d3 :usr .APPLESCSI.HD01. 44526 48725 8% ProDOS
\par .d4 :ram5 .DEV2 493 512 3% ProDOS
\par % }{\b\f6\fs20 which ls cp echo ps}{\f6\fs20
\par ls: /dev/gno/utilities/ls
\par cp: /dev/gno/utilities/cp
\par echo: Shell Built-in Command
\par ps: Shell Built-in Command
\par % }{\b\f6\fs20 echo -n foo}{\f6\fs20
\par foo % }{\b\f6\fs20 l .dev2 .applescsi.hd01.01}{\f6\fs20
\par }{\f4\fs20 \tab \{ Because of the previous "echo -n", the }{\f6\fs20 PROMPT}{\f4\fs20 is displayed on the line where echo output ended. \}}{\f6\fs20
\par :ram5
\par df echo history ls ls.ram5
\par ls.system prefix ps set which
\par
\par :system
\par AppleworksGS/ BASIC.System* HyperCard/ ProDOS* a2fx/
\par basic.launcher* emacs.icon fontasm/ gutenberg/ icons/
\par kermit/ publish.it/ review shr.pic/ shrinkit/
\par snowterm/ system/
\par % }{\b\f6\fs20 alias print 'echo'; alias copy 'cp'; alias delete 'rm'; alias}{\f6\fs20
\par }{\b\f6\fs20 catalog 'ls -l'; alias rename 'mv'}{\f6\fs20
\par \tab }{\f4\fs20 \{ Useful aliases for Orca fans. \}}{\f6\fs20
\par % }{\b\f6\fs20 alias}{\f6\fs20
\par l: ls -F
\par print: echo
\par copy: cp
\par delete: rm
\par catalog: ls -l
\par rename: mv
\par % }{\b\f6\fs20 set PROMPT='[!] %C> '}{\f6\fs20
\par [30] gno> }{\b\f6\fs20 cd samples}{\f6\fs20
\par [31] samples> }{\b\f6\fs20 cmpl ps.c keep=ps > .dev2/ps&}{\f6\fs20
\par [2]
\par [32] samples> }{\b\f6\fs20 cmpl kill.c keep=kill > .dev2/kill&}{\f6\fs20
\par [3]
\par [34] samples> }{\b\f6\fs20 ls dummy_dir}{\f6\fs20
\par [35] samples> }{\b\f6\fs20 ls -9}{\f6\fs20
\par ls: unrecognized option `-9'
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 usage: ls [-acdfgilqrstu1ACLFR] [name ...]
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 [36] samples> }{\b\f6\fs20 ls -9 >& .dev2/error}{\f6\fs20
\par \tab \{ Each pathname has a device name entry (cf. ps). \}
\par [37] samples> }{\b\f6\fs20 cat < /ram5/error}{\f6\fs20
\par ls: unrecognized option `-9'
\par usage: ls [-acdfgilqrstu1ACLFR] [name ...]
\par [38] samples> }{\b\f6\fs20 ls *.c;grep \\#\\i\\n\\c\\l\\u\\d\\e [^sfd]*.c}{\f6\fs20
\par \tab }{\f4\fs20 \{ grep searches for a regular expression in a file and outputs the lines that match. \}}{\f6\fs20
\par comp.c dp.c edit.c ffdir.c gar.c
\par kill.c link.c ps.c setdebug.c
\par kill.c:#include <stdio.h>
\par kill.c:#include <memory.h>
\par kill.c:#include "3/work/gno/conf.h"
\par kill.c:#include "3/work/gno/proc.h"
\par kill.c:#include "3/work/gno/kerntool.h"
\par gar.c:#include <stdio.h>
\par gar.c:#include <orca.h>
\par gar.c:#include "3/work/gno/kerntool.h"
\par gar.c:#include <gno/signal.h>
\par ps.c:#include <stdio.h>
\par ps.c:#include <memory.h>
\par ps.c:#include <string.h>
\par ps.c:#include <orca.h>
\par ps.c:#include "3/work/gno/conf.h"
\par ps.c:#include "3/work/gno/proc.h"
\par ps.c:#include "3/work/gno/kvm.h"
\par edit.c:#include <stdio.h>
\par edit.c:#include <stdlib.h>
\par edit.c:#include <string.h>
\par edit.c:#include <ctype.h>
\par edit.c:#include <types.h>
\par edit.c:#include <gsos.h>
\par edit.c:#include <shell.h>
\par edit.c:#include <orca.h>
\par edit.c:#include <stddef.h>
\par edit.c:#include <texttool.h>
\par edit.c:#include <gno/kerntool.h>
\par comp.c:#include <stdio.h>
\par comp.c:#include <stdlib.h>
\par comp.c:#include <string.h>
\par comp.c:#include <ctype.h>
\par comp.c:#include <types.h>
\par comp.c:#include <shell.h>
\par comp.c:#include <gsos.h>
\par comp.c:#include <orca.h>
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 comp.c:#include <texttool.h>
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20 comp.c:#include <gno/kerntool.h>
\par link.c:#include <stdio.h>
\par link.c:#include <stdlib.h>
\par link.c:#include <string.h>
\par link.c:#include <ctype.h>
\par link.c:#include <types.h>
\par link.c:#include <shell.h>
\par link.c:#include <orca.h>
\par link.c:#include <texttool.h>
\par link.c:#include <gno/kerntool.h>
\par [39] samples> }{\b\f6\fs20 head link.c}{\f6\fs20
\par \tab }{\f4\fs20 \{ head displays the first few lines of a file. \}}{\f6\fs20
\par /*\tab
\par
\par parsing code for compile, cmpl, cmplg
\par
\par The options flags are set up in a bizarre format as follows:
\par
\par 76543210 76543210 76543210 76543210
\par yz qrstuvwx ijklmnop abcdefgh
\par [40] samples> }{\b\f6\fs20 set PATH}{\f6\fs20
\par path = /dev/orca/utilities:/dev/gno/orca:/dev/gno/utilities
\par [41] samples> }{\b\f6\fs20 unset PATH}{\f6\fs20
\par [42] samples> }{\b\f6\fs20 set PATH}{\f6\fs20
\par Variable Not Found
\par [43] samples> }{\b\f6\fs20 rm m[e][s][s]age[2]}{\f6\fs20
\par [44] samples> }{\b\f6\fs20 rehash}{\f6\fs20
\par hashed 0 files.
\par [45] samples> }{\b\f6\fs20 rm who_cares about_the parameters}{\f6\fs20
\par \tab }{\f4\fs20 \{ rm will not be recognized as a command because the hash-table is empty. \}}{\f6\fs20
\par rm: Command not found.
\par [46] samples> }{\b\f6\fs20 set path = /dev/orca/utilities ~/orca ~/utilities}{\f6\fs20
\par
\par /dev/orca/utilities /dev/gno/orca /dev/gno/utilities =
\par [47] samples> }{\b\f6\fs20 set PATH}{\f6\fs20
\par
\par path = =
\par [48] samples> }{\b\f6\fs20 set path="~/../orca/utilities ~/orca $HOME/utilities"
\par }{\f6\fs20 \tab }{\f4\fs20 \{ Filename expansion will be performed before PATH is set. \}}{\f6\fs20
\par [49] samples> }{\b\f6\fs20 set path}{\f6\fs20
\par
\par path = /dev/orca/utilities /dev/gno/orca /dev/gno/utilities
\par [49] samples> }{\b\f6\fs20 rehash}{\f6\fs20
\par hashed 68 files.
\par }\pard \nowidctlpar\widctlpar\tqr\tx9900\adjustright {\f6\fs20
\par }\pard \nowidctlpar\widctlpar\adjustright {\f4\fs48 \page \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl \pard\plain \nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Appendix B
\par }\pard \nowidctlpar\widctlpar\adjustright {\pard\plain \nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364094785}{\*\bkmkstart _Toc364095796}.i.Prefix Conventions{\*\bkmkend _Toc364094785}{\*\bkmkend _Toc364095796}\tcl1}}}{\f4\fs48
\par }{\f4
\par
\par When }{\b\f4 gsh}{\f4 is started, GS/OS assigns certain values to individual prefixes, and usually the }{\i\f4 gshrc}{\f4 file also sets some prefixes. A total of 32 prefixes are available to the user. The following list documents each prefix and the purpose of each.
\par
\par }\pard \fi-1440\li1440\nowidctlpar\widctlpar\adjustright {\f4\ul Number}{\f4 \tab }{\f4\ul Description}{\f4
\par }\pard \fi-1440\li1440\nowidctlpar\widctlpar\adjustright {\f4 @\tab AppleShare }{\pard\plain \fi-1440\li1440\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 AppleShare }}}{\f4 prefix. If GNO resides on an AppleShare volume, this prefix is set to the pathname of the user's directory on the file server; otherwise, this prefix is set to the same pathname as prefix number 9.
\par *\tab Boot volume prefix. It is not possible to modify the value of this prefix with the shell's }{\f6\fs20 prefix}{\f4 command. The only other way to access this prefix is the GS/OS _GetBootVol call.
\par 0\tab Prefix 0 is the current working directory. It is the prefix that is changed by the }{\f6\fs20 cd}{\pard\plain \fi-1440\li1440\nowidctlpar\widctlpar\adjustright \v\f6\fs20\cgrid {\xe {\v\f6\fs20 }{\f6\fs20 cd}}}{\f4 command.
\par 1\tab Directory a program resides in. In the shell, this is usually /bin. The kernel sets this prefix (and 9/) appropriately for each program that is executed.
\par 2-8\tab Used by Orca 1.0 languages and utilities
\par 2\tab If the ORCA languages are being used, prefix 2 points to the ORCA Libraries directory.
\par 3\tab This prefix should point to the directory that contains ORCA.SYS16.
\par 4\tab ORCA Shell directory should point to the directory that contains the EDITOR, SYSTABS, SYSCMND, etc. files.
\par 5\tab ORCA Languages directory
\par 6\tab ORCA Utilities directory
\par 7\tab ORCA Temp directory - setting this to a RAM disk makes certain editor operations faster.
\par 9\tab Same as prefix 1/
\par 10-12\tab Standard input, output, and error device names. GNO sets these to be '.ttyco'.
\par 13\tab Same as prefix 2/ above if Orca 2.0 languages are being used.
\par 14\tab Same as prefix 3/
\par 15\tab Same as prefix 4/
\par 16\tab Same as prefix 5/
\par 17\tab Same as prefix 6/
\par 18\tab Same as prefix 7/
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Errors\tab Appendix C}{
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {Appendix C\tab Errors}{
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\chpgn
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}{\footerf \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Appendix C
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\v\f4\fs48 }{\f4\fs48 {\*\bkmkstart _Toc364094786}{\*\bkmkstart _Toc364095797}.i.Errors{\*\bkmkend _Toc364094786}{\*\bkmkend _Toc364095797}\tcl1}}}{\f4\fs48
\par }{\f4
\par
\par }{\b\f4 gsh}{\f4 tries, when an error occurs, to output an informative error message that will lead you to the solution of your problem. This appendix documents all }{\b\f4 gsh}{\f4 error messages and what the probable cause of the problem might be. There are five classes of errors: generic gsh, command-entry, syntax, execution, and built-in. Each error is discussed separately.
\par
\par
\par }{\b\f4 Generic gsh Errors
\par }{\f4
\par These errors can typically occur at any time and may not be directly related to something the user has done. Some of them are trivial, and some are very serious and should be reported immediately.
\par
\par }{\b\i\f6\fs20 gsh: There are stopped jobs.
\par }{\f4 All jobs must be killed before exiting the shell. Use the jobs and kill commands.
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 Command Editing Errors}{\f4
\par
\par Command editing errors occur when entering information on the command-line. If you try to move the cursor too far to the left or right of your command-line (i.e. before the first character or after the last character), an error will occur. At present, gsh indicates a command-entry error with a }{\b\i\f6\fs20 Beep}{\f4 . This is to notify you that the action you requested is not possible.
\par
\par
\par }{\b\f4 Syntax Errors}{\f4
\par
\par Syntax errors occur while gsh is trying to understand the command you have entered on the command-line. Problems arise when you wish to quote an argument (") and only enter one quote.
\par
\par }{\b\i\f6\fs20 gsh: Missing ending ".
\par }{\f4 A second " wasn't supplied when quoting text.
\par
\par }{\b\i\f6\fs20 gsh: Missing ending '.
\par }{\f4 A second ' wasn't supplied when quoting text.
\par
\par }{\b\i\f6\fs20 gsh: Too many arguments, so no dessert tonight.
\par }{\f4 The command-line contained too many arguments which exceeded the available memory allocated by }{\b\f4 gsh}{\f4 .
\par
\par }{\b\i\f6\fs20 gsh: Not enough memory for arguments.
\par }{\f4 No memory was available for allocating command-line arguments.
\par
\par }{\b\i\f6\fs20 gsh: Extra '<' encountered.
\par gsh: Extra '>' or '>>' encountered.
\par gsh: Extra '>&' or '>>&' encountered
\par }{\f4 Text may be redirected to only one file.
\par
\par }{\b\i\f6\fs20 gsh: No file specified for '<'.
\par gsh: No file specified for '>' or '>>'.
\par gsh: No file specified for '>&' or '>>&'.
\par }{\f4 A file must be specified when redirecting I/O.
\par
\par }{\b\i\f6\fs20 gsh: '|' conflicts with '>' or '>>'.
\par gsh: '|' conflicts with '<'.
\par }{\f4 Piping is another form of redirection, thus pipes and redirections cannot be mixed.
\par
\par
\par }{\b\f4 Execution Errors}{\f4
\par
\par After }{\b\f4 gsh}{\f4 parses the command-line, it will then execute the command and pass any arguments to the command. If, however, the command does not exist, }{\b\f4 gsh}{\f4 will report an error. The reason the command does not exist could be either the command name was typed wrong or the command does not exist.
\par
\par }{\b\i\f6\fs20 $0: Command not found.
\par }{\f4 $0 represents the command to be executed. Either the command name was entered incorrectly or the command does not exist. Recheck the spelling of the command and check $PATH to make sure the command exists in the pathname list.
\par
\par }{\b\i\f6\fs20 $0: Not executable.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 $0 represents the command to be executed.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }{\b\i\f6\fs20 heh heh, next time you'll need to specify a command before redirecting.
\par }{\f4 Redirection was specified but the command-line had no command.
\par
\par }{\b\i\f6\fs20 Cannot fork (too many processes?)
\par }{\f4 An error was encountered forking a process. The most likely culprit is there are too many processes running.
\par
\par
\par }{\b\f4 Built-in Command Errors
\par }{\f4
\par These are errors which can be returned by many of the built-in commands. Every built-in also contains a Usage message on the proper invocation method.
\par
\par }{\b\i\f6\fs20 cd: Not a directory
\par }{\f4 Tried to change the cwd to a file that isn't a directory.
\par
\par }{\b\i\f6\fs20 prefix: could not set prefix, pathname may not exist.
\par }{\f4 GS/OS Prefix command failed, most likely the pathname did not exist or the disk is damaged.
\par
\par }{\b\i\f6\fs20 setdebug: Unknown flag
\par }{\f4 An unknown flag was sent to }{\f6\fs20 setdebug}{\f4 . Run }{\f6\fs20 setdebug}{\f4 with no arguments for a list of possible flags.
\par
\par }{\b\i\f6\fs20 ps: error in kvm_open()
\par }{\f4 ps was unable to access the process data structure. It would be amazing that the kernel is still running for this error to occur.
\par
\par }{\b\i\f6\fs20 set: Variable not specified
\par }{\f4 A variable was not passed to set, for example, "}{\f6\fs20 set =bar}{\f4 ". Make sure the variable name was specified without the preceding dollar sign. For example, if foo is not set, then "}{\f6\fs20 set $foo=bar}{\f4 " would be expanded to "}{\f6\fs20 set =bar}{\f4 ", this resulting in this error.
\par
\par }{\b\i\f6\fs20 kill: Invalid signal number
\par kill: Invalid signal name
\par }{\f4 See Appendix C for a list of valid signal numbers and names.
\par
\par }{\b\i\f6\fs20 fg: No job to foreground.
\par bg: No job to background.
\par stop: No job to stop.
\par }{\f4 There aren't any jobs so this command is useless.
\par
\par }{\b\i\f6\fs20 fg: No such job.
\par bg: No such job.
\par stop: No such job.
\par kill: No such job.
\par }{\f4 The specified job (or process) doesn't exist.
\par
\par }{\b\i\f6\fs20 fg: Gee, this job is already in the foreground.
\par bg: Gee, this job is already in the background.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\i\f6\fs20 stop: Gee, this job is already stopped.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 Well, this should be self-explanatory. Also, some of these should be impossible to get, unless you're bound and determined to crash gsh, but then, these errors will keep you from crashing it, so, what's the point?
\par }{\b\f4 \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Signals\tab Ap}{\f5 pendix D
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Appendix D\tab \tab Signals
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\chpgn
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}{\footerf \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}\pard\plain \nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Appendix D
\par }\pard \nowidctlpar\widctlpar\adjustright {\f4\fs48 Signals}{\pard\plain \nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364094787}{\*\bkmkstart _Toc364095798}Signals{\*\bkmkend _Toc364094787}{\*\bkmkend _Toc364095798}\tcl1}}}{\f4\fs48
\par }{\f4
\par
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 The following list describes all signals present in the GNO Multitasking Environment. These signals}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 signals}}}{\f4 are used to communicate with processes and the GNO kernel}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO kernel}}}{\f4 . }{\b\f4 gsh}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 gsh}}}{\f4 provides a means to send signals}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 signals}}}{\f4 to processes via the kill command. Furthermore, GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 provides interfaces for C and Assembly Language programmers to handle signals in their programs. Note that not all of these signals are actually used in GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 2.0.
\par }\pard \nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \fi-2160\li2880\nowidctlpar\widctlpar\adjustright {\f4\ul Name (Value)}{\f4 \tab }{\f4\ul Description
\par }\pard \fi-2160\li2880\nowidctlpar\widctlpar\adjustright {\f4
\par }{\b\f4 SIGHUP}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGHUP}}}{\f4 (1)\tab Hangup.
\par }{\b\f4 SIGINT}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGINT}}}{\f4 (2)\tab Interrupt.
\par }{\b\f4 SIGQUIT}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGQUIT}}}{\f4 (3)\tab Quit.
\par }{\b\f4 SIGILL}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGILL}}}{\f4 (4)\tab Illegal Instruction.
\par }{\b\f4 SIGTRAP}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGTRAP}}}{\f4 (5)\tab Trace trap.
\par }{\b\f4 SIGABRT}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGABRT}}}{\f4 (6)\tab Abort (cf. abort(3)).
\par }{\b\f4 SIGEMT}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGEMT}}}{\f4 (7)\tab Emulator trap.
\par }{\b\f4 SIGFPE}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGFPE}}}{\f4 (8)\tab Arithmetic exception.
\par }{\b\f4 SIGKILL}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGKILL}}}{\f4 (9)\tab Kill. This signal cannot be caught, blocked, or ignored. If a signal is not specified for the kill command, this signal is sent to the process.
\par }{\b\f4 SIGBUS}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGBUS}}}{\f4 (10)\tab Bus error.
\par }{\b\f4 SIGSEGV}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGSEGV}}}{\f4 (11)\tab Segmentation violation.
\par }{\b\f4 SIGSYS}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGSYS}}}{\f4 (12)\tab Bad argument to system call.
\par }{\b\f4 SIGPIPE}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGPIPE}}}{\f4 (13)\tab Write on a pipe or other socket with no one to read it.
\par }{\b\f4 SIGALRM}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGALRM}}}{\f4 (14)\tab Alarm clock.
\par }{\b\f4 SIGTERM}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGTERM}}}{\f4 (15)\tab Software termination signal.
\par }{\b\f4 SIGURG}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGURG}}}{\f4 (16)\tab Urgent condition present on socket.
\par }{\b\f4 SIGSTOP}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGSTOP}}}{\f4 (17)\tab Stop. This signal cannot be caught, blocked, or ignored.
\par }{\b\f4 SIGTSTP}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGTSTP}}}{\f4 (18)\tab Stop signal generated from keyboard.
\par }{\b\f4 SIGCONT}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGCONT}}}{\f4 (19)\tab Continue after stop. This signal cannot be blocked.
\par }{\b\f4 SIGCHLD}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGCHLD}}}{\f4 (20)\tab Child status has changed.
\par }{\b\f4 SIGTTIN}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGTTIN}}}{\f4 (21)\tab Background read attempted from control terminal.
\par }{\b\f4 SIGTTOU}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGTTOU}}}{\f4 (22)\tab Background write attempted to control terminal.
\par }{\b\f4 SIGIO}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGIO}}}{\f4 (23)\tab Input/Output possible signal.
\par }{\b\f4 SIGXCPU}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGXCPU}}}{\f4 (24)\tab Exceeded CPU time limit.
\par }{\b\f4 SIGUSR1}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGUSR1}}}{\f4 (30)\tab User defined signal 1.
\par }{\b\f4 SIGUSR2}{\pard\plain \fi-2160\li2880\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 SIGUSR2}}}{\f4 (31)\tab User defined signal 2.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4
\par \page \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Non-Compliant Applications\tab Appendix E
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\headerr \pard\plain \s18\qj\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Appendix E\tab Non-Compliant Applications
\par }\pard \s18\qj\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }{\chpgn
\par }}{\footerr \pard\plain \s17\qj\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\qj\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}{\footerf \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Appendix E
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4\fs48 Non-Compliant Applications}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364094788}{\*\bkmkstart _Toc364095799}Non-Compliant Applications{\*\bkmkend _Toc364094788}{\*\bkmkend _Toc364095799}\tcl1}}}{\f4
\par
\par
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 wasn't really designed with the intention of making EVERY program you currently run work under GNO/ME; that task would have been impossible. Our main goal was to provide a UNIX}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 UNIX}}}{\f4 -based multitasking environment; that we have done. We made sure as many existing applications as we had time to track and debug worked with GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 . The current list of compatible and non-compatible applications can be found in the file "RELEASE.NOTES}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 RELEASE.NOTES}}}{\f4 " on the GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 disk.
\par
\par However, due to the sheer number of applications and authors, there are some programs that just plain don't work; and some that mostly work, except for annoyances such as two cursors appearing, or keyboard characters getting 'lost'. The problem here is that some programs use their own text drivers (since TextTools}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 TextTools}}}{\f4 output was very slow at one time); since GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 doesn't know about these custom drivers, it goes on buffering keyboard characters and displaying the cursor. There is a way, however, to tell GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 about these programs that break GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 's rules.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par We've defined an auxType}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 auxType}}}{\f4 for S16}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 S16}}}{\f4 and EXE}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 EXE}}}{\f4 files, to allow distinction between programs that are GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 compliant and those that are not. Setting the auxType}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 auxType}}}{\f4 of an application to $DC00}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 $DC00}}}{\f4 disables the interrupt driven keyboard buffering and turns off the GNO/ME cursor. Desktop}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Desktop}}}{\f4 programs use the GNO/ME}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 GNO/ME}}}{\f4 keyboard I/O}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 I/O}}}{\f4 via the Event Manager}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 Event Manager}}}{\f4 , and thus should }{\i\f4 not}{\f4 have their auxType}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 auxType}}}{\f4 changed.
\par
\par You can change a program's auxType}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 auxType}}}{\f4 with the following shell command:
\par
\par }{\f6 \tab chtyp}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f6\cgrid {\xe {\v\f6 }{\f6 chtyp}}}{\f6 -a \\$DC00 filename}{\f4
\par
\par where filename is the name of the application. As more programmers become aware of GNO/ME and work to make their software compatible with it, this will become less of a problem, but for older applications that are unlikely to ever change (like the America OnLine software) $DC00 is a reasonable approach.
\par }{
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 \page \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Termcaps\tab Appendix F
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Appendix F\tab Termcaps
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\chpgn
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {
\par }}{\footerf \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {
\par }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Appendix F
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4\fs48 Termcaps}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364095800}Termcaps{\*\bkmkend _Toc364095800}\tcl1}}}{\f4
\par
\par
\par
\par 'Termcap' is short for 'terminal capability', and is the name of a database which applications can use to do full-screen output on any kind of terminal}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 terminal}}}{\f4 . The termcap}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 termcap}}}{\f4 database contains records for the various supported terminals, each of which contains fields that look like this:
\par
\par \tab }{\b\f4 cap}{\f4 =}{\b\f4 value}{\f4
\par
\par }{\b\f4 cap}{\f4 is a two-letter code that represents a cursor movement, screen mode change (such as inverse or underline mode), and various other things. }{\b\f4 Value}{\f4 is usually a sequence of control characters that is sent to a terminal to initiate the desired action. }{\b\f4 Value}{\f4 can also be 'boolean', or yes/no, values, for such things as "Does this terminal support cursor movement?". The termcap file is documented in the electronic manual entry }{\b\f4 termcap}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 termcap}}}{\f4 (5).
\par
\par The termcap library does not specifically require GNO/ME.
\par
\par The following terminal types are supported in the GNO/ME termcap file:
\par
\par }\pard \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright {\f4 \tab gnocon}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 gnocon}}}{\f4 \tab GNO Console
\par \tab CONSOLE}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 CONSOLE}}}{\f4 \tab GS/OS .console driver
\par \tab ptse}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ptse}}}{\f4 \tab Proterm Special Emulation
\par \tab vt100}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 vt100}}}{\f4 \tab DEC VT-100 terminal
\par \tab ansisys}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 ansisys}}}{\f4 \tab MS-DOS ANSI.SYS
\par \tab xerox820}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 xerox820}}}{\f4 \tab Xerox 820-II CP/M terminal
\par \tab iw1}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 iw1}}}{\f4 \tab Apple ImageWriter I printer
\par \tab iw-alt}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 iw-alt}}}{\f4 \tab Alternate ImageWriter I printer
\par \tab deskjet}{\pard\plain \qj\nowidctlpar\widctlpar\tx720\tx2880\adjustright \v\f4\cgrid {\xe {\v\f4 }{\f4 deskjet}}}{\f4 \tab Hewlett Packard DeskJet 500 printer
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4
\par The printer entries allow a formatted electronic manual page to be sent to the printer. For example, the following script would bring up the manual page for '}{\b\f4 ls}{\pard\plain \qj\nowidctlpar\widctlpar\adjustright \v\f4\cgrid {\xe {\v\f4 }{\b\f4 ls}}}{\f4 ', format it for the DeskJet 500, and print it with italics and boldface:
\par
\par set temp=$term
\par set term=deskjet
\par man $1 > .ttyb
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\f4 set term=$temp
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4 \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 \tab }{\f5 Glossary}{\f5
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Glossary\tab }{\f5
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\footerl \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\chpgn
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {
\par }}{\footerr \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {
\par }}{\footerf \pard\plain \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright \f12\cgrid {\ul \tab \tab
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {\tab \tab \chpgn
\par }\pard \s17\nowidctlpar\widctlpar\tqc\tx4320\tqr\tx10080\adjustright {
\par }}\pard\plain \qj\fi-2340\li2340\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Glossary}{\pard\plain \qj\fi-2340\li2340\nowidctlpar\widctlpar\adjustright \v\f4\fs48\cgrid {\tc {\f4\fs48 {\*\bkmkstart _Toc364095801}Glossary{\*\bkmkend _Toc364095801}\tcl1}}}{\f4\fs48
\par }\pard \qj\fi-2340\li2340\nowidctlpar\widctlpar\adjustright {\f4
\par
\par
\par }{\b\i\f4 Alias}{\f4 . \tab A name used as an abbreviation for one or more commands. An alias allows you to replace any command string with a short sequence of characters.
\par }{\b\i\f4 Applesoft}{\f4 .\tab An implementation of BASIC for the Apple II.}{\b\i\f4
\par APW}{\f4 .\tab Apple Programmer's Workshop. Similar to ORCA.
\par }{\b\i\f4 BASIC}{\f4 .\tab Beginners All-purpose Symbolic Instruction Code. A simple computer language.}{\b\i\f4\fs28
\par }{\b\i\f4 Built-in command}{\f4 .\tab A command processed by }{\b\f4 gsh}{\f4 . These commands are not external to the shell, but are included within the }{\b\f4 gsh}{\f4 program.
\par }{\b\i\f4 Command}{\f4 .\tab An action for }{\b\f4 gsh}{\f4 to perform. Commands can be either simple or compound. A simple command is an alias assignment, variable assignment, I/O redirection, or built-in command. A compound command is a pipeline.
\par }{\b\i\f4 Directory}{\f4 .\tab A special type of file that contains a list of other files; usually used to categorize files related in some way.
\par }{\b\i\f4 Environment}{\f4 .\tab The state of a process, which includes information such as its open files, current directory (working directory), and local and global variables. Three environments exist under }{\b\f4 gsh}{\f4 :
\par }{\i\f4 \tab Child environment}{\f4 :: The environment of the child process.
\par }{\i\f4 \tab Current environment}{\f4 :: The environment of the current process.
\par }{\i\f4 \tab Parent environment}{\f4 :: The environment of the parent process.
\par }{\b\i\f4 Environment file}{\f4 .\tab A file that is interpreted by an application to allow the user to customize its operation. For }{\b\f4 gsh}{\f4 , this file is "gshrc".
\par }{\b\i\f4 Export}{\f4 .\tab A way to pass a variable from a parent process to child process.
\par }{\b\i\f4 File}{\f4 .\tab An object used to store data and/or programs. On the II}{\f4\fs20 GS}{\f4 , files are tagged with types such as EXE, SRC, TXT, etc.
\par }{\b\i\f4 Filter}{\f4 .\tab A command that reads from its standard input and writes to its standard output. For example, a filter program could be written to convert all characters to upper case. Filters are used mainly in pipelines.
\par }{\b\i\f4 Flag}{\f4 .\tab A character used to represent an option to a command. Flags are either short or long options whose character representations are "-" and "+".
\par }{\b\i\f4 Glob}{\f4 .\tab Slang for Pathname Expansion.
\par }{\b\i\f4 GNO/ME}{\f4 .\tab GNO Multitasking Environment. The complete package including the GNO kernel and the GNO Shell.
\par }{\b\i\f4 GNO Kernel}{\f4 .\tab Heart of GNO/ME. Executes processes when asked by the GNO Shell
\par }{\b\i\f4 GNO Shell}{\f4 .\tab Provides an interface between the user and the GNO kernel.
\par }{\b\i\f4 gsh}{\f4 .\tab GNO Implementation of a UNIX-like shell.
\par }{\b\i\f4 GS/OS}{\f4 .\tab 16 bit Operating System for the Apple IIgs.}{\b\i\f4
\par History}{\f4 .\tab A variable number of command-lines saved by }{\b\f4 gsh}{\f4 for future reference. The number of command-lines saved is dependent on the }{\f6\fs20 $HISTORY}{\f4 environment variable.
\par }{\b\i\f4 History file}{\f4 .\tab A file containing command-lines entered while in a }{\b\f4 gsh}{\f4 session. The number of command-lines saved is dependent on the }{\f6\fs20 $SAVEHIST}{\f4 environment variable.
\par }{\b\i\f4 Interrupt}{\f4 .\tab A signal generated by a sequence of keyboard characters or by a command that terminates the current executing process, unless the process has set up a trap to handle the interrupt signal.
\par }{\b\i\f4 I/O Redirection}{\f4 .\tab The process of changing the standard input, standard output, and standard error associated with a process so that it is redirected to a file instead of the console.
\par }{\b\i\f4 Job}{\f4 .\tab A set of related processes. A job can be either:
\par }{\i\f4 \tab Background job}{\f4 :A process that executes with the current process. Background jobs are not associated with the terminal.
\par }{\i\f4 \tab Foreground job}{\f4 : A process that is currently executing and which is associated with the terminal.
\par }{\b\i\f4 Multiprocessing}{\f4 .\tab Indicates a machine with more than one CPU.
\par }{\b\i\f4 Multitasking}{\f4 .\tab The ability to run more than one program at a time, or the illusion of more than one program running at a time - usually the latter.
\par }{\b\i\f4 ORCA}{\f4 \tab Shell programing environment for the Apple //gs. Also a type of whale.
\par }{\b\i\f4 Path search}{\f4 .\tab The means of searching a pathname list for a command or script.
\par }{\b\i\f4 Pathname}{\f4 .\tab A string used to identify a file.
\par }{\i\f4 \tab Pathname completion}{\f4 . The means of generating all pathnames matching a given pattern.
\par }{\i\f4 \tab Pathname expansion}{\f4 . The means of replacing a pattern with a list of pathnames matching that pattern.
\par }{\b\i\f4 Pattern}{\f4 .\tab A string of characters used to match literal characters and/or multiple characters.
\par }{\b\i\f4 Permission}{\f4 .\tab Each file has certain permissions associated with it: destroy, rename, backup, invisible, write, and read.
\par }\pard \qj\fi-2340\li2340\nowidctlpar\widctlpar\adjustright {\b\i\f4 Pipe}{\f4 .\tab A conduit through which a stream of characters can pass from one process to another. This is accomplished by linking the standard output of one process to the standard input of a second process.
\par }\pard \qj\fi-2340\li2340\nowidctlpar\widctlpar\adjustright {\b\i\f4 Pipeline}{\f4 .\tab Two or more processes connected together by pipes.
\par }{\b\i\f4 Process}{\f4 .\tab A single thread of execution that consists of a program and an execution environment.
\par }{\i\f4 \tab Child process}{\f4 : A new process created by another process.
\par }{\i\f4 \tab Parent process}{\f4 : A process that creates a child process.
\par }{\b\i\f4 Process id}{\f4 :\tab Each active process is uniquely identified by a positive integer called the process id.
\par }{\b\i\f4 ProDOS}{\f4 .\tab 8-bit Disk Operating System for Apple II computers.
\par }{\b\i\f4 Prompt}{\f4 .\tab A message displayed by }{\b\f4 gsh}{\f4 when it is ready to receive a command.
\par }{\b\i\f4 Quoting}{\f4 .\tab A means of including special characters as arguments to a command or as the command name. Certain characters have certain meanings to }{\b\f4 gsh}{\f4 and quoting them makes }{\b\f4 gsh}{\f4 ignore them.
\par }{\b\i\f4 Reserved word}{\f4 .\tab A word that is treated specially by }{\b\f4 gsh}{\f4 . This word is part of the }{\b\f4 gsh}{\f4 grammar.
\par }{\b\i\f4 Script}{\f4 .\tab A sequence of commands contained in a file.}{\b\i\f4
\par Signal}{\f4 .\tab An asynchronous message that consists of a number or name that can be sent from one process to another.
\par }{\b\i\f4 Standard Error}{\f4 .\tab The file associated with error messages for a process. This file is usually the terminal.
\par }{\b\i\f4 Standard Input}{\f4 .\tab The file associated with a processes input. This file is usually the terminal.
\par }\pard \qj\fi-2340\li2340\nowidctlpar\widctlpar\adjustright {\b\i\f4 Standard Output}{\f4 .\tab The file associated with a processes output. This file is usually the terminal.
\par }{\b\i\f4 Tilde Expansion}{\f4 .\tab Words beginning with "}{\b\f4 ~}{\f4 " are treated specially by }{\b\f4 gsh}{\f4 . The "}{\b\f4 ~}{\f4 " is expanded to the value of the }{\f6\fs20 HOME }{\f4 variable.
\par }{\b\i\f4 UNIX}{\f4 .\tab Popular operating system which has growing use in education and business. One of the first operating systems to support multitasking.}{\b\i\f4
\par Variable}{\f4 .\tab A named location in }{\b\f4 gsh}{\f4 that contains text. The text of a variable can be expanded in a command by preceding the variable name with a dollar sign ($).
\par }{\b\i\f4 Wildcard}{\f4 .\tab See Pattern and Pathname Expansion.
\par }{\b\i\f4 Working directory}{\f4 .\tab The current directory.
\par }\pard \qj\nowidctlpar\widctlpar\adjustright {\b\f4
\par \sect }\sectd \sbknone\linex0\endnhere\titlepg\sectdefaultcl {\headerl \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 \tab }{\f5 Index}{\f5
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}{\headerr \pard\plain \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright \b\f1\ul\cgrid {\f5 Index\tab }{\f5
\par }\pard \s18\nowidctlpar\widctlpar\tqr\tx10080\adjustright {
\par }}\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 \sect }\sectd \sbknone\linex0\endnhere\titlepg\sectdefaultcl \pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 \sect }\sectd \linex0\endnhere\titlepg\sectdefaultcl \pard\plain \qj\nowidctlpar\widctlpar\adjustright \f12\cgrid {\f4\fs48 Index
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\field\fldedit{\*\fldinst {\fs24 INDEX \\h "A" \\c "2" }}{\fldrslt {\fs24\lang1024 \sect }\sectd \sbknone\linex0\cols2\endnhere\titlepg\sectdefaultcl \pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 $
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 $, 42
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 $<, 40
\par $0, 39
\par $1, 39
\par $2, 39
\par $DC00, 57
\par $ECHO, 40
\par $FIGNORE, 13, 40
\par $HISTORY, 12, 40
\par $HOME, 12, 40
\par $IGNOREEOF, 40
\par $NOBEEP, 40
\par $NODIREXEC, 40
\par $NOGLOB, 40
\par $NONEWLINE, 40
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 $PATH, 36, 40
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 $PRECMD, 41
\par $PROMPT, 41
\par $PUSHDSILENT, 41
\par $SAVEHIST, 12, 41
\par $TERM, 41
\par $TERMCAP, 41
\par $USER, 42
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 &
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 &, 20
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 .
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 .}{\lang1024 , 24
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 ..}{\lang1024 , 24
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 ;
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 ;, 20
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 \\
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 \\n, 32, 41
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 \\r, 32, 41
\par \\t, 32, 41
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 ^
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 ^C}{\lang1024 , 21
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 ^Z}{\lang1024 , 21
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 ~
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 ~}{\lang1024 , 24
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 <
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 <}{\lang1024 , 18
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 >
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 >}{\lang1024 , 18
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 >&, 18
\par >>, 18
\par >>&, 18
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 A
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 accelerator, 21
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 alias, 17, 18
\par }{\b\lang1024 alias}{\lang1024 , 35, 41
\par ansisys, 59
\par AppleShare, 51
\par argument, 24
\par auxType, 57
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 B
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 Background}{\lang1024 , 19, 20, 21, 22
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 background, 20
\par }{\b\lang1024 backward-char}{\lang1024 , 10, 29
\par }{\b\lang1024 backward-delete-char}{\lang1024 , 11, 29
\par }{\b\lang1024 backward-word}{\lang1024 , 11, 29
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 BASIC, 15
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 beginning-of-line}{\lang1024 , 11, 29, 30
\par }{\b\lang1024 bg}{\lang1024 , 22
\par bg, 33
\par bindkey, 9, 29
\par BLOCKED, 34
\par Bourne shell, 5
\par }{\b\lang1024 Built-In Commands}{\lang1024 , 9
\par built-ins, 29
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 C
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 C shell, 5
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 cat}{\lang1024 , 18, 24
\par cd, 51
\par }{\b\lang1024 cd}{\lang1024 , 30
\par }{\b\lang1024 chdir}{\lang1024 , 30
\par child process, 39
\par chtyp, 57
\par CLEAR, 11, 31
\par }{\b\lang1024 clear-screen}{\lang1024 , 10, 29
\par }{\b\lang1024 cmpl}{\lang1024 , 20, 22
\par }{\b\lang1024 coff}{\lang1024 , 16, 19
\par coff, 16
\par command arguments, 9
\par command name, 9, 17
\par command-line, 5, 9, 13, 17, 20, 21
\par command-line buffer, 17
\par command-line editor, 9, 12, 29, 30
\par }{\b\lang1024 commands}{\lang1024 , 30
\par }{\b\lang1024 complete-word}{\lang1024 , 12, 29
\par CONSOLE, 59
\par }{\b\lang1024 cp}{\lang1024 , 20, 22, 24, 39
\par CTRL-A, 11, 30
\par CTRL-B, 10
\par CTRL-D, 10, 11, 12, 13
\par CTRL-E, 11
\par CTRL-F, 10
\par CTRL-K, 30
\par CTRL-L, 10
\par CTRL-N, 12
\par CTRL-P, 12
\par CTRL-R, 10
\par CTRL-X, 11
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 D
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 DELETE, 11
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 delete-char}{\lang1024 , 11, 29
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 deskjet, 59
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 Desktop, 57
\par }{\b\lang1024 df}{\lang1024 , 31
\par }{\b\lang1024 dirs}{\lang1024 , 32
\par }{\b\lang1024 done}{\lang1024 , 21
\par DOWN-ARROW, 12
\par }{\b\lang1024 down-history}{\lang1024 , 12, 29
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 E
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 echo}{\lang1024 , 9, 18, 27, 31
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 editor, 6, 7
\par }{\b\lang1024 end-of-line}{\lang1024 , 11, 29
\par ESC, 13, 30
\par ESC-E, 13
\par ESC-Y, 30
\par Event Manager, 57
\par EXE, 7, 9, 29, 39, 40, 57
\par EXEC, 7, 9
\par }{\b\lang1024 exit}{\lang1024 , 32
\par export, 39
\par }{\i\lang1024 export}{\lang1024 , 39
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 F
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 fg}{\lang1024 , 22
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 fg, 33
\par }{\i\lang1024 filter processes}{\lang1024 , 19
\par foreground, 21, 22
\par }{\b\lang1024 forward-char}{\lang1024 , 10, 29
\par }{\b\lang1024 forward-word}{\lang1024 , 11, 29
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 G
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 globbing}{\lang1024 , 25, 40
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 GNO Installer, 5, 6, 12
\par GNO Kernel, 5, 6, 7, 20, 29, 55
\par GNO shell, 5, 6, 7, 12, 17, 20
\par GNO/ME, 5, 6, 7, 15, 18, 19, 20, 21, 55, 57
\par gnocon, 41, 59
\par }{\b\lang1024 grep}{\lang1024 , 19, 24
\par GS/OS, 18, 19
\par }{\b\lang1024 gsh}{\lang1024 , 5, 7, 9, 12, 13, 17, 18, 19, 21, 24, 25, 27, 30, 39, 55
\par }{\i\lang1024 gshrc}{\lang1024 , 5, 6, 7, 12, 13, 17, 39
\par GUI, 5
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 H
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 hash}{\lang1024 , 35
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 HFS, 26, 40
\par HISTORY, 12, 32
\par history, 40
\par history buffer, 12
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 home directory, 24
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 I
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 I/O, 57
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 insert, 11, 13
\par iw1, 59
\par iw-alt, 59
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 J
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 job}{\lang1024 , 21
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 job control}{\lang1024 , 22
\par job number, 20
\par jobs, 33
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 K
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 kern}{\lang1024 , 7
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 kernel, 21, 30
\par kill, 21, 22, 33
\par }{\b\lang1024 kill-end-of-line}{\lang1024 , 11, 29
\par }{\b\lang1024 kill-whole-line}{\lang1024 , 11, 29
\par Korn shell, 5
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 L
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 LEFT-ARROW, 10
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 less}{\lang1024 , 19
\par }{\b\lang1024 list-choices}{\lang1024 , 12, 29
\par }{\b\lang1024 login(1)}{\lang1024 , 42
\par long options, 15, 16
\par }{\b\lang1024 ls}{\lang1024 , 15, 16, 18, 21, 24, 39, 59
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 M
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 man}{\lang1024 , 15, 16, 19
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 manual pages, 15
\par }{\b\lang1024 mkdir}{\lang1024 , 24
\par modem, 19
\par }{\b\lang1024 more}{\lang1024 , 15, 19, 21, 26
\par MouseText, 39
\par }{\i\lang1024 multitasking}{\lang1024 , 20, 21, 39
\par }{\b\lang1024 mv}{\lang1024 , 39
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 N
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 NEW, 34
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 newline}{\lang1024 , 10, 30
\par }{\b\lang1024 NullProcess}{\lang1024 , 21
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 O
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 OA, 9, 13, 30
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 OA-<, 11, 30
\par OA->, 11
\par OA-CLEAR, 30
\par OA-D, 11
\par OA-E, 11, 13
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 OA-LEFT ARROW, 11
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 OA-RIGHT-ARROW, 11
\par OA-Y, 30
\par OMF, 19
\par Open Apple, 9
\par option arguments, 15
\par ORCA, 6, 7, 17, 18
\par ORCA shell, 5, 19
\par overstrike, 11
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 P
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 paging, 19
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 parameters, 9
\par parent process, 39
\par PATH, 7, 27
\par path delimiter, 7
\par pathname separator, 7
\par PAUSED, 34
\par performance, 21
\par }{\b\lang1024 pipeline}{\lang1024 , 19
\par }{\b\lang1024 popd}{\lang1024 , 32, 41
\par pre-emptive multitasking, 20
\par }{\b\lang1024 prefix}{\lang1024 , 35
\par printer, 19
\par process, 21
\par process ID, 20
\par ProDOS, 15, 26
\par prompt, 7
\par }{\b\lang1024 ps}{\lang1024 , 20, 21, 22, 34
\par ptse, 59
\par }{\b\lang1024 pushd}{\lang1024 , 32, 41
\par }{\b\lang1024 pwd}{\lang1024 , 32
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 Q
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\lang1024 qtime}{\lang1024 , 9
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 quote, 42
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 R
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 raw-char, 30
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 READY, 34
\par redirect, 18
\par redirection, 18
\par redirection operators, 18
\par redisplay, 30
\par }{\b\lang1024 redraw}{\lang1024 , 10
\par regular expressions, 25
\par }{\b\lang1024 rehash}{\lang1024 , 27, 36
\par RELEASE.NOTES, 57
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 Remote Access, 13
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 RETURN, 10
\par RIGHT-ARROW, 10
\par }{\b\lang1024 running}{\lang1024 , 21, 34
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 S
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 S16, 57
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 SAVEHIST, 12
\par script, 13, 27, 33
\par serial port, 19
\par }{\b\lang1024 set}{\lang1024 , 36, 42
\par }{\b\lang1024 setdebug}{\lang1024 , 34
\par }{\b\lang1024 setenv}{\lang1024 , 36
\par shell script, 39
\par short options, 15, 16
\par }{\b\lang1024 SIGABRT}{\lang1024 , 55
\par }{\b\lang1024 SIGALRM}{\lang1024 , 55
\par }{\b\lang1024 SIGBUS}{\lang1024 , 55
\par }{\b\lang1024 SIGCHLD}{\lang1024 , 55
\par }{\b\lang1024 SIGCONT}{\lang1024 , 55
\par }{\b\lang1024 SIGEMT}{\lang1024 , 55
\par }{\b\lang1024 SIGFPE}{\lang1024 , 55
\par }{\b\lang1024 SIGHUP}{\lang1024 , 55
\par }{\b\lang1024 SIGILL}{\lang1024 , 55
\par }{\b\lang1024 SIGINT}{\lang1024 , 55
\par }{\b\lang1024 SIGIO}{\lang1024 , 55
\par }{\b\lang1024 SIGKILL}{\lang1024 , 55
\par SIGNAL, 29, 33
\par signals, 55
\par }{\b\lang1024 SIGPIPE}{\lang1024 , 55
\par }{\b\lang1024 SIGQUIT}{\lang1024 , 55
\par }{\b\lang1024 SIGSEGV}{\lang1024 , 55
\par }{\b\lang1024 SIGSTOP}{\lang1024 , 55
\par }{\b\lang1024 SIGSYS}{\lang1024 , 55
\par }{\b\lang1024 SIGTERM}{\lang1024 , 55
\par }{\b\lang1024 SIGTRAP}{\lang1024 , 55
\par }{\b\lang1024 SIGTSTP}{\lang1024 , 55
\par }{\b\lang1024 SIGTTIN}{\lang1024 , 55
\par }{\b\lang1024 SIGTTOU}{\lang1024 , 55
\par }{\b\lang1024 SIGURG}{\lang1024 , 55
\par }{\b\lang1024 SIGUSR1}{\lang1024 , 55
\par }{\b\lang1024 SIGUSR2}{\lang1024 , 55
\par }{\b\lang1024 SIGXCPU}{\lang1024 , 55
\par }{\b\lang1024 source}{\lang1024 , 7, 33
\par }{\i\lang1024 standard error}{\lang1024 , 18, 21
\par }{\i\lang1024 standard input}{\lang1024 , 18, 40
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\i\lang1024 standard output}{\lang1024 , 18, 21
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 stop, 21, 22
\par }{\b\lang1024 stop}{\lang1024 , 35
\par }{\b\lang1024 stopped}{\lang1024 , 21
\par storage device, 19
\par SUSPENDED, 34
\par SYS16, 7, 9, 40
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 T
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 TAB, 12
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 TERM, 39
\par termcap, 59
\par }{\i\lang1024 termcap}{\lang1024 , 41
\par terminal, 19, 59
\par terminal emulation, 41
\par TextTools, 57
\par tilde, 24
\par }{\b\lang1024 toggle-cursor}{\lang1024 , 11, 30
\par }{\b\lang1024 tset}{\lang1024 , 33, 41
\par }{\b\lang1024 ttya}{\lang1024 , 19
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 U
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 unalias, 18
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 unalias}{\lang1024 , 36
\par undefined-char, 30
\par }{\b\lang1024 unhash}{\lang1024 , 36
\par UNIX, 7, 16, 40, 57
\par unset, 42
\par UP-ARROW, 12
\par }{\b\lang1024 up-history}{\lang1024 , 12, 30
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 V
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 variables, 5, 42
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\b\lang1024 variables}{\lang1024 , 39
\par }{\b\lang1024 vi}{\lang1024 , 6
\par vt100, 59
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 W
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 WAITING, 34
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\lang1024 WAITSIGCH, 34
\par }{\b\lang1024 which}{\lang1024 , 33
\par wildcards, 25
\par }{\i\lang1024 word}{\lang1024 , 9
\par }\pard\plain \s28\li140\sb240\sa120\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\cgrid {\b0\f0\lang1024 X
\par }\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\lang1024 xerox820, 59
\par }\pard \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright {\fs24\lang1024 \sect }\sectd \sbknone\linex0\endnhere\titlepg\sectdefaultcl \pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid }}\pard\plain \s19\fi-240\li240\nowidctlpar\widctlpar\tqr\tx4680\adjustright \fs20\cgrid {\b\f4
\par }}