This Frequently Asked Questions file is edited in -*- indented-text -*- mode.

If you are viewing this text in a GNU Emacs Buffer, you can type "M-2 C-x $" to
get an overview of just the questions.  Then, when you want to look at the text
of the answers, just type "C-x $".

To search for a question numbered XXX, type "M-C-s ^XXX:", followed by a C-r if
that doesn't work, then type ESC to end the search.

1: How do I convert all of my Csh aliases over to Bash aliases?
  Bash uses a different syntax to support aliases than Csh does.  The
  details can be found in the documentation.  We have provided a shell
  script which does most of the work of conversion for you; this
  script can be found in ./examples/alias-conv.sh.  Here is how you
  use it:
  
      Start Csh in the normal way for you.  (e.g., "csh")
  
      Pipe the output of "alias" through "alias-conv.sh", saving the
      results into "bash_aliases":
  
        alias | alias-conv.sh >.bash_aliases
  
      Edit "bash_aliases" carefully reading through any created
      functions.  You will need to change the names of Csh specific
      variables (like $cwd) to the Bash equivalents (like $PWD).  You
      will also need to remove recursive references to commands which
      are defined as functions.  For example, the Csh alias:
  
	alias cd 'cd \!*;echo $cwd'
  
      is converted to the Bash function:
  
	cd () 
	{ 
	  cd $*;
	  echo $cwd
	}
  
      This function contains a self-pointing reference to "cd", which
      should be changed to use the "builtin" version.  It also uses
      the Csh variable `$cwd' which has an equivalent in Bash.
      Precede the recursive reference with the word "builtin", and
      change the name of the variable:
  
        cd () { builtin cd $*; echo $PWD }
  
      Merge the edited file into your ~/.bashrc.
  
2: Background jobs have staggered output, as if there was no CR before the LF.
  This is a result of bash using the BSD-style tty driver on Ultrix.  The BSD
  driver ties input and output carriage return translation together with the
  CRMOD bit.  (The CRMOD bit causes CR->LF translation on input and LF->CRLF
  translation on output.)  Unless the CRMOD bit is cleared, it is impossible
  to get a literal ^M in an input line.  Unfortunately, one of the effects of
  clearing it is the loss of output processing you've observed. 
  
  The Ultrix Posix-style tty driver can't be used because it has serious
  problems with losing typeahead when ICANON is switched on and off.  These
  characters seem to reappear later without warning, usually when a
  program that uses the BSD-style ioctls turns on CBREAK (e.g., `more').
  
3: Bash's "test" different from "/bin/test"? ([ ! x -o x ] -> false)
   Bash's builtin "test" implements the Posix.2 spec, which can be
   summarized as follows (the wording is due to David Korn):
   
    Here is the set of rules for processing test arguments.
  
    0 Args: False
    1 Arg:  True iff argument is not null.
    2 Args: If first arg is !, True iff second argument is null.
	    If first argument is unary, then true if unary test is true
	    Otherwise error.
    3 Args: If second argument is a binary operator, do binary test of $1 $3
	    If first argument is !, negate two argument test of $2 $3
	    Otherwise error.
    4 Args: If first argument is !, negate three argument test of $2 $3 $4.
	    Otherwise unspecified
    5 or more Args: unspecified.  (Historical shells would used their
    current algorithm).
   
    The operators -a and -o are considered binary operators for the purpose
    of the 3 Arg case.
   
   As you can see, the test becomes (not (x or x)), which is false.
   
4: Completion listings can differ from `ls' in the number of columns output.
  This can happen because `ls' calls stat () on every file before
  listing the output, while GNU Readline only calls stat () on the
  files when they are being printed.  This means that `ls' knows how
  many characters will be added to each filename in advance, and can
  accurately calculate the maximum length, while Bash must assume that
  each filename will have characters added to it.
  
5: Bash crashes when I do "cd".
  If you have `cd' defined as a function, it is likely that the
  function is recursively calling itself.  See the answer to question
  1 above.
  
