[Tested mainly on Debian/3.0 and SuSE 8.2, partially on Debian/unstable and SuSE 9.0beta; note that I didn't check every command on both Debian and SuSE. The use of [XSI] is not consistant.] Quotes: SUSv3 - (c) The OpenGroup 2003 LSB - (c) Free Standards Group 2003 Note: The quotes might be abbreviated admin [XSI] - create and administer SCCS files (DEVELOPMENT) http://cssc.sourceforge.net/index.shtml Untested. Note that admin is not in the path but in /usr/lib/cssc/admin alias [UP, Shell Execution Environment] - define or display aliases part of BASH ar: [+SD, +XSI] - create and maintain library archives Tested with GNU ar 2.12.90.0.1 and compared with Tru64 Unix's ar (SUSv2) Plain SUSv3: ar -p[-v] archive [file ...] => -p works => -p-v and -p -v produces an error (works in Tru64) This holds true for the reminding sections => -pv doesn't have the output format "\n<%s>\n\n", but "\n\n\n", ar -r[-cuv] archive file ... => -r[uvc] works, but the 'ar: Warning: creating ar' is never printed otherwise ok. ar -t[-v] archive [file ...] => Ok. ar -x[-v] archive [file ...] => Ok. SD: ar -d[-v] archive file ... => Ok. XSI: ar -m [-v] archive file ... ar -m -a[-v] posname archive file ... ar -m -b[-v] posname archive file ... ar -m -i[-v] posname archive file ... => Ok. ar -p[-v][-s]archive [file ...] ^^^^ => Ok. ar -q[-cv] archive file ... => -q does not exist ar -r -a[-cuv] posname archive file ... ar -r -b[-cuv] posname archive file ... ar -r -i[-cuv] posname archive file ... => Ok. ar -x[-v][-sCT]archive [file ...] ^^^^^^ => -C and -T are not supported ===> Note: I reported this as bug to the binutils maintainer asa [FR] - interpret carriage-control characters Does not exist at [UP] - execute commands at a later time at [-m][-f file][-q queuename] -t time_arg at [-m][-f file][-q queuename] timespec ... at -r at_job_id ... at -l -q queuename at -l [at_job_id ...] => "at -l -q queuename" doesn't work => "-t time" doesn't exist => "-r" is not supported, uses "-d" instead See http://www.linuxbase.org/talks/sa20031001.html ===> These issues are fixed in the at version from FreeBSD, see [ 789224 ] SuSv3 and at: Should require -r http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/at/ => /etc/at.{allow,deny} vs. /usr/lib/cron/at.{allow,deny} awk - pattern scanning and processing language gLSB: "Certain aspects of internationalized regular expressions are optional" basename - return non-directory portion of a pathname ok batch [UP] - schedule commands to be executed in a batch queue => /etc/at.{allow,deny} vs. /usr/lib/cron/at.{allow,deny} bc - arbitrary-precision arithmetic language gLSB: Differences: --standard, --war Is this difference needed? This prevents the use of non-GNU bc, but on the other hand, this are the differences: From the man page: LANG This version does not conform to the POSIX standard in the pro- cessing of the LANG environment variable and all environment variables starting with LC_. names Traditional and POSIX bc have single letter names for functions, variables and arrays. They have been extended to be multi-char- acter names that start with a letter and may contain letters, numbers and the underscore character. Strings Strings are not allowed to contain NUL characters. POSIX says all characters must be included in strings. last POSIX bc does not have a last variable. Some implementations of bc use the period (.) in a similar way. comparisons POSIX bc allows comparisons only in the if statement, the while statement, and the second expression of the for statement. Also, only one relational operation is allowed in each of those statements. if statement, else clause POSIX bc does not have an else clause. for statement POSIX bc requires all expressions to be present in the for statement. &&, ||, ! POSIX bc does not have the logical operators. read function POSIX bc does not have a read function. print statement POSIX bc does not have a print statement . continue statement POSIX bc does not have a continue statement. return statement POSIX bc requires parentheses around the return expression. array parameters POSIX bc does not (currently) support array parameters in full. The POSIX grammar allows for arrays in function definitions, but does not provide a method to specify an array as an actual parameter. (This is most likely an oversight in the grammar.) Traditional implementations of bc have only call by value array parameters. function format POSIX bc requires the opening brace on the same line as the define key word and the auto statement on the next line. =+, =-, =*, =/, =%, =^ POSIX bc does not require these "old style" assignment operators to be defined. This version may allow these "old style" assign- ments. Use the limits statement to see if the installed version supports them. If it does support the "old style" assignment operators, the statement "a =- 1" will decrement a by 1 instead of setting a to the value -1. spaces in numbers Other implementations of bc allow spaces in numbers. For exam- ple, "x=1 3" would assign the value 13 to the variable x. The same statement would cause a syntax error in this version of bc. errors and execution This implementation varies from other implementations in terms of what code will be executed when syntax and other errors are found in the program. If a syntax error is found in a function definition, error recovery tries to find the beginning of a statement and continue to parse the function. Once a syntax error is found in the function, the function will not be callable and becomes undefined. Syntax errors in the interac- tive execution code will invalidate the current execution block. The execution block is terminated by an end of line that appears after a complete sequence of statements. For example, a = 1 b = 2 has two execution blocks and { a = 1 b = 2 } has one execution block. Any runtime error will terminate the execu- tion of the current execution block. A runtime warning will not termi- nate the current execution block. Interrupts During an interactive session, the SIGINT signal (usually gener- ated by the control-C character from the terminal) will cause execution of the current execution block to be interrupted. It will display a "runtime" error indicating which function was interrupted. After all runtime structures have been cleaned up, a message will be printed to notify the user that bc is ready for more input. All previously defined functions remain defined and the value of all non-auto variables are the value at the point of interruption. All auto variables and function parame- ters are removed during the clean up process. During a non- interactive session, the SIGINT signal will terminate the entire run of bc. bg [UP, Shell Execution Environment] - run jobs in the background part of BASH break [UP, Shell Execution Environment] - exit from for, while, or until loop part of BASH c99 [CD] - compile standard C programs not existant cal [XSI] - cal - print a calendar Ok cat - concatenate and print files Ok (-u is ignored) cd [Shell Execution Environment] - change the working directory part of BASH cflow [XSI] - generate a C-language flowgraph (DEVELOPMENT) cflow [-r][-d num][-D name[=def]] ... [-i incl][-I dir] ... [-U dir] ... file ... Unfortunally not SUSv3 compatible: SUSv3: -r Reverse the caller:callee relationship, producing an inverted listing showing the callers of each function. The listing shall also be sorted in lexicographical order by callee. -i incl Increase the number of included symbols. The incl option-argument is one of the following characters: x Include external and static data symbols. The default shall be to include only functions in the flowgraph. _ (Underscore) Include names that begin with an underscore. The default shall be to exclude these functions (and data if -i x is used). cflow(1): -r name Print a call graph with function or variable name as root (in the case of a variable, this only makes sense if used with the -i option). This option may be repeated. -i Print an inverted graph of depth 2, i.e., for each function (or variable if used with the -v option), print a list of functions which call it. chgrp - change the file group ownership chgrp -R [-H | -L | -P ] group file ... => The -H, -L, -P options are not supported ====> Reported as bug to the coreutils maintainer Answer: "They're coming soon, along with rewrites to make chmod, chown, chgrp, and du use fts instead of explicit recursion." (Jim Meyering, 02 Oct 2003) chmod - change the file modes Ok, incl. XSI extension chown - change the file ownership chown -R [-H | -L | -P ] group file ... => The -H, -L, -P options are not supported gLSB: '.' vs. ':' ====> Reported as bug to the coreutils maintainer cksum - write file checksums and sizes Don't know. I get with GNU cksum: 438242865 1474560 zerberus.img and with Tru64 Unix's cksum: 3183311372 1474560 zerberus.img => Something is rotten in the state of Danmark => Someone should check what is correct cmp - compare two files Ok [col: Not part of SUSv3] colon - null utility Part of BASH (this is ment: ":") comm - select or reject lines common to two files Ok command - execute a simple command Part of BASH compress [XSI] - compress data Not found continue - continue for, while, or until loop Part of BASH cp - copy files OK, supports [OB] [cpio: Not part of SUSv3] crontab [UP] - schedule periodic background work gLSB: The files cron.allow and cron.deny reside in /etc rather than /usr/lib/cron. csplit - split files based on context OK ctags - create a tags file (DEVELOPMENT, FORTRAN) Ok cut - cut out selected fields of each line of a file -n is ignored cxref [XSI] - generate a C-language program cross-reference table (DEVELOPMENT) The cxref I found has completely different command line options date - write the date and time Ok dd - convert and copy a file Ok df - report free disk space Ok, with the gLSB execption that df w/o -k determined (1k vs. 512). The 512-blocks can be enforced using POSIXLY_CORRECT diff - compare two files Ok (for the i18n problems, see mailing list) dirname - return the directory portion of a pathname Ok dot - execute commands in the current environment Part of Bash du - estimate file space usage Ok, with the gLSB execption that df w/o -k determined (1k vs. 512). The 512-blocks can be enforced using POSIXLY_CORRECT echo - write arguments to standard output /bin/echo is complient (w/o XSI) Bash's echo is neither since -e etc. is not printed as -e" etc. With regard to the XSI: \n etc. os not replaced (unless -e is given) and -n is not printed as "-n" as required on XSI systems ed - edit text I think 'ed' is complient (but for me a complient ed and 'while :; do read; echo "?"; done' the same) env - set the environment for command invocation I think it's complient eval - construct command by concatenating arguments Part of bash ex - text editor I think it's complient exec - execute commands and open, close, or copy file descriptors Part of bash exit - cause the shell to exit part of bash expand - convert tabs to spaces I think it's complient export - set the export attribute for variables Part of bash expr - evaluate arguments as an expression I think it's complient false - return false value Ok (both bash's as well as /bin/false) fc [UP] - process the command history list Part of bash fg [UP] - run jobs in the foreground Part of bash file - determine file type NOT COMPLIENT file [-dh][-M file][-m file] file ... file -i [-h] file ... SUS: -i If a file is a regular file, do not attempt to classify the type of the file furthe file: -i output mime type strings => -h, -M and -d don't exist => output format not checked. (if a file doesn't exists its output is diffent) ======> Report sent to 'christos at astron.com' Answer: 'I will definitely take a look.' (4 Oct 2003)