diff options
author | Jim Meyering <jim@meyering.net> | 2001-06-16 14:28:07 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2001-06-16 14:28:07 +0000 |
commit | da4170a71f3d14a677524e8a62aa5efd208a44ab (patch) | |
tree | acb95f31ffd12d8a174baa27b02900e3532cccc7 /doc | |
parent | 01c0d9e91cffffd17fce0363c98281c25d83ee81 (diff) | |
download | coreutils-da4170a71f3d14a677524e8a62aa5efd208a44ab.tar.xz |
.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/sh-utils.texi | 3383 |
1 files changed, 0 insertions, 3383 deletions
diff --git a/doc/sh-utils.texi b/doc/sh-utils.texi deleted file mode 100644 index 08d528aca..000000000 --- a/doc/sh-utils.texi +++ /dev/null @@ -1,3383 +0,0 @@ -\input texinfo -@c %**start of header -@setfilename sh-utils.info -@settitle GNU shell utilities -@c %**end of header - -@include version.texi - -@c Define new indices for file names and options. -@defcodeindex fl -@defcodeindex op - -@c Put everything in one index (arbitrarily chosen to be the concept index). -@syncodeindex fl cp -@syncodeindex fn cp -@syncodeindex ky cp -@syncodeindex op cp -@syncodeindex pg cp -@syncodeindex vr cp - -@set Francois Fran@,{c}ois - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Shell utilities: (sh-utils). GNU shell utilities. -* basename: (sh-utils)basename invocation. Strip directory and suffix. -* chroot: (sh-utils)chroot invocation. Specify the root directory. -* date: (sh-utils)date invocation. Print/set system date and time. -* dirname: (sh-utils)dirname invocation. Strip non-directory suffix. -* echo: (sh-utils)echo invocation. Print a line of text. -* env: (sh-utils)env invocation. Modify the environment. -* expr: (sh-utils)expr invocation. Evaluate expressions. -* factor: (sh-utils)factor invocation. Print prime factors -* false: (sh-utils)false invocation. Do nothing, unsuccessfully. -* groups: (sh-utils)groups invocation. Print group names a user is in. -* hostid: (sh-utils)hostid invocation. Print numeric host identifier. -* hostname: (sh-utils)hostname invocation. Print or set system name. -* id: (sh-utils)id invocation. Print real/effective uid/gid. -* logname: (sh-utils)logname invocation. Print current login name. -* nice: (sh-utils)nice invocation. Modify scheduling priority. -* nohup: (sh-utils)nohup invocation. Immunize to hangups. -* pathchk: (sh-utils)pathchk invocation. Check file name portability. -* printenv: (sh-utils)printenv invocation. Print environment variables. -* printf: (sh-utils)printf invocation. Format and print data. -* pwd: (sh-utils)pwd invocation. Print working directory. -* seq: (sh-utils)seq invocation. Print numeric sequences -* sleep: (sh-utils)sleep invocation. Delay for a specified time. -* stty: (sh-utils)stty invocation. Print/change terminal settings. -* su: (sh-utils)su invocation. Modify user and group id. -* tee: (sh-utils)tee invocation. Redirect to multiple files. -* test: (sh-utils)test invocation. File/string tests. -* true: (sh-utils)true invocation. Do nothing, successfully. -* tty: (sh-utils)tty invocation. Print terminal name. -* uname: (sh-utils)uname invocation. Print system information. -* users: (sh-utils)users invocation. Print current user names. -* who: (sh-utils)who invocation. Print who is logged in. -* whoami: (sh-utils)whoami invocation. Print effective user id. -* yes: (sh-utils)yes invocation. Print a string indefinitely. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@ifinfo -This file documents the GNU shell utilities. - -Copyright (C) 1994, 1995, 1996, 2000 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. -@end ifinfo - -@titlepage -@title GNU @code{sh-utils} -@subtitle A set of shell utilities -@subtitle for version @value{VERSION}, @value{UPDATED} -@author David MacKenzie et al. - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 1994, 1995, 1996, 2000 Free Software Foundation, Inc. - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. -@end titlepage - - -@ifnottex -@node Top -@top GNU shell utilities - -@cindex shell utilities -@cindex utilities for shell programming - -This manual documents version @value{VERSION} of the GNU shell utilities. - -@menu -* Introduction:: Caveats, overview, and authors. -* Common options:: Common options. - -* Date input formats:: Specifying date strings. -* Printing text:: echo printf yes -* Conditions:: false true test expr -* Redirection:: tee -* File name manipulation:: dirname basename pathchk -* Working context:: pwd stty printenv tty -* User information:: id logname whoami groups users who -* System context:: date uname hostname -* Modified command invocation:: chroot env nice nohup su -* Delaying:: sleep -* Numeric operations:: factor seq - -* Index:: General index. -@end menu -@end ifnottex - - -@node Introduction -@chapter Introduction - -@cindex introduction - -First of all, this manual is incomplete. The @code{stty} section, in -particular, needs substantial reorganization and additional explanatory -text before it will be up to the standard of other GNU manuals. -Explanatory text in general is lacking; the manual presently assumes you -pretty much know what to do, and just need to be reminded of how. Thus, -if you are interested, please get involved in improving this manual. -The entire GNU community will benefit. - -Some of these programs are useful only when writing shell scripts; -utilities like these are, in fact, the ``language'' of shell scripts (to -a great extent). Others are occasionally useful interactively. - -@cindex POSIX.2 -The GNU shell utilities are mostly compatible with the POSIX.2 standard. - -@c This paragraph appears in all of fileutils.texi, textutils.texi, and -@c sh-utils.texi too -- so be sure to keep them consistent. -@cindex bugs, reporting -Please report bugs to @samp{bug-sh-utils@@gnu.org}. Remember -to include the version number, machine architecture, input files, and -any other information needed to reproduce the bug: your input, what you -expected, what you got, and why it is wrong. Diffs are welcome, but -please include a description of the problem as well, since this is -sometimes difficult to infer. @xref{Bugs, , , gcc, GNU CC}. - -@cindex history -@cindex MacKenzie, David -@cindex Meyering, Jim -@c Sorry, but the @value trick doesn't work with TeX in indexing -@c commands, and I don't want to fix it right now. --karl. -@cindex Pinard, @value{Francois} -@cindex Berry, Karl -@cindex Stallman, Richard -This manual was originally derived from the Unix man pages in the -distribution, which were written by David MacKenzie and updated by Jim -Meyering. What you are reading now is the authoritative documentation -for these utilities; the man pages are no longer being maintained. -@value{Francois} Pinard did the initial conversion to Texinfo format. -Karl Berry did the indexing, some reorganization, and editing of the results. -Richard Stallman contributed his usual invaluable insights to the -overall process. - - -@node Common options -@chapter Common options - -@cindex common options - -Certain options are available in all these programs. Rather than -writing identical descriptions for each of the programs, they are -described here. (In fact, every GNU program accepts (or should accept) -these options.) - -Many of these programs take arbitrary strings as arguments. In those -cases, @samp{--help} and @samp{--version} are taken as these options -only if there is one and exactly one command line argument. - -@table @samp - -@item --help -@opindex --help -@cindex help, online -Print a usage message listing all available options, then exit successfully. - -@item --version -@opindex --version -@cindex version number, finding -Print the version number, then exit successfully. - -@end table - - -@include getdate.texi - - -@node Printing text -@chapter Printing text - -@cindex printing text, commands for -@cindex commands for printing text - -This section describes commands that display text strings. - -@menu -* echo invocation:: Print a line of text. -* printf invocation:: Format and print data. -* yes invocation:: Print a string until interrupted. -@end menu - - -@node echo invocation -@section @code{echo}: Print a line of text - -@pindex echo -@cindex displaying text -@cindex printing text -@cindex text, displaying -@cindex arbitrary text, displaying - -@code{echo} writes each given @var{string} to standard output, with a -space between each and a newline after the last one. Synopsis: - -@example -echo [@var{option}]@dots{} [@var{string}]@dots{} -@end example - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp -@item -n -@opindex -n -Do not output the trailing newline. - -@item -e -@opindex -e -@cindex backslash escapes -Enable interpretation of the following backslash-escaped characters in -each @var{string}: - -@table @samp -@item \a -alert (bell) -@item \b -backspace -@item \c -suppress trailing newline -@item \f -form feed -@item \n -new line -@item \r -carriage return -@item \t -horizontal tab -@item \v -vertical tab -@item \\ -backslash -@item \@var{nnn} -the character whose ASCII code is @var{nnn} (octal); if @var{nnn} is not -a valid octal number, it is printed literally. -@end table - -@end table - - -@node printf invocation -@section @code{printf}: Format and print data - -@pindex printf -@code{printf} does formatted printing of text. Synopsis: - -@example -printf @var{format} [@var{argument}]@dots{} -@end example - -@code{printf} prints the @var{format} string, interpreting @samp{%} -directives and @samp{\} escapes in the same way as the C @code{printf} -function. The @var{format} argument is re-used as necessary to convert -all of the given @var{argument}s. - -@code{printf} has one additional directive, @samp{%b}, which prints its -argument string with @samp{\} escapes interpreted in the same way as in -the @var{format} string. - -@kindex \0ooo -@kindex \0xhhh -@code{printf} interprets @samp{\0ooo} in @var{format} as an octal number -(if @var{ooo} is 0 to 3 octal digits) specifying a character to print, -and @samp{\xhhh} as a hexadecimal number (if @var{hhh} is 1 to 3 hex -digits) specifying a character to print. - -@kindex \uhhhh -@kindex \Uhhhhhhhh -@code{printf} interprets two character syntaxes introduced in ISO C 99: -@samp{\u} for 16-bit Unicode characters, specified as 4 hex digits -@var{hhhh}, and @samp{\U} for 32-bit Unicode characters, specified as 8 hex -digits @var{hhhhhhhh}. @code{printf} outputs the Unicode characters -according to the LC_CTYPE part of the current locale, i.e. depending -on the values of the environment variables @code{LC_ALL}, @code{LC_CTYPE}, -@code{LANG}. - -The processing of @samp{\u} and @samp{\U} requires a full-featured -@code{iconv} facility. It is activated on systems with glibc 2.2 (or newer), -or when @code{libiconv} is installed prior to the sh-utils. Otherwise the -use of @samp{\u} and @samp{\U} will give an error message. - -@kindex \c -An additional escape, @samp{\c}, causes @code{printf} to produce no -further output. - -The only options are a lone @samp{--help} or -@samp{--version}. @xref{Common options}. - -The Unicode character syntaxes are useful for writing strings in a locale -independent way. For example, a string containing the Euro currency symbol - -@example -$ /usr/local/bin/printf '\u20AC 14.95' -@end example - -@noindent -will be output correctly in all locales supporting the Euro symbol -(ISO-8859-15, UTF-8, and others). Similarly, a Chinese string - -@example -$ /usr/local/bin/printf '\u4e2d\u6587' -@end example - -@noindent -will be output correctly in all Chinese locales (GB2312, BIG5, UTF-8, etc). - -Note that in these examples, the full pathname of @code{printf} has been -given, to distinguish it from the GNU @code{bash} builtin function -@code{printf}. - -For larger strings, you don't need to look up the hexadecimal code -values of each character one by one. ASCII characters mixed with \u -escape sequences is also known as the JAVA source file encoding. You can -use GNU recode 3.5c (or newer) to convert strings to this encoding. Here -is how to convert a piece of text into a shell script which will output -this text in a locale-independent way: - -@smallexample -$ LC_CTYPE=zh_CN.big5 /usr/local/bin/printf \ - '\u4e2d\u6587\n' > sample.txt -$ recode BIG5..JAVA < sample.txt \ - | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \ - > sample.sh -@end smallexample - - -@node yes invocation -@section @code{yes}: Print a string until interrupted - -@pindex yes -@cindex repeated output of a string - -@code{yes} prints the command line arguments, separated by spaces and -followed by a newline, forever until it is killed. If no arguments are -given, it prints @samp{y} followed by a newline forever until killed. - -The only options are a lone @samp{--help} or @samp{--version}. -@xref{Common options}. - - -@node Conditions -@chapter Conditions - -@cindex conditions -@cindex commands for exit status -@cindex exit status commands - -This section describes commands that are primarily useful for their exit -status, rather than their output. Thus, they are often used as the -condition of shell @code{if} statements, or as the last command in a -pipeline. - -@menu -* false invocation:: Do nothing, unsuccessfully. -* true invocation:: Do nothing, successfully. -* test invocation:: Check file types and compare values. -* expr invocation:: Evaluate expressions. -@end menu - - -@node false invocation -@section @code{false}: Do nothing, unsuccessfully - -@pindex false -@cindex do nothing, unsuccessfully -@cindex failure exit status -@cindex exit status of @code{false} - -@code{false} does nothing except return an exit status of 1, meaning -@dfn{failure}. It can be used as a place holder in shell scripts -where an unsuccessful command is needed. - -By default, @code{false} honors the @samp{--help} and @samp{--version} -options. However, that is contrary to @sc{POSIX}, so when the environment -variable @env{POSIXLY_CORRECT} is set, @code{false} ignores @emph{all} -command line arguments, including @samp{--help} and @samp{--version}. - -This version of @code{false} is implemented as a C program, and is thus -more secure and faster than a shell script implementation, and may safely -be used as a dummy shell for the purpose of disabling accounts. - - -@node true invocation -@section @code{true}: Do nothing, successfully - -@pindex true -@cindex do nothing, successfully -@cindex no-op -@cindex successful exit -@cindex exit status of @code{true} - -@code{true} does nothing except return an exit status of 0, meaning -@dfn{success}. It can be used as a place holder in shell scripts -where a successful command is needed, although the shell built-in -command @code{:} (colon) may do the same thing faster. -In most modern shells, @code{true} is built-in command, so when -you use @samp{true} in a script, you're probably using the built-in -command, not the one documented here. - -By default, @code{true} honors the @samp{--help} and @samp{--version} -options. However, that is contrary to @sc{POSIX}, so when the environment -variable @env{POSIXLY_CORRECT} is set, @code{true} ignores @emph{all} -command line arguments, including @samp{--help} and @samp{--version}. - -This version of @code{true} is implemented as a C program, and is thus -more secure and faster than a shell script implementation, and may safely -be used as a dummy shell for the purpose of disabling accounts. - - -@node test invocation -@section @code{test}: Check file types and compare values - -@pindex test -@cindex check file types -@cindex compare values -@cindex expression evaluation - -@code{test} returns a status of 0 (true) or 1 (false) depending on the -evaluation of the conditional expression @var{expr}. Each part of the -expression must be a separate argument. - -@code{test} has file status checks, string operators, and numeric -comparison operators. - -@cindex conflicts with shell built-ins -@cindex built-in shell commands, conflicts with -Because most shells have a built-in command by the same name, using the -unadorned command name in a script or interactively may get you -different functionality than that described here. - -Besides the options below, @code{test} accepts a lone @samp{--help} or -@samp{--version}. @xref{Common options}. A single non-option argument -is also allowed: @code{test} returns true if the argument is not null. - -@menu -* File type tests:: -[bcdfhLpSt] -* Access permission tests:: -[gkruwxOG] -* File characteristics tests:: -e -s -nt -ot -ef -* String tests:: -z -n = != -* Numeric tests:: -eq -ne -lt -le -gt -ge -* Connectives for test:: ! -a -o -@end menu - - -@node File type tests -@subsection File type tests - -@cindex file type tests - -These options test for particular types of files. (Everything's a file, -but not all files are the same!) - -@table @samp - -@item -b @var{file} -@opindex -b -@cindex block special check -True if @var{file} exists and is a block special device. - -@item -c @var{file} -@opindex -c -@cindex character special check -True if @var{file} exists and is a character special device. - -@item -d @var{file} -@opindex -d -@cindex directory check -True if @var{file} exists and is a directory. - -@item -f @var{file} -@opindex -f -@cindex regular file check -True if @var{file} exists and is a regular file. - -@item -h @var{file} -@itemx -L @var{file} -@opindex -L -@opindex -h -@cindex symbolic link check -True if @var{file} exists and is a symbolic link. - -@item -p @var{file} -@opindex -p -@cindex named pipe check -True if @var{file} exists and is a named pipe. - -@item -S @var{file} -@opindex -S -@cindex socket check -True if @var{file} exists and is a socket. - -@item -t [@var{fd}] -@opindex -t -@cindex terminal check -True if @var{fd} is opened on a terminal. If @var{fd} is omitted, it -defaults to 1 (standard output). - -@end table - - -@node Access permission tests -@subsection Access permission tests - -@cindex access permission tests -@cindex permission tests - -These options test for particular access permissions. - -@table @samp - -@item -g @var{file} -@opindex -g -@cindex set-group-id check -True if @var{file} exists and has its set-group-id bit set. - -@item -k @var{file} -@opindex -k -@cindex sticky bit check -True if @var{file} has its @dfn{sticky} bit set. - -@item -r @var{file} -@opindex -r -@cindex readable file check -True if @var{file} exists and is readable. - -@item -u @var{file} -@opindex -u -@cindex set-user-id check -True if @var{file} exists and has its set-user-id bit set. - -@item -w @var{file} -@opindex -w -@cindex writable file check -True if @var{file} exists and is writable. - -@item -x @var{file} -@opindex -x -@cindex executable file check -True if @var{file} exists and is executable. - -@item -O @var{file} -@opindex -O -@cindex owned by effective uid check -True if @var{file} exists and is owned by the current effective user id. - -@item -G @var{file} -@opindex -G -@cindex owned by effective gid check -True if @var{file} exists and is owned by the current effective group id. - -@end table - -@node File characteristics tests -@subsection File characteristics tests - -@cindex file characteristics tests - -These options test other file characteristics. - -@table @samp - -@item -e @var{file} -@opindex -e -@cindex existence-of-file check -True if @var{file} exists. - -@item -s @var{file} -@opindex -s -@cindex nonempty file check -True if @var{file} exists and has a size greater than zero. - -@item @var{file1} -nt @var{file2} -@opindex -nt -@cindex newer-than file check -True if @var{file1} is newer (according to modification date) than -@var{file2}. - -@item @var{file1} -ot @var{file2} -@opindex -ot -@cindex older-than file check -True if @var{file1} is older (according to modification date) than -@var{file2}. - -@item @var{file1} -ef @var{file2} -@opindex -ef -@cindex same file check -@cindex hard link check -True if @var{file1} and @var{file2} have the same device and inode -numbers, i.e., if they are hard links to each other. - -@end table - - -@node String tests -@subsection String tests - -@cindex string tests - -These options test string characteristics. Strings are not quoted for -@code{test}, though you may need to quote them to protect characters -with special meaning to the shell, e.g., spaces. - -@table @samp - -@item -z @var{string} -@opindex -z -@cindex zero-length string check -True if the length of @var{string} is zero. - -@item -n @var{string} -@itemx @var{string} -@opindex -n -@cindex nonzero-length string check -True if the length of @var{string} is nonzero. - -@item @var{string1} = @var{string2} -@opindex = -@cindex equal string check -True if the strings are equal. - -@item @var{string1} != @var{string2} -@opindex != -@cindex not-equal string check -True if the strings are not equal. - -@end table - - -@node Numeric tests -@subsection Numeric tests - -@cindex numeric tests -@cindex arithmetic tests - -Numeric relationals. The arguments must be entirely numeric (possibly -negative), or the special expression @w{@code{-l @var{string}}}, which -evaluates to the length of @var{string}. - -@table @samp - -@item @var{arg1} -eq @var{arg2} -@itemx @var{arg1} -ne @var{arg2} -@itemx @var{arg1} -lt @var{arg2} -@itemx @var{arg1} -le @var{arg2} -@itemx @var{arg1} -gt @var{arg2} -@itemx @var{arg1} -ge @var{arg2} -@opindex -eq -@opindex -ne -@opindex -lt -@opindex -le -@opindex -gt -@opindex -ge -These arithmetic binary operators return true if @var{arg1} is equal, -not-equal, less-than, less-than-or-equal, greater-than, or -greater-than-or-equal than @var{arg2}, respectively. - -@end table - -For example: - -@example -test -1 -gt -2 && echo yes -@result{} yes -test -l abc -gt 1 && echo yes -@result{} yes -test 0x100 -eq 1 -@error{} test: integer expression expected before -eq -@end example - - -@node Connectives for test -@subsection Connectives for @code{test} - -@cindex logical connectives -@cindex connectives, logical - -The usual logical connectives. - -@table @samp - -@item ! @var{expr} -@opindex ! -True if @var{expr} is false. - -@item @var{expr1} -a @var{expr2} -@opindex -a -@cindex logical and operator -@cindex and operator -True if both @var{expr1} and @var{expr2} are true. - -@item @var{expr1} -o @var{expr2} -@opindex -o -@cindex logical or operator -@cindex or operator -True if either @var{expr1} or @var{expr2} is true. - -@end table - - -@node expr invocation -@section @code{expr}: Evaluate expressions - -@pindex expr -@cindex expression evaluation -@cindex evaluation of expressions - -@code{expr} evaluates an expression and writes the result on standard -output. Each token of the expression must be a separate argument. - -Operands are either numbers or strings. @code{expr} converts -anything appearing in an operand position to an integer or a string -depending on the operation being applied to it. - -Strings are not quoted for @code{expr} itself, though you may need to -quote them to protect characters with special meaning to the shell, -e.g., spaces. - -@cindex parentheses for grouping -Operators may given as infix symbols or prefix keywords. Parentheses -may be used for grouping in the usual manner (you must quote parentheses -to avoid the shell evaluating them, however). - -@cindex exit status of @code{expr} -Exit status: - -@display -0 if the expression is neither null nor 0, -1 if the expression is null or 0, -2 for invalid expressions. -@end display - -@menu -* String expressions:: <colon> match substr index length quote -* Numeric expressions:: + - * / % -* Relations for expr:: | & < <= = == != >= > -* Examples of expr:: Examples. -@end menu - - -@node String expressions -@subsection String expressions - -@cindex string expressions -@cindex expressions, string - -@code{expr} supports pattern matching and other string operators. These -have lower precedence than both the numeric and relational operators (in -the next sections). - -@table @samp - -@item @var{string} : @var{regex} -@cindex pattern matching -@cindex regular expression matching -@cindex matching patterns -Perform pattern matching. The arguments are converted to strings and the -second is considered to be a (basic, a la GNU @code{grep}) regular -expression, with a @code{^} implicitly prepended. The first argument is -then matched against this regular expression. - -If the match succeeds and @var{regex} uses @samp{\(} and @samp{\)}, the -@code{:} expression returns the part of @var{string} that matched the -subexpression; otherwise, it returns the number of characters matched. - -If the match fails, the @code{:} operator returns the null string if -@samp{\(} and @samp{\)} are used in @var{regex}, otherwise 0. - -@kindex \( @r{regexp operator} -Only the first @samp{\( @dots{} \)} pair is relevant to the return -value; additional pairs are meaningful only for grouping the regular -expression operators. - -@kindex \+ @r{regexp operator} -@kindex \? @r{regexp operator} -@kindex \| @r{regexp operator} -In the regular expression, @code{\+}, @code{\?}, and @code{\|} are -operators which respectively match one or more, zero or one, or separate -alternatives. SunOS and other @code{expr}'s treat these as regular -characters. (POSIX allows either behavior.) -@xref{Top, , Regular Expression Library, regex, Regex}, for details of -regular expression syntax. Some examples are in @ref{Examples of expr}. - -@item match @var{string} @var{regex} -@findex match -An alternative way to do pattern matching. This is the same as -@w{@samp{@var{string} : @var{regex}}}. - -@item substr @var{string} @var{position} @var{length} -@findex substr -Returns the substring of @var{string} beginning at @var{position} -with length at most @var{length}. If either @var{position} or -@var{length} is negative, zero, or non-numeric, returns the null string. - -@item index @var{string} @var{charset} -@findex index -Returns the first position in @var{string} where the first character in -@var{charset} was found. If no character in @var{charset} is found in -@var{string}, return 0. - -@item length @var{string} -@findex length -Returns the length of @var{string}. - -@item quote @var{token} -@findex quote -Interpret @var{token} as a string, even if it is a keyword like @var{match} -or an operator like @code{/}. -This makes it possible to test @code{expr length quote "$x"} or -@code{expr quote "$x" : '.*/\(.\)'} and have it do the right thing even if -the value of @var{$x} happens to be (for example) @code{/} or @code{index}. -This operator is a GNU extension. It is disabled when -the environment variable @env{POSIXLY_CORRECT} is set. - -@end table - -To make @code{expr} interpret keywords as strings, you must use the -@code{quote} operator. - - -@node Numeric expressions -@subsection Numeric expressions - -@cindex numeric expressions -@cindex expressions, numeric - -@code{expr} supports the usual numeric operators, in order of increasing -precedence. The string operators (previous section) have lower precedence, -the connectives (next section) have higher. - -@table @samp - -@item + - -@kindex + -@kindex - -@cindex addition -@cindex subtraction -Addition and subtraction. Both arguments are converted to numbers; -an error occurs if this cannot be done. - -@item * / % -@kindex * -@kindex / -@kindex % -@cindex multiplication -@cindex division -@cindex remainder -Multiplication, division, remainder. Both arguments are converted to -numbers; an error occurs if this cannot be done. - -@end table - - -@node Relations for expr -@subsection Relations for @code{expr} - -@cindex connectives, logical -@cindex logical connectives -@cindex relations, numeric or string - -@code{expr} supports the usual logical connectives and relations. These -are higher precedence than either the string or numeric operators -(previous sections). Here is the list, lowest-precedence operator first. - -@table @samp - -@item | -@kindex | -@cindex logical or operator -@cindex or operator -Returns its first argument if that is neither null nor 0, otherwise its -second argument. - -@item & -@kindex & -@cindex logical and operator -@cindex and operator -Return its first argument if neither argument is null or 0, otherwise -0. - -@item < <= = == != >= > -@kindex < -@kindex <= -@kindex = -@kindex == -@kindex > -@kindex >= -@cindex comparison operators -Compare the arguments and return 1 if the relation is true, 0 otherwise. -@code{==} is a synonym for @code{=}. @code{expr} first tries to convert -both arguments to numbers and do a numeric comparison; if either -conversion fails, it does a lexicographic comparison. - -@end table - - -@node Examples of expr -@subsection Examples of using @code{expr} - -@cindex examples of @code{expr} -Here are a few examples, including quoting for shell metacharacters. - -To add 1 to the shell variable @code{foo}, in Bourne-compatible shells: -@example -foo=`expr $foo + 1` -@end example - -To print the non-directory part of the file name stored in -@code{$fname}, which need not contain a @code{/}. -@example -expr $fname : '.*/\(^.*\)' '^|' $fname -@end example - -An example showing that @code{\+} is an operator: -@example -expr aaa : 'a\+' -@result{} 3 -@end example - -@example -expr abc : 'a\(.\)c' -@result{} b -expr index abcdef cz -@result{} 3 -expr index index a -@error{} expr: syntax error -expr index quote index a -@result{} 0 -@end example - - -@node Redirection -@chapter Redirection - -@cindex redirection -@cindex commands for redirection - -Unix shells commonly provide several forms of @dfn{redirection}---ways -to change the input source or output destination of a command. But one -useful redirection is performed by a separate command, not by the shell; -it's described here. - -@menu -* tee invocation:: Redirect output to multiple files. -@end menu - - -@node tee invocation -@section @code{tee}: Redirect output to multiple files - -@pindex tee -@cindex pipe fitting -@cindex destinations, multiple output -@cindex read from stdin and write to stdout and files - -The @code{tee} command copies standard input to standard output and also -to any files given as arguments. This is useful when you want not only -to send some data down a pipe, but also to save a copy. Synopsis: - -@example -tee [@var{option}]@dots{} [@var{file}]@dots{} -@end example - -If a file being written to does not already exist, it is created. If a -file being written to already exists, the data it previously contained -is overwritten unless the @code{-a} option is used. - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp -@item -a -@itemx --append -@opindex -a -@opindex --append -Append standard input to the given files rather than overwriting -them. - -@item -i -@itemx --ignore-interrupts -@opindex -i -@opindex --ignore-interrupts -Ignore interrupt signals. - -@end table - - -@node File name manipulation -@chapter File name manipulation - -@cindex file name manipulation -@cindex manipulation of file names -@cindex commands for file name manipulation - -This section describes commands that manipulate file names. - -@menu -* basename invocation:: Strip directory and suffix from a file name. -* dirname invocation:: Strip non-directory suffix from a file name. -* pathchk invocation:: Check file name portability. -@end menu - - -@node basename invocation -@section @code{basename}: Strip directory and suffix from a file name - -@pindex basename -@cindex strip directory and suffix from file names -@cindex directory, stripping from file names -@cindex suffix, stripping from file names -@cindex file names, stripping directory and suffix -@cindex leading directory components, stripping - -@code{basename} removes any leading directory components from -@var{name}. Synopsis: - -@example -basename @var{name} [@var{suffix}] -@end example - -If @var{suffix} is specified and is identical to the end of @var{name}, -it is removed from @var{name} as well. @code{basename} prints the -result on standard output. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node dirname invocation -@section @code{dirname}: Strip non-directory suffix from a file name - -@pindex dirname -@cindex directory components, printing -@cindex stripping non-directory suffix -@cindex non-directory suffix, stripping - -@code{dirname} prints all but the final slash-delimited component of -a string (presumably a filename). Synopsis: - -@example -dirname @var{name} -@end example - -If @var{name} is a single component, @code{dirname} prints @samp{.} -(meaning the current directory). - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node pathchk invocation -@section @code{pathchk}: Check file name portability - -@pindex pathchk -@cindex file names, checking validity and portability -@cindex valid file names, checking for -@cindex portable file names, checking for - -@code{pathchk} checks portability of filenames. Synopsis: - -@example -pathchk [@var{option}]@dots{} @var{name}@dots{} -@end example - -For each @var{name}, @code{pathchk} prints a message if any of -these conditions is true: -@enumerate -@item -one of the existing directories in @var{name} does not have search -(execute) permission, -@item -the length of @var{name} is larger than its filesystem's maximum -file name length, -@item -the length of one component of @var{name}, corresponding to an -existing directory name, is larger than its filesystem's maximum -length for a file name component. -@end enumerate - -The program accepts the following option. Also see @ref{Common options}. - -@table @samp - -@item -p -@itemx --portability -@opindex -p -@opindex --portability -Instead of performing length checks on the underlying filesystem, -test the length of each file name and its components against the -POSIX.1 minimum limits for portability. Also check that the file -name contains no characters not in the portable file name character set. - -@end table - -@cindex exit status of @code{pathchk} -Exit status: - -@display -0 if all specified file names passed all of the tests, -1 otherwise. -@end display - - -@node Working context -@chapter Working context - -@cindex working context -@cindex commands for printing the working context - -This section describes commands that display or alter the context in -which you are working: the current directory, the terminal settings, and -so forth. See also the user-related commands in the next section. - -@menu -* pwd invocation:: Print working directory. -* stty invocation:: Print or change terminal characteristics. -* printenv invocation:: Print environment variables. -* tty invocation:: Print file name of terminal on standard input. -@end menu - - -@node pwd invocation -@section @code{pwd}: Print working directory - -@pindex pwd -@cindex print name of current directory -@cindex current working directory, printing -@cindex working directory, printing - -@cindex symbolic links and @code{pwd} -@code{pwd} prints the fully resolved name of the current directory. -That is, all components of the printed name will be actual directory -names---none will be symbolic links. - -@cindex conflicts with shell built-ins -@cindex built-in shell commands, conflicts with -Because most shells have a built-in command by the same name, using the -unadorned command name in a script or interactively may get you -different functionality than that described here. - -The only options are a lone @samp{--help} or -@samp{--version}. @xref{Common options}. - - -@node stty invocation -@section @code{stty}: Print or change terminal characteristics - -@pindex stty -@cindex change or print terminal settings -@cindex terminal settings -@cindex line settings of terminal - -@code{stty} prints or changes terminal characteristics, such as baud rate. -Synopses: - -@example -stty [@var{option}] [@var{setting}]@dots{} -stty [@var{option}] -@end example - -If given no line settings, @code{stty} prints the baud rate, line -discipline number (on systems that support it), and line settings -that have been changed from the values set by @samp{stty sane}. -By default, mode reading and setting are performed on the tty line -connected to standard input, although this can be modified by the -@samp{--file} option. - -@code{stty} accepts many non-option arguments that change aspects of -the terminal line operation, as described below. - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp -@item -a -@itemx --all -@opindex -a -@opindex --all -Print all current settings in human-readable form. This option may not -be used in combination with any line settings. - -@item -F @var{device} -@itemx --file=@var{device} -@opindex -F -@opindex --file -Set the line opened by the filename specified in @var{device} instead of -the tty line connected to standard input. This option is necessary -because opening a POSIX tty requires use of the @code{O_NONDELAY} flag to -prevent a POSIX tty from blocking until the carrier detect line is high if -the @code{clocal} flag is not set. Hence, it is not always possible -to allow the shell to open the device in the traditional manner. - -@item -g -@itemx --save -@opindex -g -@opindex --save -@cindex machine-readable @code{stty} output -Print all current settings in a form that can be used as an argument to -another @code{stty} command to restore the current settings. This option -may not be used in combination with any line settings. - -@end table - -Many settings can be turned off by preceding them with a @samp{-}. -Such arguments are marked below with ``May be negated'' in their -description. The descriptions themselves refer to the positive -case, that is, when @emph{not} negated (unless stated otherwise, -of course). - -Some settings are not available on all POSIX systems, since they use -extensions. Such arguments are marked below with ``Non-POSIX'' in their -description. On non-POSIX systems, those or other settings also may not -be available, but it's not feasible to document all the variations: just -try it and see. - -@menu -* Control:: Control settings -* Input:: Input settings -* Output:: Output settings -* Local:: Local settings -* Combination:: Combination settings -* Characters:: Special characters -* Special:: Special settings -@end menu - - -@node Control -@subsection Control settings - -@cindex control settings -Control settings: - -@table @samp -@item parenb -@opindex parenb -@cindex two-way parity -Generate parity bit in output and expect parity bit in input. -May be negated. - -@item parodd -@opindex parodd -@cindex odd parity -@cindex even parity -Set odd parity (even if negated). May be negated. - -@item cs5 -@itemx cs6 -@itemx cs7 -@itemx cs8 -@opindex cs@var{n} -@cindex character size -@cindex eight-bit characters -Set character size to 5, 6, 7, or 8 bits. - -@item hup -@itemx hupcl -@opindex hup[cl] -Send a hangup signal when the last process closes the tty. May be -negated. - -@item cstopb -@opindex cstopb -@cindex stop bits -Use two stop bits per character (one if negated). May be negated. - -@item cread -@opindex cread -Allow input to be received. May be negated. - -@item clocal -@opindex clocal -@cindex modem control -Disable modem control signals. May be negated. - -@item crtscts -@opindex crtscts -@cindex hardware flow control -@cindex flow control, hardware -@cindex RTS/CTS flow control -Enable RTS/CTS flow control. Non-POSIX. May be negated. -@end table - - -@node Input -@subsection Input settings - -@cindex input settings - -@table @samp -@item ignbrk -@opindex ignbrk -@cindex breaks, ignoring -Ignore break characters. May be negated. - -@item brkint -@opindex brkint -@cindex breaks, cause interrupts -Make breaks cause an interrupt signal. May be negated. - -@item ignpar -@opindex ignpar -@cindex parity, ignoring -Ignore characters with parity errors. May be negated. - -@item parmrk -@opindex parmrk -@cindex parity errors, marking -Mark parity errors (with a 255-0-character sequence). May be negated. - -@item inpck -@opindex inpck -Enable input parity checking. May be negated. - -@item istrip -@opindex istrip -@cindex eight-bit input -Clear high (8th) bit of input characters. May be negated. - -@item inlcr -@opindex inlcr -@cindex newline, translating to return -Translate newline to carriage return. May be negated. - -@item igncr -@opindex igncr -@cindex return, ignoring -Ignore carriage return. May be negated. - -@item icrnl -@opindex icrnl -@cindex return, translating to newline -Translate carriage return to newline. May be negated. - -@item ixon -@opindex ixon -@kindex C-s/C-q flow control -@cindex XON/XOFF flow control -Enable XON/XOFF flow control (that is, @kbd{CTRL-S}/@kbd{CTRL-Q}). May -be negated. - -@item ixoff -@itemx tandem -@opindex ixoff -@opindex tandem -@cindex software flow control -@cindex flow control, software -Enable sending of @code{stop} character when the system input buffer -is almost full, and @code{start} character when it becomes almost -empty again. May be negated. - -@item iuclc -@opindex iuclc -@cindex uppercase, translating to lowercase -Translate uppercase characters to lowercase. Non-POSIX. May be -negated. - -@item ixany -@opindex ixany -Allow any character to restart output (only the start character -if negated). Non-POSIX. May be negated. - -@item imaxbel -@opindex imaxbel -@cindex beeping at input buffer full -Enable beeping and not flushing input buffer if a character arrives -when the input buffer is full. Non-POSIX. May be negated. -@end table - - -@node Output -@subsection Output settings - -@cindex output settings -These arguments specify output-related operations. - -@table @samp -@item opost -@opindex opost -Postprocess output. May be negated. - -@item olcuc -@opindex olcuc -@cindex lowercase, translating to output -Translate lowercase characters to uppercase. Non-POSIX. May be -negated. - -@item ocrnl -@opindex ocrnl -@cindex return, translating to newline -Translate carriage return to newline. Non-POSIX. May be negated. - -@item onlcr -@opindex onlcr -@cindex newline, translating to crlf -Translate newline to carriage return-newline. Non-POSIX. May be -negated. - -@item onocr -@opindex onocr -Do not print carriage returns in the first column. Non-POSIX. -May be negated. - -@item onlret -@opindex onlret -Newline performs a carriage return. Non-POSIX. May be negated. - -@item ofill -@opindex ofill -@cindex pad instead of timing for delaying -Use fill (padding) characters instead of timing for delays. Non-POSIX. -May be negated. - -@item ofdel -@opindex ofdel -@cindex pad character -Use delete characters for fill instead of null characters. Non-POSIX. -May be negated. - -@item nl1 -@itemx nl0 -@opindex nl@var{n} -Newline delay style. Non-POSIX. - -@item cr3 -@itemx cr2 -@itemx cr1 -@itemx cr0 -@opindex cr@var{n} -Carriage return delay style. Non-POSIX. - -@item tab3 -@itemx tab2 -@itemx tab1 -@itemx tab0 -@opindex tab@var{n} -Horizontal tab delay style. Non-POSIX. - -@item bs1 -@itemx bs0 -@opindex bs@var{n} -Backspace delay style. Non-POSIX. - -@item vt1 -@itemx vt0 -@opindex vt@var{n} -Vertical tab delay style. Non-POSIX. - -@item ff1 -@itemx ff0 -@opindex ff@var{n} -Form feed delay style. Non-POSIX. -@end table - - -@node Local -@subsection Local settings - -@cindex local settings - -@table @samp -@item isig -@opindex isig -Enable @code{interrupt}, @code{quit}, and @code{suspend} special -characters. May be negated. - -@item icanon -@opindex icanon -Enable @code{erase}, @code{kill}, @code{werase}, and @code{rprnt} -special characters. May be negated. - -@item iexten -@opindex iexten -Enable non-POSIX special characters. May be negated. - -@item echo -@opindex echo -Echo input characters. May be negated. - -@item echoe -@itemx crterase -@opindex echoe -@opindex crterase -Echo @code{erase} characters as backspace-space-backspace. May be -negated. - -@item echok -@opindex echok -@cindex newline echoing after @code{kill} -Echo a newline after a @code{kill} character. May be negated. - -@item echonl -@opindex echonl -@cindex newline, echoing -Echo newline even if not echoing other characters. May be negated. - -@item noflsh -@opindex noflsh -@cindex flushing, disabling -Disable flushing after @code{interrupt} and @code{quit} special -characters. May be negated. - -@item xcase -@opindex xcase -@cindex case translation -Enable input and output of uppercase characters by preceding their -lowercase equivalents with @samp{\}, when @code{icanon} is set. -Non-POSIX. May be negated. - -@item tostop -@opindex tostop -@cindex background jobs, stopping at terminal write -Stop background jobs that try to write to the terminal. Non-POSIX. -May be negated. - -@item echoprt -@itemx prterase -@opindex echoprt -@opindex prterase -Echo erased characters backward, between @samp{\} and @samp{/}. -Non-POSIX. May be negated. - -@item echoctl -@itemx ctlecho -@opindex echoctl -@opindex ctlecho -@cindex control characters, using @samp{^@var{c}} -@cindex hat notation for control characters -Echo control characters in hat notation (@samp{^@var{c}}) instead -of literally. Non-POSIX. May be negated. - -@item echoke -@itemx crtkill -@opindex echoke -@opindex crtkill -Echo the @code{kill} special character by erasing each character on -the line as indicated by the @code{echoprt} and @code{echoe} settings, -instead of by the @code{echoctl} and @code{echok} settings. Non-POSIX. -May be negated. -@end table - - -@node Combination -@subsection Combination settings - -@cindex combination settings -Combination settings: - -@table @samp -@item evenp -@opindex evenp -@itemx parity -@opindex parity -Same as @code{parenb -parodd cs7}. May be negated. If negated, same -as @code{-parenb cs8}. - -@item oddp -@opindex oddp -Same as @code{parenb parodd cs7}. May be negated. If negated, same -as @code{-parenb cs8}. - -@item nl -@opindex nl -Same as @code{-icrnl -onlcr}. May be negated. If negated, same as -@code{icrnl -inlcr -igncr onlcr -ocrnl -onlret}. - -@item ek -@opindex ek -Reset the @code{erase} and @code{kill} special characters to their default -values. - -@item sane -@opindex sane -Same as: -@c This is too long to write inline. -@example -cread -ignbrk brkint -inlcr -igncr icrnl -ixoff --iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr --onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 -ff0 isig icanon iexten echo echoe echok -echonl --noflsh -xcase -tostop -echoprt echoctl echoke -@end example -@noindent and also sets all special characters to their default values. - -@item cooked -@opindex cooked -Same as @code{brkint ignpar istrip icrnl ixon opost isig icanon}, plus -sets the @code{eof} and @code{eol} characters to their default values -if they are the same as the @code{min} and @code{time} characters. -May be negated. If negated, same as @code{raw}. - -@item raw -@opindex raw -Same as: -@example --ignbrk -brkint -ignpar -parmrk -inpck -istrip --inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany --imaxbel -opost -isig -icanon -xcase min 1 time 0 -@end example -@noindent May be negated. If negated, same as @code{cooked}. - -@item cbreak -@opindex cbreak -Same as @code{-icanon}. May be negated. If negated, same as -@code{icanon}. - -@item pass8 -@opindex pass8 -@cindex eight-bit characters -Same as @code{-parenb -istrip cs8}. May be negated. If negated, -same as @code{parenb istrip cs7}. - -@item litout -@opindex litout -Same as @code{-parenb -istrip -opost cs8}. May be negated. -If negated, same as @code{parenb istrip opost cs7}. - -@item decctlq -@opindex decctlq -Same as @code{-ixany}. Non-POSIX. May be negated. - -@item tabs -@opindex tabs -Same as @code{tab0}. Non-POSIX. May be negated. If negated, same -as @code{tab3}. - -@item lcase -@itemx LCASE -@opindex lcase -@opindex LCASE -Same as @code{xcase iuclc olcuc}. Non-POSIX. May be negated. - -@item crt -@opindex crt -Same as @code{echoe echoctl echoke}. - -@item dec -@opindex dec -Same as @code{echoe echoctl echoke -ixany intr ^C erase ^? kill C-u}. -@end table - - -@node Characters -@subsection Special characters - -@cindex special characters -@cindex characters, special - -The special characters' default values vary from system to system. -They are set with the syntax @samp{name value}, where the names are -listed below and the value can be given either literally, in hat -notation (@samp{^@var{c}}), or as an integer which may start with -@samp{0x} to indicate hexadecimal, @samp{0} to indicate octal, or -any other digit to indicate decimal. - -@cindex disabling special characters -@kindex u@r{, and disabling special characters} -For GNU stty, giving a value of @code{^-} or @code{undef} disables that -special character. (This is incompatible with Ultrix @code{stty}, -which uses a value of @samp{u} to disable a special character. GNU -@code{stty} treats a value @samp{u} like any other, namely to set that -special character to @key{U}.) - -@table @samp - -@item intr -@opindex intr -Send an interrupt signal. - -@item quit -@opindex quit -Send a quit signal. - -@item erase -@opindex erase -Erase the last character typed. - -@item kill -@opindex kill -Erase the current line. - -@item eof -@opindex eof -Send an end of file (terminate the input). - -@item eol -@opindex eol -End the line. - -@item eol2 -@opindex eol2 -Alternate character to end the line. Non-POSIX. - -@item swtch -@opindex swtch -Switch to a different shell layer. Non-POSIX. - -@item start -@opindex start -Restart the output after stopping it. - -@item stop -@opindex stop -Stop the output. - -@item susp -@opindex susp -Send a terminal stop signal. - -@item dsusp -@opindex dsusp -Send a terminal stop signal after flushing the input. Non-POSIX. - -@item rprnt -@opindex rprnt -Redraw the current line. Non-POSIX. - -@item werase -@opindex werase -Erase the last word typed. Non-POSIX. - -@item lnext -@opindex lnext -Enter the next character typed literally, even if it is a special -character. Non-POSIX. -@end table - - -@node Special -@subsection Special settings - -@cindex special settings - -@table @samp -@item min @var{n} -@opindex min -Set the minimum number of characters that will satisfy a read until -the time value has expired, when @code{-icanon} is set. - -@item time @var{n} -@opindex time -Set the number of tenths of a second before reads time out if the minimum -number of characters have not been read, when @code{-icanon} is set. - -@item ispeed @var{n} -@opindex ispeed -Set the input speed to @var{n}. - -@item ospeed @var{n} -@opindex ospeed -Set the output speed to @var{n}. - -@item rows @var{n} -@opindex rows -Tell the tty kernel driver that the terminal has @var{n} rows. Non-POSIX. - -@item cols @var{n} -@itemx columns @var{n} -@opindex cols -@opindex columns -Tell the kernel that the terminal has @var{n} columns. Non-POSIX. - -@item size -@opindex size -@vindex LINES -@vindex COLUMNS -Print the number of rows and columns that the kernel thinks the -terminal has. (Systems that don't support rows and columns in the kernel -typically use the environment variables @env{LINES} and @env{COLUMNS} -instead; however, GNU @code{stty} does not know anything about them.) -Non-POSIX. - -@item line @var{n} -@opindex line -Use line discipline @var{n}. Non-POSIX. - -@item speed -@opindex speed -Print the terminal speed. - -@item @var{n} -@cindex baud rate, setting -@c FIXME: Is this still true that the baud rate can't be set -@c higher than 38400? -Set the input and output speeds to @var{n}. @var{n} can be one -of: 0 50 75 110 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 -19200 38400 @code{exta} @code{extb}. @code{exta} is the same as -19200; @code{extb} is the same as 38400. 0 hangs up the line if -@code{-clocal} is set. -@end table - - -@node printenv invocation -@section @code{printenv}: Print all or some environment variables - -@pindex printenv -@cindex printing all or some environment variables -@cindex environment variables, printing - -@code{printenv} prints environment variable values. Synopsis: - -@example -printenv [@var{option}] [@var{variable}]@dots{} -@end example - -If no @var{variable}s are specified, @code{printenv} prints the value of -every environment variable. Otherwise, it prints the value of each -@var{variable} that is set, and nothing for those that are not set. - -The only options are a lone @samp{--help} or @samp{--version}. -@xref{Common options}. - -@cindex exit status of @code{printenv} -Exit status: - -@display -0 if all variables specified were found -1 if at least one specified variable was not found -2 if a write error occurred -@end display - - -@node tty invocation -@section @code{tty}: Print file name of terminal on standard input - -@pindex tty -@cindex print terminal file name -@cindex terminal file name, printing - -@code{tty} prints the file name of the terminal connected to its standard -input. It prints @samp{not a tty} if standard input is not a terminal. -Synopsis: - -@example -tty [@var{option}]@dots{} -@end example - -The program accepts the following option. Also see @ref{Common options}. - -@table @samp - -@item -s -@itemx --silent -@itemx --quiet -@opindex -s -@opindex --silent -@opindex --quiet -Print nothing; only return an exit status. - -@end table - -@cindex exit status of @code{tty} -Exit status: - -@display -0 if standard input is a terminal -1 if standard input is not a terminal -2 if given incorrect arguments -3 if a write error occurs -@end display - - -@node User information -@chapter User information - -@cindex user information, commands for -@cindex commands for printing user information - -This section describes commands that print user-related information: -logins, groups, and so forth. - -@menu -* id invocation:: Print real and effective uid and gid. -* logname invocation:: Print current login name. -* whoami invocation:: Print effective user id. -* groups invocation:: Print group names a user is in. -* users invocation:: Print login names of users currently logged in. -* who invocation:: Print who is currently logged in. -@end menu - - -@node id invocation -@section @code{id}: Print real and effective uid and gid - -@pindex id -@cindex real uid and gid, printing -@cindex effective uid and gid, printing -@cindex printing real and effective uid and gid - -@code{id} prints information about the given user, or the process -running it if no user is specified. Synopsis: - -@example -id [@var{option}]@dots{} [@var{username}] -@end example - -By default, it prints the real user id, real group id, effective user id -if different from the real user id, effective group id if different from -the real group id, and supplemental group ids. - -Each of these numeric values is preceded by an identifying string and -followed by the corresponding user or group name in parentheses. - -The options cause @code{id} to print only part of the above information. -Also see @ref{Common options}. - -@table @samp -@item -g -@itemx --group -@opindex -g -@opindex --group -Print only the group id. - -@item -G -@itemx --groups -@opindex -G -@opindex --groups -Print only the supplementary groups. - -@item -n -@itemx --name -@opindex -n -@opindex --name -Print the user or group name instead of the ID number. Requires -@code{-u}, @code{-g}, or @code{-G}. - -@item -r -@itemx --real -@opindex -r -@opindex --real -Print the real, instead of effective, user or group id. Requires -@code{-u}, @code{-g}, or @code{-G}. - -@item -u -@itemx --user -@opindex -u -@opindex --user -Print only the user id. - -@end table - - -@node logname invocation -@section @code{logname}: Print current login name - -@pindex logname -@cindex printing user's login name -@cindex login name, printing -@cindex user name, printing - -@flindex /etc/utmp -@flindex utmp - -@code{logname} prints the calling user's name, as found in the file -@file{/etc/utmp}, and exits with a status of 0. If there is no -@file{/etc/utmp} entry for the calling process, @code{logname} prints -an error message and exits with a status of 1. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node whoami invocation -@section @code{whoami}: Print effective user id - -@pindex whoami -@cindex effective UID, printing -@cindex printing the effective UID - -@code{whoami} prints the user name associated with the current -effective user id. It is equivalent to the command @samp{id -un}. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node groups invocation -@section @code{groups}: Print group names a user is in - -@pindex groups -@cindex printing groups a user is in -@cindex supplementary groups, printing - -@code{groups} prints the names of the primary and any supplementary -groups for each given @var{username}, or the current process if no names -are given. If names are given, the name of each user is printed before -the list of that user's groups. Synopsis: - -@example -groups [@var{username}]@dots{} -@end example - -The group lists are equivalent to the output of the command @samp{id -Gn}. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node users invocation -@section @code{users}: Print login names of users currently logged in - -@pindex users -@cindex printing current usernames -@cindex usernames, printing current - -@cindex login sessions, printing users with -@code{users} prints on a single line a blank-separated list of user -names of users currently logged in to the current host. Each user name -corresponds to a login session, so if a user has more than one login -session, that user's name will appear the same number of times in the -output. Synopsis: - -@example -users [@var{file}] -@end example - -@flindex /etc/utmp -@flindex /etc/wtmp -With no @var{file} argument, @code{users} extracts its information from -the file @file{/etc/utmp}. If a file argument is given, @code{users} -uses that file instead. A common choice is @file{/etc/wtmp}. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node who invocation -@section @code{who}: Print who is currently logged in - -@pindex who -@cindex printing current user information -@cindex information, about current users - -@code{who} prints information about users who are currently logged on. -Synopsis: - -@example -@code{who} [@var{option}] [@var{file}] [am i] -@end example - -@cindex terminal lines, currently used -@cindex login time -@cindex remote hostname -If given no non-option arguments, @code{who} prints the following -information for each user currently logged on: login name, terminal -line, login time, and remote hostname or X display. - -@flindex /etc/utmp -@flindex /etc/wtmp -If given one non-option argument, @code{who} uses that instead of -@file{/etc/utmp} as the name of the file containing the record of -users logged on. @file{/etc/wtmp} is commonly given as an argument -to @code{who} to look at who has previously logged on. - -@opindex am i -@opindex who am i -If given two non-option arguments, @code{who} prints only the entry -for the user running it (determined from its standard input), preceded -by the hostname. Traditionally, the two arguments given are @samp{am -i}, as in @samp{who am i}. - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp -@item -m -@opindex -m -Same as @samp{who am i}. - -@item -q -@itemx --count -@opindex -q -@opindex --count -Print only the login names and the number of users logged on. -Overrides all other options. - -@item -s -@opindex -s -Ignored; for compatibility with other versions of @code{who}. - -@item -i -@itemx -u -@itemx --idle -@opindex -i -@opindex -u -@opindex --idle -@cindex idle time -After the login time, print the number of hours and minutes that the -user has been idle. @samp{.} means the user was active in last minute. -@samp{old} means the user was idle for more than 24 hours. - -@item -l -@itemx --lookup -@opindex -l -@opindex --lookup -Attempt to canonicalize hostnames found in utmp through a DNS lookup. This -is not the default because it can cause significant delays on systems with -automatic dial-up internet access. - -@item -H -@itemx --heading -@opindex -H -@opindex --heading -Print a line of column headings. - -@item -w -@itemx -T -@itemx --mesg -@itemx --message -@itemx --writable -@opindex -w -@opindex -T -@opindex --mesg -@opindex --message -@opindex --writable -@cindex message status -@pindex write@r{, allowed} -After each login name print a character indicating the user's message status: - -@display -@samp{+} allowing @code{write} messages -@samp{-} disallowing @code{write} messages -@samp{?} cannot find terminal device -@end display - -@end table - - -@node System context -@chapter System context - -@cindex system context -@cindex context, system -@cindex commands for system context - -This section describes commands that print or change system-wide -information. - -@menu -* date invocation:: Print or set system date and time. -* uname invocation:: Print system information. -* hostname invocation:: Print or set system name. -* hostid invocation:: Print numeric host identifier. -@end menu - - -@node date invocation -@section @code{date}: Print or set system date and time - -@pindex date -@cindex time, printing or setting -@cindex printing the current time - -Synopses: - -@example -date [@var{option}]@dots{} [+@var{format}] -date [-u|--utc|--universal] @c this avoids a newline in the output -[ MMDDhhmm[[CC]YY][.ss] ] -@end example - -Invoking @code{date} with no @var{format} argument is equivalent to invoking -@samp{date '+%a %b %e %H:%M:%S %Z %Y'}. - -@findex strftime @r{and @code{date}} -@cindex time formats -@cindex formatting times -If given an argument that starts with a @samp{+}, @code{date} prints the -current time and date (or the time and date specified by the -@code{--date} option, see below) in the format defined by that argument, -which is the same as in the @code{strftime} function. Except for -directives, which start with @samp{%}, characters in the format string -are printed unchanged. The directives are described below. - -@menu -* Time directives:: %[HIklMprsSTXzZ] -* Date directives:: %[aAbBcdDhjmUwWxyY] -* Literal directives:: %[%nt] -* Padding:: Pad with zeroes, spaces (%_), or nothing (%-). -* Setting the time:: Changing the system clock. -* Options for date:: Instead of the current time. -* Examples of date:: Examples. -@end menu - -@node Time directives -@subsection Time directives - -@cindex time directives -@cindex directives, time - -@code{date} directives related to times. - -@table @samp -@item %H -hour (00@dots{}23) -@item %I -hour (01@dots{}12) -@item %k -hour ( 0@dots{}23) -@item %l -hour ( 1@dots{}12) -@item %M -minute (00@dots{}59) -@item %p -locale's AM or PM -@item %r -time, 12-hour (hh:mm:ss [AP]M) -@item %s -@cindex epoch, seconds since -@cindex seconds since the epoch -@cindex beginning of time -seconds since the epoch, i.e., 1 January 1970 00:00:00 UTC (a -GNU extension). -Note that this value is the number of seconds between the epoch -and the current date as defined by the localtime system call. -It isn't changed by the @samp{--date} option. -@item %S -second (00@dots{}60) -@item %T -time, 24-hour (hh:mm:ss) -@item %X -locale's time representation (%H:%M:%S) -@item %z -RFC-822 style numeric time zone (e.g., -0600 or +0100), or nothing if no -time zone is determinable. This value reflects the @emph{current} time -zone. It isn't changed by the @samp{--date} option. -@item %Z -time zone (e.g., EDT), or nothing if no timezone is -determinable. -Note that this value reflects the @emph{current} time zone. -It isn't changed by the @samp{--date} option. -@end table - - -@node Date directives -@subsection Date directives - -@cindex date directives -@cindex directives, date - -@code{date} directives related to dates. - -@table @samp -@item %a -locale's abbreviated weekday name (Sun@dots{}Sat) -@item %A -locale's full weekday name, variable length (Sunday@dots{}Saturday) -@item %b -locale's abbreviated month name (Jan@dots{}Dec) -@item %B -locale's full month name, variable length (January@dots{}December) -@item %c -locale's date and time (Sat Nov 04 12:02:33 EST 1989) -@item %C -century (year divided by 100 and truncated to an integer) (00@dots{}99) -@item %d -day of month (01@dots{}31) -@item %D -date (mm/dd/yy) -@item %h -same as %b -@item %j -day of year (001@dots{}366) -@item %m -month (01@dots{}12) -@item %U -week number of year with Sunday as first day of week (00@dots{}53). -Days in a new year preceding the first Sunday are in week zero. -@item %V -week number of year with Monday as first day of the week as a decimal -(01@dots{}53). If the week containing January 1 has four or more days in -the new year, then it is considered week 1; otherwise, it is week 53 of -the previous year, and the next week is week 1. (See the ISO 8601: 1988 -standard.) -@item %w -day of week (0@dots{}6) with 0 corresponding to Sunday -@item %W -week number of year with Monday as first day of week (00@dots{}53). -Days in a new year preceding the first Monday are in week zero. -@item %x -locale's date representation (mm/dd/yy) -@item %y -last two digits of year (00@dots{}99) -@item %Y -year (1970@dots{}.) -@end table - - -@node Literal directives -@subsection Literal directives - -@cindex literal directives -@cindex directives, literal - -@code{date} directives that produce literal strings. - -@table @samp -@item %% -a literal % -@item %n -a newline -@item %t -a horizontal tab -@end table - - -@node Padding -@subsection Padding - -@cindex numeric field padding -@cindex padding of numeric fields -@cindex fields, padding numeric - -By default, @code{date} pads numeric fields with zeroes, so that, for -example, numeric months are always output as two digits. GNU @code{date} -recognizes the following numeric modifiers between the @samp{%} and the -directive. - -@table @samp -@item - -(hyphen) do not pad the field; useful if the output is intended for -human consumption. -@item _ -(underscore) pad the field with spaces; useful if you need a fixed -number of characters in the output, but zeroes are too distracting. -@end table - -@noindent -These are GNU extensions. - -Here is an example illustrating the differences: - -@example -date +%d/%m -d "Feb 1" -@result{} 01/02 -date +%-d/%-m -d "Feb 1" -@result{} 1/2 -date +%_d/%_m -d "Feb 1" -@result{} 1/ 2 -@end example - - -@node Setting the time -@subsection Setting the time - -@cindex setting the time -@cindex time setting -@cindex appropriate privileges - -If given an argument that does not start with @samp{+}, @code{date} sets -the system clock to the time and date specified by that argument (as -described below). You must have appropriate privileges to set the -system clock. The @samp{--date} and @samp{--set} options may not be -used with such an argument. The @samp{--universal} option may be used -with such an argument to indicate that the specified time and date are -relative to Coordinated Universal Time rather than to the local time -zone. - -The argument must consist entirely of digits, which have the following -meaning: - -@table @samp -@item MM -month -@item DD -day within month -@item hh -hour -@item mm -minute -@item CC -first two digits of year (optional) -@item YY -last two digits of year (optional) -@item ss -second (optional) -@end table - -The @samp{--set} option also sets the system clock; see the next section. - - -@node Options for date -@subsection Options for @code{date} - -@cindex @code{date} options -@cindex options for @code{date} - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp - -@item -d @var{datestr} -@itemx --date=@var{datestr} -@opindex -d -@opindex --date -@cindex parsing date strings -@cindex date strings, parsing -@cindex arbitrary date strings, parsing -@opindex yesterday -@opindex tomorrow -@opindex next @var{day} -@opindex last @var{day} -Display the time and date specified in @var{datestr} instead of the -current time and date. @var{datestr} can be in almost any common -format. It can contain month names, timezones, @samp{am} and @samp{pm}, -@samp{yesterday}, @samp{ago}, @samp{next}, etc. @xref{Date input formats}. - -@item -f @var{datefile} -@itemx --file=@var{datefile} -@opindex -f -@opindex --file -Parse each line in @var{datefile} as with @samp{-d} and display the -resulting time and date. If @var{datefile} is @samp{-}, use standard -input. This is useful when you have many dates to process, because the -system overhead of starting up the @code{date} executable many times can -be considerable. - -@item -I[@var{timespec}] -@itemx --iso-8601[=@var{timespec}] -@opindex -I[@var{timespec}] -@opindex --iso-8601[=@var{timespec}] -Display the date using the ISO 8601 format, @samp{%Y-%m-%d}. - -The optional argument @var{timespec} specifies the number of additional -terms of the time to include. It can be one of the following: -@table @samp -@item auto -The default behavior: print just the date. - -@item hours -Append the hour of the day to the date. - -@item minutes -Append the hours and minutes. - -@item seconds -Append the hours, minutes, and seconds. -@end table - -If showing any time terms, then include the time zone using the format -@samp{%z}. - -@item -R -@itemx --rfc-822 -@opindex -R -@opindex --rfc-822 -Display the time and date using the RFC-822-conforming -format, @samp{%a, %_d %b %Y %H:%M:%S %z}. - -@item -r @var{file} -@itemx --reference=@var{file} -@opindex -r -@opindex --reference -Display the time and date reference according to the last modification -time of @var{file}, instead of the current time and date. - -@item -s @var{datestr} -@itemx --set=@var{datestr} -@opindex -s -@opindex --set -Set the time and date to @var{datestr}. See @samp{-d} above. - -@item -u -@itemx --utc -@itemx --universal -@opindex -u -@opindex --utc -@opindex --universal -@cindex Coordinated Universal Time -@cindex UTC -@cindex Greenwich Mean Time -@cindex GMT -Use Coordinated Universal Time (@sc{utc}) by operating as if the -@env{TZ} environment variable was set to the string @samp{UTC0}. -Normally, @command{date} operates in the time zone indicated by -@env{TZ}, or the system default if @env{TZ} is not set. Coordinated -Universal Time is often called ``Greenwich Mean Time'' (@sc{gmt}) for -historical reasons. -@end table - - -@node Examples of date -@subsection Examples of @code{date} - -@cindex examples of @code{date} - -Here are a few examples. Also see the documentation for the @samp{-d} -option in the previous section. - -@itemize @bullet - -@item -To print the date of the day before yesterday: - -@example -date --date='2 days ago' -@end example - -@item -To print the date of the day three months and one day hence: -@example -date --date='3 months 1 day' -@end example - -@item -To print the day of year of Christmas in the current year: -@example -date --date='25 Dec' +%j -@end example - -@item -To print the current full month name and the day of the month: -@example -date '+%B %d' -@end example - -But this may not be what you want because for the first nine days of -the month, the @samp{%d} expands to a zero-padded two-digit field, -for example @samp{date -d 1may '+%B %d'} will print @samp{May 01}. - -@item -To print a date without the leading zero for one-digit days -of the month, you can use the (GNU extension) @code{-} modifier to suppress -the padding altogether. -@example -date -d 1may '+%B %-d' -@end example - -@item -To print the current date and time in the format required by many -non-GNU versions of @code{date} when setting the system clock: -@example -date +%m%d%H%M%Y.%S -@end example - -@item -To set the system clock forward by two minutes: -@example -date --set='+2 minutes' -@end example - -@item -To print the date in the format specified by RFC-822, -use @samp{date --rfc}. I just did and saw this: - -@example -Mon, 25 Mar 1996 23:34:17 -0600 -@end example - -@item -To convert a date string to the number of seconds since the epoch -(which is 1970-01-01 00:00:00 UTC), use the @samp{--date} option with -the @samp{%s} format. That can be useful in sorting and/or graphing -and/or comparing data by date. The following command outputs the -number of the seconds since the epoch for the time two minutes after the -epoch: - -@example -date --date='1970-01-01 00:02:00 +0000' +%s -120 -@end example - -If you do not specify time zone information in the date string, -@command{date} uses your computer's idea of the time zone when -interpreting the string. For example, if your computer's time zone is -that of Cambridge, Massachusetts, which was then 5 hours (i.e., 18,000 -seconds) behind UTC: - -@example -# local time zone used -date --date='1970-01-01 00:02:00' +%s -18120 -@end example - -@item -If you're sorting or graphing dated data, your raw date values may be -represented as seconds since the epoch. But few people can look at -the date @samp{946684800} and casually note ``Oh, that's the first second -of the year 2000 in Greenwich, England.'' - -@example -date --date='2000-01-01 UTC' +%s -946684800 -@end example - -To convert such an unwieldy number of seconds back to -a more readable form, use a command like this: - -@smallexample -# local time zone used -date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z" -1999-12-31 19:00:00 -0500 -@end smallexample - -@end itemize - - -@node uname invocation -@section @code{uname}: Print system information - -@pindex uname -@cindex print system information -@cindex system information, printing - -@code{uname} prints information about the machine and operating system -it is run on. If no options are given, @code{uname} acts as if the -@code{-s} option were given. Synopsis: - -@example -uname [@var{option}]@dots{} -@end example - -If multiple options or @code{-a} are given, the selected information is -printed in this order: - -@example -@var{sysname} @var{nodename} @var{release} @var{osversion} @var{machine} -@end example - -The @var{osversion}, at least, may well be multiple words. For example: - -@example -uname -a -@result{} Linux hayley 1.0.4 #3 Thu May 12 18:06:34 1994 i486 -@end example - - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp - -@item -a -@itemx --all -@opindex -a -@opindex --all -Print all of the below information. - -@item -m -@itemx --machine -@opindex -m -@opindex --machine -@cindex machine type -@cindex hardware type -Print the machine (hardware) type. - -@item -n -@itemx --nodename -@opindex -n -@opindex --nodename -@cindex hostname -@cindex node name -@cindex network node name -Print the machine's network node hostname. - -@item -p -@itemx --processor -@opindex -p -@opindex --processor -@cindex host processor type -Print the machine's processor type - -@item -r -@itemx --release -@opindex -r -@opindex --release -@cindex operating system release -@cindex release of operating system -Print the operating system release. - -@item -s -@itemx --sysname -@opindex -s -@opindex --sysname -@cindex operating system name -@cindex name of operating system -Print the operating system name. - -@item -v -@opindex -v -@cindex operating system version -@cindex version of operating system -Print the operating system version. - -@end table - -@node hostname invocation -@section @code{hostname}: Print or set system name - -@pindex hostname -@cindex setting the hostname -@cindex printing the hostname -@cindex system name, printing -@cindex appropriate privileges - -With no arguments, @code{hostname} prints the name of the current host -system. With one argument, it sets the current host name to the -specified string. You must have appropriate privileges to set the host -name. Synopsis: - -@example -hostname [@var{name}] -@end example - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node hostid invocation -@section @code{hostid}: Print numeric host identifier. - -@pindex hostid -@cindex printing the host identifier - -@code{hostid} prints the numeric identifier of the current host -in hexadecimal. This command accepts no arguments. -The only options are @samp{--help} and @samp{--version}. -@xref{Common options}. - -For example, here's what it prints on one system I use: - -@example -$ hostid -1bac013d -@end example - -On that system, the 32-bit quantity happens to be closely -related to the system's Internet address, but that isn't always -the case. - - -@node Modified command invocation -@chapter Modified command invocation - -@cindex modified command invocation -@cindex invocation of commands, modified -@cindex commands for invoking other commands - -This section describes commands that run other commands in some context -different than the current one: a modified environment, as a different -user, etc. - -@menu -* chroot invocation:: Modify the root directory. -* env invocation:: Modify environment variables. -* nice invocation:: Modify scheduling priority. -* nohup invocation:: Immunize to hangups. -* su invocation:: Modify user and group id. -@end menu - - -@node chroot invocation -@section @code{chroot}: Run a command with a different root directory - -@pindex chroot -@cindex running a program in a specified root directory -@cindex root directory, running a program in a specified - -@code{chroot} runs a command with a specified root directory. -On many systems, only the super-user can do this. -Synopses: - -@example -chroot @var{newroot} [@var{command} [@var{args}]@dots{}] -chroot @var{option} -@end example - -Ordinarily, filenames are looked up starting at the root of the -directory structure, i.e., @file{/}. @code{chroot} changes the root to -the directory @var{newroot} (which must exist) and then runs -@var{command} with optional @var{args}. If @var{command} is not -specified, the default is the value of the @env{SHELL} environment -variable or @code{/bin/sh} if not set, invoked with the @samp{-i} option. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - -Here are a few tips to help avoid common problems in using chroot. -To start with a simple example, make @var{command} refer to a statically -linked binary. If you were to use a dynamically linked executable, then -you'd have to arrange to have the shared libraries in the right place under -your new root directory. - -For example, if you create a statically linked `ls' executable, -and put it in /tmp/empty, you can run this command as root: - -@example -$ chroot /tmp/empty /ls -Rl / -@end example - -Then you'll see output like this: - -@example -/: -total 1023 --rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls -@end example - -If you want to use a dynamically linked executable, say @code{bash}, -then first run @samp{ldd bash} to see what shared objects it needs. -Then, in addition to copying the actual binary, also copy the listed -files to the required positions under your intended new root directory. -Finally, if the executable requires any other files (e.g., data, state, -device files), copy them into place, too. - - -@node env invocation -@section @code{env}: Run a command in a modified environment - -@pindex env -@cindex environment, running a program in a modified -@cindex modified environment, running a program in a -@cindex running a program in a modified environment - -@code{env} runs a command with a modified environment. Synopses: - -@example -env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c -[@var{command} [@var{args}]@dots{}] -env -@end example - -Arguments of the form @samp{@var{variable}=@var{value}} set -the environment variable @var{variable} to value @var{value}. -@var{value} may be empty (@samp{@var{variable}=}). Setting a variable -to an empty value is different from unsetting it. - -@vindex PATH -The first remaining argument specifies the program name to invoke; it is -searched for according to the @env{PATH} environment variable. Any -remaining arguments are passed as arguments to that program. - -@cindex environment, printing - -If no command name is specified following the environment -specifications, the resulting environment is printed. This is like -specifying a command name of @code{printenv}. - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp - -@item -u @var{name} -@itemx --unset=@var{name} -@opindex -u -@opindex -unset -Remove variable @var{name} from the environment, if it was in the -environment. - -@item - -@itemx -i -@itemx --ignore-environment -@opindex - -@opindex -i -@opindex --ignore-environment -Start with an empty environment, ignoring the inherited environment. - -@end table - - -@node nice invocation -@section @code{nice}: Run a command with modified scheduling priority - -@pindex nice -@cindex modifying scheduling priority -@cindex scheduling priority, modifying -@cindex priority, modifying -@cindex appropriate privileges - -@code{nice} prints or modifies the scheduling priority of a job. -Synopsis: - -@example -nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}] -@end example - -If no arguments are given, @code{nice} prints the current scheduling -priority, which it inherited. Otherwise, @code{nice} runs the given -@var{command} with its scheduling priority adjusted. If no -@var{adjustment} is given, the priority of the command is incremented by -10. You must have appropriate privileges to specify a negative -adjustment. The priority can be adjusted by @code{nice} over the range -of -20 (the highest priority) to 19 (the lowest). - -@cindex conflicts with shell built-ins -@cindex built-in shell commands, conflicts with -Because most shells have a built-in command by the same name, using the -unadorned command name in a script or interactively may get you -different functionality than that described here. - -The program accepts the following option. Also see @ref{Common options}. - -@table @samp -@item -n @var{adjustment} -@itemx -@var{adjustment} -@itemx --adjustment=@var{adjustment} -@opindex -n -@opindex --adjustment -@opindex -@var{adjustment} -Add @var{adjustment} instead of 10 to the command's priority. -@end table - - -@node nohup invocation -@section @code{nohup}: Run a command immune to hangups - -@pindex nohup -@cindex hangups, immunity to -@cindex immunity to hangups -@cindex logging out and continuing to run - -@flindex nohup.out -@code{nohup} runs the given @var{command} with hangup signals ignored, -so that the command can continue running in the background after you log -out. Synopsis: - -@example -nohup @var{command} [@var{arg}]@dots{} -@end example - -@flindex nohup.out -@code{nohup} increases the scheduling priority of @var{command} by 5, so -it has a slightly smaller chance to run. If standard output is a terminal, -it and standard error are redirected so that they are appended to the -file @file{nohup.out}; if that cannot be written to, they are appended -to the file @file{$HOME/nohup.out}. If that cannot be written to, the -command is not run. - -If @code{nohup} creates either @file{nohup.out} or -@file{$HOME/nohup.out}, it creates it with no ``group'' or ``other'' -access permissions. It does not change the permissions if the output -file already existed. - -@code{nohup} does not automatically put the command it runs in the -background; you must do that explicitly, by ending the command line -with an @samp{&}. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node su invocation -@section @code{su}: Run a command with substitute user and group id - -@pindex su -@cindex substitute user and group ids -@cindex user id, switching -@cindex super-user, becoming -@cindex root, becoming - -@code{su} allows one user to temporarily become another user. It runs a -command (often an interactive shell) with the real and effective user -id, group id, and supplemental groups of a given @var{user}. Synopsis: - -@example -su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}] -@end example - -@cindex passwd entry, and @code{su} shell -@flindex /bin/sh -@flindex /etc/passwd -If no @var{user} is given, the default is @code{root}, the super-user. -The shell to use is taken from @var{user}'s @code{passwd} entry, or -@file{/bin/sh} if none is specified there. If @var{user} has a -password, @code{su} prompts for the password unless run by a user with -effective user id of zero (the super-user). - -@vindex HOME -@vindex SHELL -@vindex USER -@vindex LOGNAME -@cindex login shell -By default, @code{su} does not change the current directory. -It sets the environment variables @env{HOME} and @env{SHELL} -from the password entry for @var{user}, and if @var{user} is not -the super-user, sets @env{USER} and @env{LOGNAME} to @var{user}. -By default, the shell is not a login shell. - -Any additional @var{arg}s are passed as additional arguments to the -shell. - -@cindex @samp{-su} -GNU @code{su} does not treat @file{/bin/sh} or any other shells specially -(e.g., by setting @code{argv[0]} to @samp{-su}, passing @code{-c} only -to certain shells, etc.). - -@findex syslog -@code{su} can optionally be compiled to use @code{syslog} to report -failed, and optionally successful, @code{su} attempts. (If the system -supports @code{syslog}.) However, GNU @code{su} does not check if the -user is a member of the @code{wheel} group; see below. - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp -@item -c @var{command} -@itemx --command=@var{command} -@opindex -c -@opindex --command -Pass @var{command}, a single command line to run, to the shell with -a @code{-c} option instead of starting an interactive shell. - -@item -f -@itemx --fast -@opindex -f -@opindex --fast -@flindex .cshrc -@cindex file name pattern expansion, disabled -@cindex globbing, disabled -Pass the @code{-f} option to the shell. This probably only makes sense -if the shell run is @code{csh} or @code{tcsh}, for which the @code{-f} -option prevents reading the startup file (@file{.cshrc}). With -Bourne-like shells, the @code{-f} option disables file name pattern -expansion (globbing), which is not likely to be useful. - -@item - -@itemx -l -@itemx --login -@opindex - -@opindex -l -@opindex --login -@c other variables already indexed above -@vindex TERM -@vindex PATH -@cindex login shell, creating -Make the shell a login shell. This means the following. Unset all -environment variables except @env{TERM}, @env{HOME}, and @env{SHELL} -(which are set as described above), and @env{USER} and @env{LOGNAME} -(which are set, even for the super-user, as described above), and set -@env{PATH} to a compiled-in default value. Change to @var{user}'s home -directory. Prepend @samp{-} to the shell's name, intended to make it -read its login startup file(s). - -@item -m -@itemx -p -@itemx --preserve-environment -@opindex -m -@opindex -p -@opindex --preserve-environment -@cindex environment, preserving -@flindex /etc/shells -@cindex restricted shell -Do not change the environment variables @env{HOME}, @env{USER}, -@env{LOGNAME}, or @env{SHELL}. Run the shell given in the environment -variable @env{SHELL} instead of the shell from @var{user}'s passwd -entry, unless the user running @code{su} is not the superuser and -@var{user}'s shell is restricted. A @dfn{restricted shell} is one that -is not listed in the file @file{/etc/shells}, or in a compiled-in list -if that file does not exist. Parts of what this option does can be -overridden by @code{--login} and @code{--shell}. - -@item -s @var{shell} -@itemx --shell=@var{shell} -@opindex -s -@opindex --shell -Run @var{shell} instead of the shell from @var{user}'s passwd entry, -unless the user running @code{su} is not the superuser and @var{user}'s -shell is restricted (see @samp{-m} just above). - -@end table - -@cindex wheel group, not supported -@cindex group wheel, not supported -@cindex fascism -@heading Why GNU @code{su} does not support the @samp{wheel} group - -(This section is by Richard Stallman.) - -@cindex Twenex -@cindex MIT AI lab -Sometimes a few of the users try to hold total power over all the -rest. For example, in 1984, a few users at the MIT AI lab decided to -seize power by changing the operator password on the Twenex system and -keeping it secret from everyone else. (I was able to thwart this coup -and give power back to the users by patching the kernel, but I -wouldn't know how to do that in Unix.) - -However, occasionally the rulers do tell someone. Under the usual -@code{su} mechanism, once someone learns the root password who -sympathizes with the ordinary users, he or she can tell the rest. The -``wheel group'' feature would make this impossible, and thus cement the -power of the rulers. - -I'm on the side of the masses, not that of the rulers. If you are -used to supporting the bosses and sysadmins in whatever they do, you -might find this idea strange at first. - - -@node Delaying -@chapter Delaying - -@cindex delaying commands -@cindex commands for delaying - -@c Perhaps @code{wait} or other commands should be described here also? - -@menu -* sleep invocation:: Delay for a specified time. -@end menu - - -@node sleep invocation -@section @code{sleep}: Delay for a specified time - -@pindex sleep -@cindex delay for a specified time - -@code{sleep} pauses for an amount of time specified by the sum of -the values of the command line arguments. -Synopsis: - -@example -sleep @var{number}[smhd]@dots{} -@end example - -@cindex time units -Each argument is a number followed by an optional unit; the default -is seconds. The units are: - -@table @samp -@item s -seconds -@item m -minutes -@item h -hours -@item d -days -@end table - -Historical implementations of @code{sleep} have required that -@var{number} be an integer. However, GNU @code{sleep} accepts -arbitrary floating point numbers. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - - -@node Numeric operations -@chapter Numeric operations - -@cindex numeric operations -These programs do numerically-related operations. - -@menu -* factor invocation:: Show factors of numbers. -* seq invocation:: Print sequences of numbers. -@end menu - - -@node factor invocation -@section @code{factor}: Print prime factors - -@pindex factor -@cindex prime factors - -@code{factor} prints prime factors. Synopses: - -@example -factor [@var{number}]@dots{} -factor @var{option} -@end example - -If no @var{number} is specified on the command line, @code{factor} reads -numbers from standard input, delimited by newlines, tabs, or spaces. - -The only options are @samp{--help} and @samp{--version}. @xref{Common -options}. - -The algorithm it uses is not very sophisticated, so for some inputs -@code{factor} runs for a long time. The hardest numbers to factor are -the products of large primes. Factoring the product of the two largest 32-bit -prime numbers takes over 10 minutes of CPU time on a 400MHz Pentium II. - -@example -$ p=`echo '4294967279 * 4294967291'|bc` -$ factor $p -18446743979220271189: 4294967279 4294967291 -@end example - -In contrast, @code{factor} factors the largest 64-bit number in just -over a tenth of a second: - -@example -$ factor `echo '2^64-1'|bc` -18446744073709551615: 3 5 17 257 641 65537 6700417 -@end example - -@node seq invocation -@section @code{seq}: Print numeric sequences - -@pindex seq -@cindex numeric sequences -@cindex sequence of numbers - -@code{seq} prints a sequence of numbers to standard output. Synopses: - -@example -seq [@var{option}]@dots{} [@var{first} [@var{increment}]] @var{last}@dots{} -@end example - -@code{seq} prints the numbers from @var{first} to @var{last} by -@var{increment}. By default, @var{first} and @var{increment} are both 1, -and each number is printed on its own line. All numbers can be reals, -not just integers. - -The program accepts the following options. Also see @ref{Common options}. - -@table @samp -@item -f @var{format} -@itemx --format=@var{format} -@opindex -f @var{format} -@opindex --format=@var{format} -@cindex formatting of numbers in @code{seq} -Print all numbers using @var{format}; default @samp{%g}. -@var{format} must contain exactly one of the floating point -output formats @samp{%e}, @samp{%f}, or @samp{%g}. - -@item -s @var{string} -@itemx --separator=@var{string} -@cindex separator for numbers in @code{seq} -Separate numbers with @var{string}; default is a newline. -The output always terminates with a newline. - -@item -w -@itemx --equal-width -Print all numbers with the same width, by padding with leading zeroes. -(To have other kinds of padding, use @samp{--format}). - -@end table - -If you want to use @code{seq} to print sequences of large integer values, -don't use the default @samp{%g} format since it can result in -loss of precision: - -@example -$ seq 1000000 1000001 -1e+06 -1e+06 -@end example - -Instead, you can use the format, @samp{%1.f}, -to print large decimal numbers with no exponent and no decimal point. - -@example -$ seq --format=%1.f 1000000 1000001 -1000000 -1000001 -@end example - -If you want hexadecimal output, you can use @code{printf} -to perform the conversion: - -@example -$ printf %x'\n' `seq -f %1.f 1048575 1024 1050623` -fffff -1003ff -1007ff -@end example - -For very long lists of numbers, use xargs to avoid -system limitations on the length of an argument list: - -@example -$ seq -f %1.f 1000000 | xargs printf %x'\n' |tail -3 -f423e -f423f -f4240 -@end example - -To generate octal output, use the printf @code{%o} format instead -of @code{%x}. Note however that using printf works only for numbers -smaller than @code{2^32}: - -@example -$ printf "%x\n" `seq -f %1.f 4294967295 4294967296` -ffffffff -bash: printf: 4294967296: Numerical result out of range -@end example - -On most systems, seq can produce whole-number output for values up to -@code{2^53}, so here's a more general approach to base conversion that -also happens to be more robust for such large numbers. It works by -using @code{bc} and setting its output radix variable, @var{obase}, -to @samp{16} in this case to produce hexadecimal output. - -@example -$ (echo obase=16; seq -f %1.f 4294967295 4294967296)|bc -FFFFFFFF -100000000 -@end example - -Be careful when using @code{seq} with a fractional @var{increment}, -otherwise you may see surprising results. Most people would expect to -see @code{0.3} printed as the last number in this example: - -@example -$ seq -s' ' 0 .1 .3 -0 0.1 0.2 -@end example - -But that doesn't happen on most systems because @code{seq} is -implemented using binary floating point arithmetic (via the C -@code{double} type) -- which means some decimal numbers like @code{.1} -cannot be represented exactly. That in turn means some nonintuitive -conditions like @code{.1 * 3 > .3} will end up being true. - -To work around that in the above example, use a slightly larger number as -the @var{last} value: - -@example -$ seq -s' ' 0 .1 .31 -0 0.1 0.2 0.3 -@end example - -In general, when using an @var{increment} with a fractional part, where -(@var{last} - @var{first}) / @var{increment} is (mathematically) a whole -number, specify a slightly larger (or smaller, if @var{increment} is negative) -value for @var{last} to ensure that @var{last} is the final value printed -by seq. - -@node Index -@unnumbered Index - -@printindex cp - -@contents -@bye - -@c Local variables: -@c texinfo-column-for-description: 33 -@c End: |