6: Why does Bash sometimes say "Broken pipe"?
  If a sequence of commands appear in a pipeline, and one of the
  reading commands finishes before the writer has finished, the writer
  receives a SIGPIPE signal.  Many other shells special-case SIGPIPE as
  an exit status in the pipeline and do not report it.  For example,
  in:
  
      ps -aux | head
  
  `head' can finish before `ps' writes all of its output.  In that case,
  Bash will print `Broken pipe' to stderr on behalf of the `ps'
  command.
  
7: How can I use `!' to reinvoke a command starting with a digit?
  If you had issued a command such as `8086engine foo', and then at a
  later time wished to reinvoke the command, typing `!80' would probably
  not work since Bash would think you meant the 80'th command in the
  history, not the command starting with `80'.  You can type `!?80',
  which says to re-execute the most recent command containing `80'.

Questions About Input Line Editing:

1: What do things like this mean: C-h, M-C-a, RET, etc.?
  
  C-a means press the "a" key while holding down the "Control" key.  The
  ASCII code this sends will generally be the value that would be sent by
  pressing just "a" minus 96 or 64.  Either way it will be a number from 0
  to 31.
  
  M-a means press the "a" key while holding down the "Meta" key.  The
  ASCII code this sends is the sum of the ASCII code that would be sent by
  pressing just "a" and 128.
  
  M-C-a means press the "a" key while holding down both the "Control" key
  and the "Meta" key.  C-M-a is a synonym for M-C-a.
  
  * RET means press the "Return" key.  RET is the same as C-m.  This sends
    ASCII code 13.
  
  * LFD means press the "Linefeed" key.  LFD is also the same as C-j.  This
    sends ASCII code 10.  Under Unix, ASCII code 10 is more often called
    "Newline".
  
  * DEL means press the "Delete" key.  DEL is the same as C-?.  This sends
    ASCII code 127.  (WARNING: It is a misnomer to call C-? a "control" key,
    since 127 has both bits 6 and 7 turned ON, and the rule for control keys
    is that they have 6 and 7 turned OFF.  Also, on very few keyboards does
    Control-? generate ASCII code 127.  In fact, Control-? (which is
    actually Control-Shift-/) is more likely to generate C-_, ASCII code
    31!)
  
  * ESC means press the "Escape" key.  ESC is the same as C-[.  This sends
    ASCII code 27.
  
  * SPC means press the "Space" key.  This send ASCII code 32.
  
  * TAB means press the "Tab" key.  TAB is the same as C-i.  This send ASCII
    code 9.
  
  For C-@ and C-^, usually you don't have to hold down the shift key and you
  can type Control-2 or Control-6 instead.  For C-_, you may have to hold
  down the shift key, typing Control-Shift-Hyphen.  C-@ can often be
  generated by typing Control-Space.  C-@ is often called the NUL character,
  and has ASCII value 0.  C-_ can often be generated by typing Control-7 or 
  Control-/.  Try Control with all of the digits on your keyboard to see
  what gets generated.
  
  To read more about this online, type "C-h i m emacs RET m characters
  RET", and also "C-h i m emacs RET m keys RET".
  
2: What do you mean when you write things like this: type "ESC a"?
  
  I will enclose key sequences that are longer than one key inside double
  quotes.  These notations refer to single key strokes (some with
  modifiers):
  
    C-x, M-x, M-C-x
    RET, LFD, DEL, ESC, SPC, TAB
  
  I separate these from other keys within double quotes by spaces.  Any
  real spaces that I write inside double quotes can be ignored, only SPC
  means press the space key.  All other characters within double quotes
  represent single keys (some shifted).
  
3: What if I don't have a Meta key?
  
  Instead of typing M-a, you can type "ESC a" instead.  In fact, Emacs
  converts M-a internally into "ESC a" anyway (depending on the value of
  meta-prefix-char).
  
4: What if I don't have an Escape key?
  
  Type C-[ instead.  This should send ASCII code 27 just like an Escape
  key would.
  
5: What does "M-x command" mean?
  
  "M-x command" means type M-x, then type the name of the command, then


Local Variables:
eval: (set-selective-display 2)
End:
