mirror of https://github.com/mkerrisk/man-pages
240 lines
6.3 KiB
Groff
240 lines
6.3 KiB
Groff
|
.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
|
||
|
.TH "BASENAME" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
|
||
|
.\" basename
|
||
|
.SH NAME
|
||
|
basename \- return non-directory portion of a pathname
|
||
|
.SH SYNOPSIS
|
||
|
.LP
|
||
|
\fBbasename\fP \fIstring\fP \fB[\fP\fIsuffix\fP\fB]\fP
|
||
|
.SH DESCRIPTION
|
||
|
.LP
|
||
|
The \fIstring\fP operand shall be treated as a pathname, as defined
|
||
|
in the Base Definitions volume of
|
||
|
IEEE\ Std\ 1003.1-2001, Section 3.266, Pathname. The string
|
||
|
\fIstring\fP shall be converted to the filename corresponding to the
|
||
|
last pathname component in \fIstring\fP and then the suffix
|
||
|
string \fIsuffix\fP, if present, shall be removed. This shall be done
|
||
|
by performing actions equivalent to the following steps in
|
||
|
order:
|
||
|
.IP " 1." 4
|
||
|
If \fIstring\fP is a null string, it is unspecified whether the resulting
|
||
|
string is \fB'.'\fP or a null string. In either
|
||
|
case, skip steps 2 through 6.
|
||
|
.LP
|
||
|
.IP " 2." 4
|
||
|
If \fIstring\fP is \fB"//"\fP , it is implementation-defined whether
|
||
|
steps 3 to 6 are skipped or processed.
|
||
|
.LP
|
||
|
.IP " 3." 4
|
||
|
If \fIstring\fP consists entirely of slash characters, \fIstring\fP
|
||
|
shall be set to a single slash character. In this case,
|
||
|
skip steps 4 to 6.
|
||
|
.LP
|
||
|
.IP " 4." 4
|
||
|
If there are any trailing slash characters in \fIstring\fP, they shall
|
||
|
be removed.
|
||
|
.LP
|
||
|
.IP " 5." 4
|
||
|
If there are any slash characters remaining in \fIstring\fP, the prefix
|
||
|
of \fIstring\fP up to and including the last slash
|
||
|
character in \fIstring\fP shall be removed.
|
||
|
.LP
|
||
|
.IP " 6." 4
|
||
|
If the \fIsuffix\fP operand is present, is not identical to the characters
|
||
|
remaining in \fIstring\fP, and is identical to a
|
||
|
suffix of the characters remaining in \fIstring\fP, the suffix \fIsuffix\fP
|
||
|
shall be removed from \fIstring\fP. Otherwise,
|
||
|
\fIstring\fP is not modified by this step. It shall not be considered
|
||
|
an error if \fIsuffix\fP is not found in \fIstring\fP.
|
||
|
.LP
|
||
|
.LP
|
||
|
The resulting string shall be written to standard output.
|
||
|
.SH OPTIONS
|
||
|
.LP
|
||
|
None.
|
||
|
.SH OPERANDS
|
||
|
.LP
|
||
|
The following operands shall be supported:
|
||
|
.TP 7
|
||
|
\fIstring\fP
|
||
|
A string.
|
||
|
.TP 7
|
||
|
\fIsuffix\fP
|
||
|
A string.
|
||
|
.sp
|
||
|
.SH STDIN
|
||
|
.LP
|
||
|
Not used.
|
||
|
.SH INPUT FILES
|
||
|
.LP
|
||
|
None.
|
||
|
.SH ENVIRONMENT VARIABLES
|
||
|
.LP
|
||
|
The following environment variables shall affect the execution of
|
||
|
\fIbasename\fP:
|
||
|
.TP 7
|
||
|
\fILANG\fP
|
||
|
Provide a default value for the internationalization variables that
|
||
|
are unset or null. (See the Base Definitions volume of
|
||
|
IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
|
||
|
for
|
||
|
the precedence of internationalization variables used to determine
|
||
|
the values of locale categories.)
|
||
|
.TP 7
|
||
|
\fILC_ALL\fP
|
||
|
If set to a non-empty string value, override the values of all the
|
||
|
other internationalization variables.
|
||
|
.TP 7
|
||
|
\fILC_CTYPE\fP
|
||
|
Determine the locale for the interpretation of sequences of bytes
|
||
|
of text data as characters (for example, single-byte as
|
||
|
opposed to multi-byte characters in arguments).
|
||
|
.TP 7
|
||
|
\fILC_MESSAGES\fP
|
||
|
Determine the locale that should be used to affect the format and
|
||
|
contents of diagnostic messages written to standard
|
||
|
error.
|
||
|
.TP 7
|
||
|
\fINLSPATH\fP
|
||
|
Determine the location of message catalogs for the processing of \fILC_MESSAGES
|
||
|
\&.\fP
|
||
|
.sp
|
||
|
.SH ASYNCHRONOUS EVENTS
|
||
|
.LP
|
||
|
Default.
|
||
|
.SH STDOUT
|
||
|
.LP
|
||
|
The \fIbasename\fP utility shall write a line to the standard output
|
||
|
in the following format:
|
||
|
.sp
|
||
|
.RS
|
||
|
.nf
|
||
|
|
||
|
\fB"%s\\n", <\fP\fIresulting string\fP\fB>
|
||
|
\fP
|
||
|
.fi
|
||
|
.RE
|
||
|
.SH STDERR
|
||
|
.LP
|
||
|
The standard error shall be used only for diagnostic messages.
|
||
|
.SH OUTPUT FILES
|
||
|
.LP
|
||
|
None.
|
||
|
.SH EXTENDED DESCRIPTION
|
||
|
.LP
|
||
|
None.
|
||
|
.SH EXIT STATUS
|
||
|
.LP
|
||
|
The following exit values shall be returned:
|
||
|
.TP 7
|
||
|
\ 0
|
||
|
Successful completion.
|
||
|
.TP 7
|
||
|
>0
|
||
|
An error occurred.
|
||
|
.sp
|
||
|
.SH CONSEQUENCES OF ERRORS
|
||
|
.LP
|
||
|
Default.
|
||
|
.LP
|
||
|
\fIThe following sections are informative.\fP
|
||
|
.SH APPLICATION USAGE
|
||
|
.LP
|
||
|
The definition of \fIpathname\fP specifies implementation-defined
|
||
|
behavior for pathnames starting with two slash characters.
|
||
|
Therefore, applications shall not arbitrarily add slashes to the beginning
|
||
|
of a pathname unless they can ensure that there are more
|
||
|
or less than two or are prepared to deal with the implementation-defined
|
||
|
consequences.
|
||
|
.SH EXAMPLES
|
||
|
.LP
|
||
|
If the string \fIstring\fP is a valid pathname:
|
||
|
.sp
|
||
|
.RS
|
||
|
.nf
|
||
|
|
||
|
\fB$(basename "\fP\fIstring\fP\fB")
|
||
|
\fP
|
||
|
.fi
|
||
|
.RE
|
||
|
.LP
|
||
|
produces a filename that could be used to open the file named by \fIstring\fP
|
||
|
in the directory returned by:
|
||
|
.sp
|
||
|
.RS
|
||
|
.nf
|
||
|
|
||
|
\fB$(dirname "\fP\fIstring\fP\fB")
|
||
|
\fP
|
||
|
.fi
|
||
|
.RE
|
||
|
.LP
|
||
|
If the string \fIstring\fP is not a valid pathname, the same algorithm
|
||
|
is used, but the result need not be a valid filename.
|
||
|
The \fIbasename\fP utility is not expected to make any judgements
|
||
|
about the validity of \fIstring\fP as a pathname; it just
|
||
|
follows the specified algorithm to produce a result string.
|
||
|
.LP
|
||
|
The following shell script compiles \fB/usr/src/cmd/cat.c\fP and moves
|
||
|
the output to a file named \fBcat\fP in the current
|
||
|
directory when invoked with the argument \fB/usr/src/cmd/cat\fP or
|
||
|
with the argument \fB/usr/src/cmd/cat.c\fP:
|
||
|
.sp
|
||
|
.RS
|
||
|
.nf
|
||
|
|
||
|
\fBc99 $(dirname "$1")/$(basename "$1" .c).c
|
||
|
mv a.out $(basename "$1" .c)
|
||
|
\fP
|
||
|
.fi
|
||
|
.RE
|
||
|
.SH RATIONALE
|
||
|
.LP
|
||
|
The behaviors of \fIbasename\fP and \fIdirname\fP have been coordinated
|
||
|
so that when
|
||
|
\fIstring\fP is a valid pathname:
|
||
|
.sp
|
||
|
.RS
|
||
|
.nf
|
||
|
|
||
|
\fB$(basename "\fP\fIstring\fP\fB")
|
||
|
\fP
|
||
|
.fi
|
||
|
.RE
|
||
|
.LP
|
||
|
would be a valid filename for the file in the directory:
|
||
|
.sp
|
||
|
.RS
|
||
|
.nf
|
||
|
|
||
|
\fB$(dirname "\fP\fIstring\fP\fB")
|
||
|
\fP
|
||
|
.fi
|
||
|
.RE
|
||
|
.LP
|
||
|
This would not work for the early proposal versions of these utilities
|
||
|
due to the way it specified handling of trailing
|
||
|
slashes.
|
||
|
.LP
|
||
|
Since the definition of \fIpathname\fP specifies implementation-defined
|
||
|
behavior for pathnames starting with two slash
|
||
|
characters, this volume of IEEE\ Std\ 1003.1-2001 specifies similar
|
||
|
implementation-defined behavior for the \fIbasename\fP
|
||
|
and \fIdirname\fP utilities.
|
||
|
.SH FUTURE DIRECTIONS
|
||
|
.LP
|
||
|
None.
|
||
|
.SH SEE ALSO
|
||
|
.LP
|
||
|
\fIParameters and Variables\fP , \fIdirname\fP()
|
||
|
.SH COPYRIGHT
|
||
|
Portions of this text are reprinted and reproduced in electronic form
|
||
|
from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
|
||
|
-- Portable Operating System Interface (POSIX), The Open Group Base
|
||
|
Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
|
||
|
Electrical and Electronics Engineers, Inc and The Open Group. In the
|
||
|
event of any discrepancy between this version and the original IEEE and
|
||
|
The Open Group Standard, the original IEEE and The Open Group Standard
|
||
|
is the referee document. The original Standard can be obtained online at
|
||
|
http://www.opengroup.org/unix/online.html .
|