仅本页所有页面
由 GitBook 提供支持
无法为422页生成 PDF,生成在100页时停止。
使用50页进行扩展。
1 / 100

FreeBSD 中文 man 手册

Loading...

man1

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

man

机器翻译,仅供参考。若有不对,提交 PR。

译者:冰 ice

在线阅读地址:https://man.bsdcn.org/

chkey.1

CHKEY(1)

CHKEY(1)

FreeBSD General Commands Manual

CHKEY(1)

名称

chkey —

更改您的加密密钥

chkey

chkey 实用程序提示用户输入登录密码,并使用它为用户加密一个新的加密密钥,以便存储在 publickey(5) 数据库中。

keylogin(1), publickey(5), keyserv(8), newkey(8)

July 5, 1989

FreeBSD 13.1-RELEASE

概要
描述
参见

apply.1

APPLY(1)

APPLY(1)

FreeBSD General Commands Manual

APPLY(1)

名称

apply —

将命令应用于一组参数

apply [-a c] [-d] [-#] command argument ...

apply 实用程序依次对每个参数 argument 运行 command 命令。

command 中 “%d” 形式的字符序列,其中 ‘d’ 是从 1 到 9 的数字,被后面的第 d 个未使用的 argument 替换。 在这种情况下,每次执行 command 都会丢弃最大位数的参数。

选项如下:

通常,论点是单独提出的;可选数字 -# 指定要传递给 command 的参数数量。 如果数字为零,则对每个 argument 运行一次 command ,不带参数。

如果 command 中出现任何 “%d” 序列,则忽略 -# 选项。

c

使用 -a 选项可以更改使用字符 ‘%’ 作为魔术字符。

显示本应执行但不实际执行的命令。

以下环境变量影响 apply 的执行:

要使用的 shell 的路径名。 如果未定义此变量,则使用 Bourne shell。

/bin/sh

默认 shell

类似于 ls(1);

比较 `a' 文件和 `b' 文件;

运行 who(1) 5 次;

将当前目录中的所有文件链接到目录 /usr/joe 。

apply 命令出现在 4.2BSD 中。

Rob Pike

command 中的 shell 元字符可能会产生奇怪的效果;最好将复杂的命令用单引号 ('') 括起来。

apply 实用程序无法识别多字节字符。

December 13, 2006

FreeBSD 13.1-RELEASE

bsdcat.1

BSDCAT(1)

BSDCAT(1)

FreeBSD General Commands Manual

BSDCAT(1)

名称

bsdcat —

扩展文件到标准输出

bsdcat [options] [files]

bsdcat 将文件扩展为标准输出。

bsdcat 通常将文件名作为参数或在管道中使用时读取标准输入。在这两种情况下,它都将解压缩的数据写入标准输出。

解压文件:

bsdcat example.txt.gz > example.txt

在管道中解压缩标准输入:

cat example.txt.gz | bsdcat > example.txt

这两个示例都实现了相同的结果——通过重定向输出来解压缩文件。

bzcat(1) 、 uncompress(1) 、 xzcat(1) 、 zcat(1) 、 libarchive-formats(5)

March 1, 2014

FreeBSD 13.1-RELEASE

enigma.1

ENIGMA(1)

ENIGMA(1)

FreeBSD General Commands Manual

ENIGMA(1)

名称

enigma, crypt —

非常简单的文件加密

enigma [-s] [-k] [password] crypt [-s] [-k] [password]

enigma 实用程序,也称为 crypt 是一个 非常 简单的加密程序,在 “secret-key” 基础上工作。 它作为过滤器运行,即,它加密或解密来自标准输入的数据流,并将结果写入标准输出。 由于它的操作是完全对称的,通过引擎再次输入加密数据流(使用相同的密钥)将对其进行解密。

有几种方法可以为程序提供密钥。 默认情况下,程序会使用 getpass(3) 在控制终端上提示用户输入密钥。 这是提供它的唯一安全方式。

或者,可以在启动程序时将密钥作为唯一的命令行参数 password 提供。 显然,通过这种方式,其他运行 ps(1) 的用户很容易发现密钥。 作为另一种选择,可以为 enigma 提供选项 -k, 它将从环境变量 CrYpTkEy 中获取密钥。 虽然乍一看这似乎比前一个选项更安全,但实际上并非如此,因为环境变量也可以使用 ps(1) 检查。 因此,提供此选项主要是为了与 enigma 的其他实现兼容。

当指定选项 -s 时, enigma 会修改加密引擎,使其更安全一些,但与其他实现不兼容。

enigma 的密码价值相当小。 此处提供此程序只是为了与也提供实现的其他操作系统兼容(通常在此处称为 crypt(1) )。 对于真正的加密,请参阅 openssl(1) 或 gpg(1) (security/gnupg1) 。

用于在给出选项 -k 时获取密钥

man enigma | enigma > encrypted Enter key: (XXX — key not echoed)

这将创建此手册页的加密形式,并将其存储在 encrypted 的文件中。

enigma XXX < encrypted

这将在终端上显示先前创建的文件。

gpg(1), openssl(1), ps(1), getpass(3)

crypt 的实现在 UNIX 操作系统中非常普遍。- 此实现取自公共领域的 Cryptbreakers Workbench 。

May 8, 2018

FreeBSD 13.1-RELEASE

column.1

COLUMN(1)

COLUMN(1)

FreeBSD General Commands Manual

COLUMN(1)

column —

btsockstat.1

BTSOCKSTAT(1)

BTSOCKSTAT(1)

FreeBSD General Commands Manual

BTSOCKSTAT(1)

btsockstat —

fsync.1

FSYNC(1)

FSYNC(1)

FreeBSD General Commands Manual

FSYNC(1)

fsync —

概要
描述
-#
-a
-d
环境
SHELL
文件
实例
apply echo *
apply -2 cmp a1 b1 a2 b2 a3 b3
apply -0 who 1 2 3 4 5
apply ´ln %1 /usr/joe´ *
历史
作者
缺陷
概要
描述
选项
实例
参见
概要
描述
警告
环境
CrYpTkEy
实例
参见
历史
columnate lists

概要

column [-tx] [-c columns] [-s sep] [file ...]

描述

column 实用程序将其输入格式化为多个列。行在列之前填充。 输入来 file 操作数,或者默认情况下来自标准输入。 空行被忽略。

选项如下:

-c

输出格式化为显示 columns 宽。

-s

为 -t 选项指定一组用于分隔列的字符。

-t

确定输入包含的列数并创建一个表。 默认情况下,列使用空格或使用 -s 选项提供的字符分隔。 对于漂亮的打印显示很有用。

-x

在填充行之前填充列。

环境

COLUMNS 、 LANG 、 LC_ALL 和 LC_CTYPE 环境变量会影响 column 的执行,如 environ(7) 中所述。

退出状态

The column utility exits 0 on success, and >0 if an error occurs.

实例

(printf "PERM LINKS OWNER GROUP SIZE MONTH DAY " ; \

printf "HH:MM/YEAR NAME\n" ; \

ls -l | sed 1d) | column -t

参见

colrm(1), ls(1), paste(1), sort(1)

历史

column 命令出现在 4.3BSD-Reno 中。

缺陷

输入行的长度限制为 LINE_MAX (2048) 个字节。

July 29, 2004

FreeBSD 13.1-RELEASE

名称
显示蓝牙套接字信息

概要

btsockstat [-nrh] [-M core] [-p protocol]

描述

btsockstat 实用程序象征性地显示各种蓝牙套接字相关数据结构的内容。 输出格式很少,具体取决于所提供信息的选项。 btsockstat 实用程序会将结果打印到标准输出,并将错误消息打印到标准错误。

选项如下:

-h

显示使用信息并退出。

-M core

从指定的核心而不是默认的 /dev/kmem 中提取与名称列表关联的值。

-n

将蓝牙地址显示为数字。 通常, btsockstat 会尝试解析蓝牙地址,并象征性地显示它们。

-p protocol

显示每个指定协议的活动套接字(协议控制块)列表。 支持的协议有: hci_raw 、 l2cap_raw 、 l2cap、 rfcomm 和 rfcomm_s 。

-r

显示指定协议的活动路由条目(如果有)列表。

退出状态

The btsockstat utility exits 0 on success, and >0 if an error occurs.

参见

ng_btsocket(4)

作者

Maksim Yevmenkin <[email protected]>

缺陷

最有可能的。如果发现请报告。

October 12, 2003

FreeBSD 13.1-RELEASE

名称
将文件的内核状态与磁盘上的同步

概要

fsync file ...

描述

fsync 实用程序将命令行上命名的所有文件的所有修改数据和元数据写入永久存储设备。

fsync 实用程序使用 fsync(2) 函数调用。

退出状态

如果发生错误, fsync 实用程序会继续处理下一个文件,并退出 >0。否则,它退出 0。

参见

fsync(2), sync(2), syncer(4), halt(8), reboot(8)

历史

fsync 命令最早出现在 FreeBSD 4.3 中。

January 25, 2005

FreeBSD 13.1-RELEASE

名称

colrm.1

COLRM(1)

COLRM(1)

FreeBSD General Commands Manual

COLRM(1)

名称

colrm —

从文件中删除列

colrm [start [stop]]

colrm 实用程序从文件的行中删除选定的列。 列定义为一行中的单个字符。 从标准输入读取输入。 输出被写入标准输出。

如果只指定了 start 列,则将写入编号小于 start 列的列。 如果同时指定了 start 列和 stop 列,则将写入编号小于 start 列或大于 stop 列的列。 列编号从一开始,而不是零。

制表符将列计数增加到下一个八的倍数。 退格字符将列计数减一。

LANG 、 LC_ALL 和 LC_CTYPE 环境变量会影响 colrm 的执行,如 environ(7) 中所述。

The colrm utility exits 0 on success, and >0 if an error occurs.

显示低于 3 (c) 和高于 5 (e) 的列:

$ echo -e "abcdefgh\n12345678" | colrm 3 5 abfgh 12678

允许指定大于文件中列数的起始列并显示所有列:

$ echo "abcdefgh" | colrm 100 abcdefgh

使用 1 作为开始列将不显示任何内容:

$ echo "abcdefgh" | colrm 1

awk(1), column(1), cut(1), paste(1)

colrm 实用程序首先出现在 1BSD 中。

Jeff Schriebman 于 1974 年 11 月编写了 colrm 的原始版本。

June 23, 2020

FreeBSD 13.1-RELEASE

crypt.1

ENIGMA(1)

ENIGMA(1)

FreeBSD General Commands Manual

ENIGMA(1)

名称

enigma, crypt —

非常简单的文件加密

enigma [-s] [-k] [password] crypt [-s] [-k] [password]

enigma 实用程序,也称为 crypt 是一个 非常 简单的加密程序,在 “secret-key” 基础上工作。 它作为过滤器运行,即,它加密或解密来自标准输入的数据流,并将结果写入标准输出。 由于它的操作是完全对称的,通过引擎再次输入加密数据流(使用相同的密钥)将对其进行解密。

有几种方法可以为程序提供密钥。 默认情况下,程序会使用 getpass(3) 在控制终端上提示用户输入密钥。 这是提供它的唯一安全方式。

或者,可以在启动程序时将密钥作为唯一的命令行参数 password 提供。 显然,通过这种方式,其他运行 ps(1) 的用户很容易发现密钥。 作为另一种选择,可以为 enigma 提供选项 -k, 它将从环境变量 CrYpTkEy 中获取密钥。 虽然乍一看这似乎比前一个选项更安全,但实际上并非如此,因为环境变量也可以使用 ps(1) 检查。 因此,提供此选项主要是为了与 enigma 的其他实现兼容。

当指定选项 -s 时, enigma 会修改加密引擎,使其更安全一些,但与其他实现不兼容。

enigma 的密码价值相当小。 此处提供此程序只是为了与也提供实现的其他操作系统兼容(通常在此处称为 crypt(1) )。 对于真正的加密,请参阅 openssl(1) 或 gpg(1) (security/gnupg1) 。

用于在给出选项 -k 时获取密钥

man enigma | enigma > encrypted Enter key: (XXX — key not echoed)

这将创建此手册页的加密形式,并将其存储在 encrypted 的文件中。

enigma XXX < encrypted

这将在终端上显示先前创建的文件。

gpg(1), openssl(1), ps(1), getpass(3)

crypt 的实现在 UNIX 操作系统中非常普遍。- 此实现取自公共领域的 Cryptbreakers Workbench 。

May 8, 2018

FreeBSD 13.1-RELEASE

groups.1

GROUPS(1)

GROUPS(1)

FreeBSD General Commands Manual

GROUPS(1)

名称

groups —

show group memberships

groups [user]

The groups- 实用程序已被 id(1) 实用程序淘汰,相当于 “id -Gn [user]” 。 建议将命令 “id -p” 用于正常的交互使用。

groups 实用程序显示您(或可选指定的用户)所属的组。

The groups utility exits 0 on success, and >0 if an error occurs.

显示 root 用户所属的组:

$ groups root wheel operator

id(1)

June 6, 1993

FreeBSD 13.1-RELEASE

dirname.1

BASENAME(1)

BASENAME(1)

FreeBSD General Commands Manual

BASENAME(1)

名称

basename, dirname —

返回路径名的文件名或目录部分

basename string [suffix] basename [-a] [-s suffix] string [...] dirname string [...]

basename 实用程序删除任何以 string 中存在的最后一个斜杠 ‘/’ 字符结尾的前缀(在第一次去除尾随斜杠之后)和 suffix 如果给定的话。 如果 suffix 与 string 中的其余字符相同,则不会去除后缀。 结果文件名被写入标准输出。 不存在的后缀将被忽略。 如果指定了 -a ,则每个参数都被视为一个 string ,就好像只使用一个参数调用了 basename 。 如果指定了 -s ,则将 suffix 作为其参数,并将所有其他参数视为 string 。

dirname 实用程序删除文件名部分,从最后一个斜杠 ‘/’ 字符开始到 string 的末尾(在第一次去除尾部斜杠之后),并将结果写入标准输出。

The basename and dirname utilities exit 0 on success, and >0 if an error occurs.

以下行将 shell 变量 FOO 设置为 /usr/bin 。

FOO=`dirname /usr/bin/trail`

csh(1), sh(1), basename(3), dirname(3)

basename 和 dirname 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。

basename 和 dirname 实用程序首先出现在 4.4BSD 中。

May 26, 2020

FreeBSD 13.1-RELEASE

cksum.1

CKSUM(1)

CKSUM(1)

FreeBSD General Commands Manual

CKSUM(1)

名称

cksum, sum —

显示文件校验和和块计数

cksum [-o 1 | 2 | 3] [file ...] sum [file ...]

cksum 实用程序将每个输入文件的三个空格分隔字段写入标准输出。 这些字段是校验和 CRC 、文件中的八位字节总数和文件名。 如果未指定文件名,则使用标准输入并且不写入文件名。

sum 实用程序与 cksum 实用程序相同,只是它默认使用历史算法 1,如下所述。 它只是为了兼容性而提供的。

选项如下:

使用历史算法而不是(高级)默认算法。

算法 1 是历史 BSD 系统用作 sum(1) 算法和历史 AT&T System V UNIX 系统在使用 -r 选项时用作 sum(1) 算法的算法。 这是一个 16 位的校验和,每次加法前都有一个右旋转;溢出被丢弃。

算法 2 是历史上 AT&T System V UNIX 系统用作默认 sum(1) 算法的算法。 这是一个 32 位校验和,定义如下:

s = sum of all bytes; r = s % 2^16 + (s % 2^32) / 2^16; cksum = (r % 2^16) + r / 2^16;

算法 3 就是通常所说的 ‘32 位 CRC’ 算法。 这是一个 32 位校验和。

算法 1 和 2 都向标准输出写入与默认算法相同的字段,只是文件大小(以字节为单位)被替换为文件的大小(以块为单位)。 由于历史原因,算法 1 的块大小为 1024,算法 2 的块大小为 512。 部分区块被四舍五入。

使用的默认 CRC 基于网络标准 ISO 8802-3: 1989 中用于 CRC 错误检查的多项式。 CRC 校验和编码由生成多项式定义:

G(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1

在数学上,与给定文件对应的 CRC 值由以下过程定义:

要评估的 n 位被认为是 n-1 次的 mod 2 多项式 M(x) 的系数。 这 n 位是文件中的位,最高有效位是文件第一个八位字节的最高有效位,最后一位是最后一个八位字节的最低有效位,用零位(如果需要)填充以获得整数个八位位组,后跟一个或多个八位位组,将文件的长度表示为二进制值,最低有效八位位组在前。 使用能够表示该整数的最少八位字节数。

M(x) 乘以 x^32(即左移 32 位)并使用 mod 2 除法除以 G(x),产生度数 <= 31 的余数 R(x)。

R(x) 的系数被认为是一个 32 位序列。

对位序列进行补码,结果为 CRC。

The cksum and sum utilities exit 0 on success, and >0 if an error occurs.

md5(1)

默认计算与以下 ACM 文章中的伪代码中给出的计算相同。 Dilip V. Sarwate, Computation of Cyclic Redundancy Checks Via Table Lookup, Communications of the Tn ACM, August 1988.

cksum 实用程序应符合 IEEE Std 1003.2-1992 (“POSIX.2”) 。

cksum 实用程序出现在 4.4BSD 中。

April 28, 1995

FreeBSD 13.1-RELEASE

addr2line.1

ADDR2LINE(1)

ADDR2LINE(1)

FreeBSD General Commands Manual

ADDR2LINE(1)

addr2line —

cut.1

CUT(1)

CUT(1)

FreeBSD General Commands Manual

CUT(1)

cut —

概要
描述
环境
退出状态
实例
参见
历史
作者
概要
描述
警告
环境
CrYpTkEy
实例
参见
历史
概要
描述
退出状态
实例
参见
概要
描述
退出状态
实例
参见
标准
历史
概要
描述
-o
退出状态
参见
标准
历史
将程序地址转换为源文件名和行号

概要

addr2line [-a | --addresses] [-b target | --target=target] [-e pathname | --exe=pathname] [-f | --functions] [-i | --inlines] [-j sectionname | --section=sectionname] [-p | --pretty-print] [-s | --basename] [-C | --demangle] [-H | --help] [-V | --version] [hexaddress...]

描述

addr2line 实用程序将命令行参数 hexaddress 指定的程序地址转换为其相应的源文件名和行号。如果没有给 addr2line, 参数,它将从标准输入中读取这些地址。

由参数 hexaddress 指定的程序地址使用 strtoull(3) 接受的约定进行编码。

默认情况下, addr2line 将使用可执行文件 “a.out 。” -e 选项可用于指定不同的 ELF 对象。

addr2line 实用程序可识别以下选项:

-a | --addresses

行号信息之前显示地址。

-b target | --target=target

此选项可被 addr2line 识别但被忽略。 支持它是为了与 GNU binutils 兼容。

-e pathname | --exe=pathname

使用参数 pathname 指定的 ELF 对象来转换地址。 如果未指定此选项, addr2line 将使用文件 “a.out 。”

-f | --functions

除文件和行号信息外,还显示函数名称。

-i | --inlines

如果指定的地址属于内联函数,则还显示其调用者的行号信息,递归直到第一个非内联调用者。

-j sectionname | --section=sectionname

由参数 hexaddress 指定的值将被视为在名为 sectionname 的部分中的偏移量。

-p | --pretty-print

以人类可读的方式在一行中显示行号信息。

-s | --basename

仅显示每个文件名的基本名称。

-C | --demangle

去除 C++ 名称。

-H | --help

打印帮助信息。

-V | --version

打印版本标识符并退出。

输出格式

如果未指定 -f 选项, addr2line 将在单独的行上为每个指定的地址打印文件名和行号。

如果指定 -f 选项, addr2line 将打印一行,其中包含对应于程序地址 hexaddress 的函数名称,然后是包含文件名和行号的行。

如果指定 -p 选项, addr2line 将以人类可读的方式在一行上打印行号信息和函数名称。如果还指定 -i 选项, addr2line 将打印以 “(inlined by) 为前缀的调用函数信息。”

addr2line 实用程序使用 “FILENAME:LINENUMBER 格式打印文件名和行号。”

如果无法确定文件或函数名, addr2line 将在其位置打印一个问号。如果无法确定行号, addr2line 将在其位置打印一个零。

实例

要将默认可执行文件 a.out 中的地址 080483c4 映射到源文件名和行号,请使用:

% addr2line 080483c4

要在可执行的 helloworld 中映射地址 080483c4,请使用:

% addr2line -e helloworld 080483c4

要让 addr2line 充当从其标准输入中读取地址的过滤器,请使用:

% addr2line

除了源文件和行号之外,要打印与地址对应的函数名称,请使用:

% addr2line -f 080483c4

退出状态

The addr2line utility exits 0 on success, and >0 if an error occurs.

参见

nm(1), elfdump(1), elfcopy(1), strtoull(3)

作者

addr2line 实用程序由 Kai Wang 编写 <[email protected] 。>

November 30, 2015

FreeBSD 13.1-RELEASE

命令
剪切文件每一行的选定部分

概要

cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-w | -d delim] [-s] [file ...]

描述

cut 实用程序从每个 file 中剪切出每一行的选定部分(由 list 指定)并将它们写入标准输出。 如果未指定 file 参数,或者文件参数是单个破折号 (‘-’) ,则从标准输入 cut 读取。 list 指定的项目可以是列位置,也可以是由特殊字符分隔的字段。 列和字段编号从 1 开始。

list 选项参数是逗号或空格分隔的一组递增数字和/或数字范围。 数字范围由一个数字、一个破折号 (‘-’) 和第二个数字组成,并选择从第一个数字到第二个数字的列或字段(包括首个数字)。 数字或数字范围前面可以有一个破折号,它选择从 1 到最后一个数字的所有列或字段。 数字或数字范围后面可以跟一个短划线,它选择从最后一个数字到行尾的所有列或字段。 数字和数字范围可以以任何顺序重复、重叠。 选择输入行中不存在的列或字段不是错误。

选项如下:

-b list

该 list 指定字节位置。

-c list

该 list 指定字符位置。

-d delim

使用 delim 作为字段分隔符而不是制表符。

-f list

该 list 指定字段,在输入中由字段分隔符分隔(请参阅 -d 选项)。 输出字段由一次出现的字段分隔符分隔。

-n

不要拆分多字节字符。 仅当至少选择了一个字节时才会输出字符,并且在零个或多个未选择字节的前缀之后,选择构成字符的其余字节。

-s

禁止没有字段分隔符的行。 除非指定,否则不带分隔符的行将不加修改地通过。

-w

使用空格(空格和制表符)作为分隔符。 连续的空格和制表符算作一个字段分隔符。

环境

LANG 、 LC_ALL 和 LC_CTYPE 环境变量影响 cut 的执行,如 environ(7) 中所述。

退出状态

The cut utility exits 0 on success, and >0 if an error occurs.

实例

从系统 passwd(5) 文件中提取用户的登录名和 shell 作为 “name:shell” 对:

cut -d : -f 1,7 /etc/passwd

显示当前登录用户的名称和登录时间:

who | cut -c 1-16,26-38

参见

colrm(1), paste(1)

标准

cut 实用程序符合 IEEE Std 1003.2-1992 (“POSIX.2”) 。

-w 标志是规范的扩展。

历史

在 AT&T System III UNIX 中出现了 cut 命令。

August 3, 2017

FreeBSD 13.1-RELEASE

名称

cat.1

CAT(1)

CAT(1)

FreeBSD General Commands Manual

CAT(1)

名称

cat —

连接并打印文件

cat [-belnstuv] [file ...]

cat 实用程序按顺序读取文件,并将它们写入标准输出。 file 操作数按命令行顺序处理。 如果 file 是单个破折号 (‘-’) 或不存在,则 cat 从标准输入读取。 如果 file 是 UNIX 域套接字,则 cat 连接到它,然后读取它直到 EOF 。 这补充了 inetd(8) 中可用的 UNIX 域绑定功能。

选项如下:

对非空白输出行编号,从 1 开始。

显示非打印字符(参见 -v 选项),并在每行的末尾显示一个美元符号 (‘$’) 。

在标准输出文件描述符上设置排他咨询锁。 这个锁是使用 fcntl(2) 和 F_SETLKW 命令设置的。 如果输出文件已经被锁定, cat 将阻塞直到获得锁定。

对输出行编号,从 1 开始。

挤压多个相邻的空行,导致输出为单行距。

显示非打印字符(参见 -v 选项),并将制表符显示为 ‘^I’ 。

禁用输出缓冲。

显示非打印字符,使其可见。 对于 control-X,控制字符打印为 ‘^X’ ;删除字符(八进制 0177)打印为 ‘^?’ 。 Non-ASCII 非 ASCII 字符(设置了高位)打印为 ‘M-’ (用于元),后跟低 7 位的字符。

The cat utility exits 0 on success, and >0 if an error occurs.

命令:

cat file1

将 file1 的内容打印到标准输出。

命令:

cat file1 file2 > file3

将依次将 file1 和 file2 的内容打印到文件 file3, 如果 file3 已经存在则截断它。 有关重定向的更多信息,请参见您的 shell(例如 sh(1) )的手册页。

命令:

cat file1 - file2 - file3

将打印 file1 的内容,打印从标准输入接收到的数据,直到收到 EOF (‘^D’) 字符,打印 file2 的内容,再次读取并输出标准输入的内容,最后输出 file3 。 请注意,如果标准输入引用了一个文件,那么命令行上的第二个破折号将不起作用,因为当 cat 遇到第一个 ‘-’ 操作数时,文件的全部内容已经被读取并打印了。

head(1), more(1), pr(1), sh(1), tail(1), vis(1), zcat(1), fcntl(2), setbuf(3) Rob Pike, UNIX Style, or cat -v Considered Harmful, USENIX Summer Conference Proceedings, 1983.

cat 实用程序符合 IEEE Std 1003.2-1992 (“POSIX.2”) 规范。

标志 [-belnstv] 是规范的扩展。

cat 实用程序出现在 Version 1 AT&T UNIX 中。 Dennis Ritchie 设计并编写了第一个手册页。 似乎是为了 cat 。

由于用于执行输出重定向的 shell 语言机制,命令 “cat file1 file2 > file1” 将导致 file1 中的原始数据被破坏!

当 -t 或 -v 选项生效时, cat 实用程序无法识别多字节字符。

January 29, 2013

FreeBSD 13.1-RELEASE

fuser.1

FUSER(1)

FUSER(1)

FreeBSD General Commands Manual

FUSER(1)

名称

fuser —

列出打开一个或多个文件的所有进程的 ID

fuser [-cfkmu] [-M core] [-N system] [-s signal] file ...

fuser 实用程序将打开一个或多个命名文件的进程的 PID 写入标准输出。 对于块和字符特殊设备,列出了使用该设备上文件的所有进程。 如果文件被显式打开,则认为文件被进程打开,它是工作目录、根目录、jail 根目录、活动的可执行文本、内核跟踪文件或进程的控制终端。 如果指定了 -m 选项,则 fuser 实用程序还将查看映射文件。

可以使用以下选项:

将文件视为挂载点并报告文件系统中打开的任何文件。

报告必须仅用于命名文件。

向报告的进程发送信号,默认为 (SIGKILL) 。

core

从指定的核心而不是默认的 /dev/kmem 中提取与名称列表关联的值。

也可以搜索映射文件。

system

从指定系统中提取名称列表,而不是从默认系统中引导的内核映像。

signal

使用给定的信号名称而不是默认的 SIGKILL 。

将每个进程关联的用户名写入stderr。

写入 stderr 的以下符号将指示文件的使用方式:

a

该文件仅作为附加打开,指定了 (O_APPEND) 。

c

该文件是进程的当前工作目录。

d

该进程在写入此文件时绕过 fs 缓存,指定了 (O_DIRECT) 。

e

排他锁处于保持状态。

j

该文件是该进程的 jail 根目录。

m

该文件已映射。

r

该文件是进程的根目录。

s

共享锁被持有。

t

该文件是进程的内核跟踪文件。

w

该文件已打开以供写入。

x

该文件是进程的可执行文本。

y

该进程使用此文件作为其控制 tty。

The fuser utility exits 0 on success, and >0 if an error occurs.

命令 ‘fuser -fu .’ 将使用当前目录的进程的进程 ID 写入标准输出,并将这些进程如何使用目录的指示以及与使用该目录的进程关联的用户名写入 stderr。

fstat(1), ps(1), systat(1), iostat(8), pstat(8), vmstat(8)

fuser 实用程序应符合 IEEE Std 1003.1-2004 (“POSIX.1”) 。

fuser 实用程序出现在 FreeBSD 9.0 中。

fuser 实用程序和本手册页由 Stanislav Sedov <> 编写。

由于 fuser 会拍摄系统快照,因此它只在很短的时间内正确。 当通过 kvm(3) 接口工作时,报告将仅限于 fuser 实用程序知道的文件系统(目前只有 cd9660、devfs、nfs、ntfs、nwfs、udf、ufs 和 zfs)。

June 18, 2020

FreeBSD 13.1-RELEASE

elfdump.1

ELFDUMP(1)

ELFDUMP(1)

FreeBSD General Commands Manual

ELFDUMP(1)

名称

elfdump —

显示有关 ELF 文件的信息

elfdump -a | -E | -cdeGhinprs [-w file] file

elfdump 实用程序转储有关指定 ELF 文件的各种信息。

选项如下:

转储所有信息。

转储节标题。

转储动态符号。

转储 ELF 标头。

如果 file 是 ELF 文件则返回成功,否则返回失败。 此选项与其他选项互斥。

转储 GOT。

转储散列值。

转储动态解释器。

转储笔记部分。

转储程序头。

转储重定位。

转储符号表。

file

将输出写 file 而不是标准输出。

The elfdump utility exits 0 on success, and >0 if an error occurs.

以下是 elfdump 命令的典型用法示例:

elfdump -a -w output /bin/ls

objdump(1), readelf(1)

AT&T Unix 系统实验室, System V 应用程序二进制接口, .

elfdump 实用程序首次出现在 FreeBSD 5.0 中。

elfdump 实用程序 Jake Burkholder <> 编写。 本手册页由 David O'Brien <> 编写。

没有完全实现 ELF gABI。

November 5, 2018

FreeBSD 13.1-RELEASE

cmp.1

CMP(1)

CMP(1)

FreeBSD General Commands Manual

CMP(1)

名称

cmp —

compare two files

cmp [-l | -s | -x] [-hz] file1 file2 [skip1 [skip2]]

cmp 实用程序比较任何类型的两个文件并将结果写入标准输出。默认情况下,如果文件相同,则 cmp 是静默的;如果它们不同,则报告出现第一个差异的字节和行号。

字节和行从一开始编号。

可以使用以下选项:

不要跟随符号链接。

, --verbose

打印每个差异的字节数(十进制)和不同的字节值(八进制)。

, --silent, --quiet

不打印不同文件;仅返回退出状态。

与 -l 类似,但以十六进制打印并使用零作为文件中第一个字节的索引。

对于常规文件,首先比较文件大小,如果不相等则比较失败。

可选参数 skip1 和 skip2 分别是从 file1 和 file2 开始的字节偏移量,比较将从这里开始。 默认情况下,偏移量是十进制的,但可以通过在其前面加上前导 “0x” 或 “0” 来表示为十六进制或八进制值。

cmp 实用程序以下列值之一退出:

0

这些文件是相同的。

1

文件不同;这包括一个文件与另一个文件的第一部分相同的情况。 在后一种情况下,如果未指定 -s 选项,则 cmp 将写入标准错误,即在较短的文件中已达到 EOF(在发现任何差异之前)。

>1

发生错误。

假设一个名为 example.txt 的文件具有以下内容:

a b c

将标准输入与 example.txt 进行比较:

$ echo -e "a\nb\nc" | cmp - example.txt

与上述相同,但在 stdin 的第三个字节中引入了更改。 显示字节数(十进制)和不同的字节(八进制):

$ echo -e "a\nR\nc" | cmp -l - example.txt 3 122 142

比较 example.txt 和 /boot/loader.conf 的文件大小,如果不相等则返回 1。 请注意, -z 只能用于常规文件:

$ cmp -z example.txt /boot/loader.conf example.txt /boot/loader.conf differ: size

比较 stdin 和 example.txt ,省略 stdin 的前 4 个字节和 example.txt 的前 2 个字节:

$ echo -e "a\nR\nb\nc" | cmp - example.txt 4 2

diff(1), diff3(1)

cmp 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。 -h -、 -x 和 -z 选项是标准的扩展。

在 Version 1 AT&T UNIX 中出现了 cmp 命令。

June 20, 2020

FreeBSD 13.1-RELEASE

atrm.1

AT(1)

AT(1)

FreeBSD General Commands Manual

AT(1)

at, batch,

概要
描述
-b
-e
-l
-n
-s
-t
-u
-v
退出状态
实例
参见
标准
历史
缺陷
概要
描述
-c
-f
-k
-M
-m
-N
-s
-u
退出状态
实例
参见
标准
历史
作者
[email protected]
缺陷
概要
描述
-a
-c
-d
-e
-E
-G
-h
-i
-n
-p
-r
-s
-w
退出状态
实例
SEE ALSO
http://www.sco.com/developers/gabi/
历史
作者
[email protected]
[email protected]
缺陷
概要
描述
-h
-l
-s
-x
-z
退出状态
实例
参见
标准
历史
atq
,
atrm
—

排队、检查或删除作业以供以后执行

概要

at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at -l -q queue at -r job [job ...]

atq [-q queue] [-v]

atrm job [job ...]

batch [-q queue] [-f file] [-mv] [time]

描述

at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。

at

在指定时间执行命令;

atq

列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;

atrm

删除工作;

batch

在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。

at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。

例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。

at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。

对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。

超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。

如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。

如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。

如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。

实现说明

请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。

选项

-q queue

使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。

-m

即使没有输出,也可以在作业完成后向用户发送邮件。

-f file

从 file 而不是标准输入中读取作业。

-l

不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。

-d

是 atrm 的别名(此选项已弃用;请改用 -r )。

-b

是 batch 的别名。

-v

对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。

-c

将命令行上列出的作业分类到标准输出。

-r

删除指定的作业。

-t

使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:

CC

年份的前两位数字(世纪)。

YY

年份的后两位数。

MM

一年中的月份,从 1 到 12。

DD

一个月中的第几天,从 1 到 31。

hh

一天中的小时,从 0 到 23。

mm

小时的分钟,从 0 到 59。

SS

分钟的秒数,从 0 到 60。

如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。

文件

/var/at/jobs

包含作业文件的目录

/var/at/spool

包含输出假脱机文件的目录

/var/run/utx.active

登录记录

/var/at/at.allow

允许权限控制

/var/at/at.deny

拒绝权限控制

/var/at/jobs/.lockfile

创造工作锁定文件

参见

nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)

作者

At 主要由 Thomas Koenig <[email protected]> 编写。 时间解析例程由 David Parsons <[email protected]> 编写, Joe Halpin <[email protected]> 进行了小幅改进。

缺陷

如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。

当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。

指定超过 2038 年的日期可能不适用于某些系统。

August 11, 2018

FreeBSD 13.1-RELEASE

名称

cp.1

CP(1)

CP(1)

FreeBSD General Commands Manual

CP(1)

名称

cp —

复制文件

cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpsvx] source_file target_file cp [-R [-H | -L | -P]] [

在第一个概要形式中, cp 实用程序将 source_file 的内容复制到 target_file 。 在第二种概要形式中,每个命名的 source_file 的内容都被复制到目标 target_directory 。 文件本身的名称不会更改。 如果 cp 检测到尝试将文件复制到自身,则复制将失败。

可以使用以下选项:

如果指定了 -R 选项,则遵循命令行上的符号链接。 (不遵循树遍历中遇到的符号链接。)

如果指定了 -R 选项,则遵循所有符号链接。

如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。

如果 source_file 指定一个目录,则 cp 复制该目录和在该点连接的整个子树。 如果 source_file 以 / 结尾,则复制目录的内容而不是目录本身。 此选项还导致复制符号链接,而不是间接通过,并让 cp 创建特殊文件而不是将它们复制为普通文件。 创建的目录与对应的源目录具有相同的模式,不被进程的umask修改。

请注意, cp 将硬链接文件复制为单独的文件。 如果您需要保留硬链接,请考虑使用 tar(1) 、 cpio(1) 或 pax(1) 。

存档模式。与 -RpP 相同。

对于每个现有的目标路径名,将其删除并创建一个新文件,无论其权限如何,都不会提示确认。 ( -f 选项覆盖任何以前的 -i 或 -n 选项。)

导致 cp 在复制将覆盖现有文件的文件之前向标准错误输出写入提示。 如果标准输入的响应以字符 ‘y’ 或 ‘Y’ 开头,则尝试复制文件。 ( -i 选项覆盖任何以前的 -f 或 -n 选项。)

在层次结构中创建指向常规文件的硬链接,而不是复制。

不要覆盖现有文件。 ( -n 选项覆盖任何以前的 -f 或 -i 选项。)

使 cp 保留副本中每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、ACL、用户 ID 和组 ID,由权限允许。

如果无法保留用户 ID 和组 ID,则不会显示错误消息并且不会更改退出值。

如果源文件的 set-user-ID 位打开并且用户 ID 无法保留,则 set-user-ID 位不会保留在副本的权限中。 如果源文件的 set-group-ID 位打开且组 ID 无法保留,则 set-group-ID 位不会保留在副本的权限中。 如果源文件的 set-user-ID 和 set-group-ID 位都打开,并且用户 ID 或组 ID 无法保留,则 set-user-ID 和 set-group-ID 位都不会保留在副本的权限。

在层次结构中创建指向常规文件的符号链接,而不是复制。

使 cp 变得冗长,在复制文件时显示文件。

不遍历文件系统挂载点。

对于每个已经存在的目标文件,如果权限允许,其内容将被覆盖。 除非指定了 -p 选项,否则它的模式、用户 ID 和组 ID 不变。

在第二种概要形式中, target_directory 必须存在,除非只有一个名为 source_file 的目录并且指定了 -R 标志。

如果目标文件不存在,则使用源文件的模式,由文件模式创建掩码 (umask ,参见 csh(1)) 。 修改。 如果源文件的 set-user-ID 位打开,则该位将被删除,除非源文件和目标文件都属于同一用户。 如果源文件的 set-group-ID 位打开,则删除该位,除非源文件和目标文件都在同一个组中并且用户是该组的成员。 如果同时设置了 set-user-ID 和 set-group-ID 位,则必须满足上述所有条件,否则这两个位都将被删除。

创建或覆盖文件需要适当的权限。

除非设置了 -R 标志,否则始终遵循符号链接,在这种情况下,默认情况下不遵循符号链接。 -H 或 -L 标志(与 -R 标志一起)导致符号链接被遵循,如上所述。 除非指定了 -R? 选项,否则 -H -、 -L 和 -P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。

如果 cp 接收到 SIGINFO (参见 stty(1) 的 status 参数)信号,则当前输入和输出文件以及完成百分比将被写入标准输出。

The cp utility exits 0 on success, and >0 if an error occurs.

制作名为 bar 的文件 foo 的副本:

$ cp foo bar

将一组文件复制到 /tmp 目录:

$ cp *.txt /tmp

将目录 junk 及其所有内容(包括任何子目录)复制到 /tmp 目录:

$ cp -R junk /tmp

cp 实用程序的历史版本有一个 -r 选项。 此实现支持该选项,但是,它的行为与历史上的 FreeBSD 行为不同。 强烈建议不要使用此选项,因为该行为取决于实现。 在 FreeBSD 中, -r 是 -RL 的同义词,除非被其他标志修改,否则其工作方式相同。 -r 的历史实现有所不同,因为它们在重新创建层次结构时将特殊文件复制为普通文件。

-l, -s, -v, -x 和 -n 选项是非标准选项,不建议在脚本中使用它们。

mv(1), rcp(1), umask(2), fts(3), symlink(7)

cp 命令预计与 IEEE Std 1003.2 (“POSIX.2”) 兼容。

cp 命令出现在 Version 1 AT&T UNIX 中。

June 6, 2015

FreeBSD 13.1-RELEASE

basename.1

BASENAME(1)

BASENAME(1)

FreeBSD General Commands Manual

BASENAME(1)

名称

basename, dirname —

返回路径名的文件名或目录部分

basename string [suffix] basename [-a] [-s suffix] string [...] dirname string [...]

basename 实用程序删除任何以 string 中存在的最后一个斜杠 ‘/’ 字符结尾的前缀(在第一次去除尾随斜杠之后)和 suffix 如果给定的话。 如果 suffix 与 string 中的其余字符相同,则不会去除后缀。 结果文件名被写入标准输出。 不存在的后缀将被忽略。 如果指定了 -a ,则每个参数都被视为一个 string ,就好像只使用一个参数调用了 basename 。 如果指定了 -s ,则将 suffix 作为其参数,并将所有其他参数视为 string 。

dirname 实用程序删除文件名部分,从最后一个斜杠 ‘/’ 字符开始到 string 的末尾(在第一次去除尾部斜杠之后),并将结果写入标准输出。

The basename and dirname utilities exit 0 on success, and >0 if an error occurs.

以下行将 shell 变量 FOO 设置为 /usr/bin 。

FOO=`dirname /usr/bin/trail`

csh(1), sh(1), basename(3), dirname(3)

basename 和 dirname 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。

basename 和 dirname 实用程序首先出现在 4.4BSD 中。

May 26, 2020

FreeBSD 13.1-RELEASE

du.1

DU(1)

DU(1)

FreeBSD General Commands Manual

DU(1)

du —

-f
|
-i
|
-n
] [
-alpsvx
] source_file ... target_directory
概要
描述
-H
-L
-P
-R
-a
-f
-i
-l
-n
-p
-s
-v
-x
退出状态
实例
兼容性
参见
标准
历史
概要
描述
退出状态
实例
参见
标准
历史
显示磁盘使用统计信息

概要

du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] [-a | -s | -d depth] [-B blocksize] [-I mask] [-t threshold] [file ...]

描述

du 实用程序显示每个文件参数以及以每个目录参数为根的文件层次结构中的每个目录的文件系统块使用情况。 如果未指定文件,则显示以当前目录为根的层次结构的块使用情况。

选项如下:

-A

显示表观大小而不是磁盘使用情况。 这在对压缩卷或稀疏文件进行操作时会很有帮助。

-B blocksize

计算 blocksize byte blocks. 字节块中的块计数。 这与 -h, -k, -m, -``-si 和 -g 选项或设置 BLOCKSIZE 不同,它可以估计在给定 blocksize 的文件系统上检查的文件层次结构需要多少空间。 除非在 -A 模式下, blocksize 会向上舍入到 512 的下一个倍数。

-H

遵循命令行上的符号链接,不遵循文件层次结构中的符号链接。

-I mask

忽略与指定 mask 匹配的文件和目录。

-L

遵循命令行和文件层次结构中的符号链接。

-P

不遵循符号链接。这是默认设置。

-a

为文件层次结构中的每个文件显示一个条目。

-c

显示总计。

-d depth

显示所有文件和目录 depth 目录的条目。

-g

以 1073741824 字节 (1 GiB) 块显示块计数。

-h

“Human-readable” 输出。 使用单位后缀: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte 和 Petabyte ,基于 1024 的幂。

-k

以 1024 字节 (1 kiB) 块显示块计数。

-l

如果一个文件有多个硬链接,请多次计算其大小。 du 的默认行为是只计算具有多个硬链接的文件一次。 当指定 -l 选项时,硬链接检查被禁用,并且这些文件被计算(和显示)的次数与找到的次数一样多。

-m

以 1048576 字节 (1 MiB) 块显示块计数。

-n

忽略设置了用户 “nodump” 标志 (UF_NODUMP) 的文件和目录。

-r

生成有关无法读取的目录、无法打开的文件等的消息。 这是默认情况。此选项的存在仅是为了符合 X/Open Portability Guide 第 4 版 X/Open Portability Guide Issue 4 (“XPG4”) 。

-s

显示每个指定文件的条目。 (相当于 -d 0)

-``-si

“Human-readable” 输出。 使用单位后缀:Byte、Kilobyte、Megabyte、Gigabyte、Terabyte 和 Petabyte,基于 1000 的幂。

-t threshold

仅显示大小超过 threshold 的条目。 如果 threshold 为负,则仅显示大小小于 threshold 绝对值的条目。

-x

不遍历文件系统挂载点。

du 实用程序计算符号链接使用的存储空间,而不是它们引用的文件,除非指定了 -H 或 -L 选项。 如果指定了 -H 或 -L 选项,则不计算(或显示)后面的任何符号链接使用的存储空间。 -H, -L 和 -P 选项相互覆盖,命令的操作由指定的最后一个选项决定。

-h, -k, -m 和 -``-si 选项都相互覆盖;指定的最后一个确定使用的块计数。

环境

BLOCKSIZE

如果设置了环境变量 BLOCKSIZE ,并且未指定 -h, -k, -m 或 -``-si 选项,则块计数将以该块大小为单位显示。 如果未设置 BLOCKSIZE ,并且未指定 -h, -k, -m 或 -``-si 选项,则块计数将以 512 字节块的形式显示。

实例

显示当前目录中所有文件的磁盘使用情况。 输出是人类可读的形式:

# du -ah

总结当前目录的磁盘使用情况:

# du -hs

总结特定目录的磁盘使用情况:

# du -hs /home

显示特定目录中所有 C 文件的名称和大小。 最后还要显示总计:

# du -ch /usr/src/sys/kern/*.c

参见

df(1), chflags(2), fts(3), symlink(7), quot(8)

标准

du 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。

标志 [-cdhP] 以及 BLOCKSIZE 环境变量是对该规范的扩展。

标志 [-r] 被接受但被忽略,以便与实施过时的 X/Open 命令和实用程序第 5 版 X/Open Commands and Utilities Issue 5 (“XCU5”) 标准的系统兼容。

历史

du 实用程序及其 -a 和 -s 选项首次出现在 Version 1 AT&T UNIX 中。

-r 选项首先出现在 AT&T System III UNIX 中,并且从 FreeBSD 3.5 开始可用。 -k 和 -x 选项首先出现在 4.3BSD-Reno 中,而 -H 出现在 4.4BSD 中。 -c 和 -L 选项首先出现在 GNU fileutils 中; -L 和 -P 从 4.4BSD-Lite1 开始可用, -c 从 FreeBSD 2.2.6 开始可用。 -d 选项最早出现在 FreeBSD 2.2 中, -h 选项最早出现在 FreeBSD 4.0 中。

作者

这个版本的 du 由 Chris Newcomb 于 1989 年为 4.3BSD-Reno 编写。

August 1, 2019

FreeBSD 13.1-RELEASE

名称

batch.1

AT(1)

AT(1)

FreeBSD General Commands Manual

AT(1)

名称

at, batch, atq, atrm —

排队、检查或删除作业以供以后执行

at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at

atq [-q queue] [-v]

atrm job [job ...]

batch [-q queue] [-f file] [-mv] [time]

at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。

at

在指定时间执行命令;

atq

列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;

atrm

删除工作;

batch

在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。

at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。

例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。

at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。

对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。

超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。

如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。

如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。

如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。

请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。

queue

使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。

即使没有输出,也可以在作业完成后向用户发送邮件。

file

从 file 而不是标准输入中读取作业。

不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。

是 atrm 的别名(此选项已弃用;请改用 -r )。

是 batch 的别名。

对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。

将命令行上列出的作业分类到标准输出。

删除指定的作业。

使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:

CC

年份的前两位数字(世纪)。

YY

年份的后两位数。

MM

一年中的月份,从 1 到 12。

DD

一个月中的第几天,从 1 到 31。

hh

一天中的小时,从 0 到 23。

mm

小时的分钟,从 0 到 59。

SS

分钟的秒数,从 0 到 60。

如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。

/var/at/jobs

包含作业文件的目录

/var/at/spool

包含输出假脱机文件的目录

/var/run/utx.active

登录记录

/var/at/at.allow

允许权限控制

/var/at/at.deny

拒绝权限控制

/var/at/jobs/.lockfile

创造工作锁定文件

nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)

At 主要由 Thomas Koenig <> 编写。 时间解析例程由 David Parsons <> 编写, Joe Halpin <> 进行了小幅改进。

如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。

当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。

指定超过 2038 年的日期可能不适用于某些系统。

August 11, 2018

FreeBSD 13.1-RELEASE

atq.1

AT(1)

AT(1)

FreeBSD General Commands Manual

AT(1)

名称

at, batch, atq, atrm —

排队、检查或删除作业以供以后执行

at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at

atq [-q queue] [-v]

atrm job [job ...]

batch [-q queue] [-f file] [-mv] [time]

at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。

at

在指定时间执行命令;

atq

列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;

atrm

删除工作;

batch

在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。

at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。

例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。

at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。

对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。

超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。

如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。

如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。

如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。

请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。

queue

使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。

即使没有输出,也可以在作业完成后向用户发送邮件。

file

从 file 而不是标准输入中读取作业。

不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。

是 atrm 的别名(此选项已弃用;请改用 -r )。

是 batch 的别名。

对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。

将命令行上列出的作业分类到标准输出。

删除指定的作业。

使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:

CC

年份的前两位数字(世纪)。

YY

年份的后两位数。

MM

一年中的月份,从 1 到 12。

DD

一个月中的第几天,从 1 到 31。

hh

一天中的小时,从 0 到 23。

mm

小时的分钟,从 0 到 59。

SS

分钟的秒数,从 0 到 60。

如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。

/var/at/jobs

包含作业文件的目录

/var/at/spool

包含输出假脱机文件的目录

/var/run/utx.active

登录记录

/var/at/at.allow

允许权限控制

/var/at/at.deny

拒绝权限控制

/var/at/jobs/.lockfile

创造工作锁定文件

nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)

At 主要由 Thomas Koenig <> 编写。 时间解析例程由 David Parsons <> 编写, Joe Halpin <> 进行了小幅改进。

如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。

当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。

指定超过 2038 年的日期可能不适用于某些系统。

August 11, 2018

FreeBSD 13.1-RELEASE

gunzip.1

GZIP(1)

GZIP(1)

FreeBSD General Commands Manual

GZIP(1)

名称

gzip, gunzip, zcat —

使用 Lempel-Ziv 编码 (LZ77) 的压缩/解压缩工具

gzip [-cdfhkLlNnqrtVv] [-S suffix] file [file [...]] gunzip [-cfhkLNqrtVv] [-S suffix] file [file [...]] zcat [-fhV] file [file [...]]

gzip 程序使用 Lempel-Ziv 编码 (LZ77) 压缩和解压缩文件。 如果没有指定 files , gzip 将从标准输入压缩,或解压缩到标准输出。 在压缩模式下,如果可能,每个 file 都将替换为另一个带有后缀的文件,该后缀由 -S suffix 选项设置,如果可能的话。

在解压模式下,每个 file 都会被检查是否存在,添加后缀的文件也会被检查。 每个 file 参数必须包含一个单独的完整存档;当指示多个 files 时,依次解压每个文件。

在 gzcat 的情况下,结果数据然后以 cat(1) 的方式连接。

如果作为 gunzip 调用,则启用 -d 选项。 如果作为 zcat 或 gzcat 调用,则启用 -c 和 -d 选项。

此版本的 gzip 还能够解压缩使用 compress(1), bzip2(1), lzip 或 xz(1) 压缩的文件。

可以使用以下选项:

, -``-fast

, -3, -4, -5, -6, -7, -8

, -``-best

这些选项更改使用的压缩级别, -1 选项最快,压缩较少, -9 选项最慢,压缩最佳。默认压缩级别为 6。

, -``-stdout, - -to-stdout

此选项指定输出将转到标准输出流,使文件保持不变。

, -``-decompress, -``-uncompress

此选项选择解压缩而不是压缩。

, -``-force

此选项打开强制模式。 这允许具有多个链接的文件、到常规文件的符号链接、覆盖预先存在的文件、读取或写入终端,以及与 -c 选项结合使用时,允许未压缩的数据原封不动地通过。

, -``-help

此选项打印使用摘要并退出。

, -``-keep

此选项可防止 gzip 在(解)压缩后删除输入文件。

, --license

此选项打印 gzip 许可证。

, -``-list

此选项显示有关文件的压缩和未压缩大小、比率、未压缩名称的信息。 使用 -v 选项,它还显示文件中嵌入的压缩方法、CRC、日期和时间。

, -``-name

此选项使输入文件中存储的文件名用作输出文件。

, -``-no-name

此选项停止将文件名和时间戳存储在输出文件中。

, -``-quiet

使用此选项,不会打印任何警告或错误。

, -``-recursive

此选项用于使用 fts(3) 库单独 gzip 目录树中的文件。

suffix, -``-suffix suffix

此选项将默认后缀从 .gz 更改为 suffix 。

, -``-test

此选项将测试压缩文件的完整性。

, -``-version

此选项打印 gzip 程序的版本。

, -``-verbose

此选项打开详细模式,打印每个压缩文件的压缩率。

如果设置了环境变量 GZIP ,它将被解析为在命令行上的任何选项之前处理的以空格分隔的选项列表。 命令行上的选项将覆盖 GZIP 中的任何内容。

gzip 实用程序在成功时退出 0,在错误时退出 1,如果出现警告则退出 2。

gzip 响应以下信号:

向标准错误报告进度。

bzip2(1), compress(1), xz(1), fts(3), zlib(3)

gzip 程序最初由 Jean-loup Gailly 编写,获得 GNU Public License 许可。 Matthew R.Green 基于可自由再分发的 zlib 库为 NetBSD 1.3 分发媒体编写了一个简单的前端。 它被增强为与 NetBSD 2.0 的原始 GNU gzip 程序大部分功能兼容。

这个 gzip 的实现是基于 NetBSD gzip 版本 20181111 移植的,并且首次出现在 FreeBSD 7.0 中。

这个 gzip 的实现由 Matthew R. Green <> 编写,解压支持由 Xin LI <> 编写。

根据 RFC 1952,记录的文件大小以 32 位整数存储,因此不能表示大于 4GB 的文件。 此限制也适用于 gzip 实用程序的 -l 选项。

January 7, 2019

FreeBSD 13.1-RELEASE

echo.1

ECHO(1)

ECHO(1)

FreeBSD General Commands Manual

ECHO(1)

名称

echo —

将参数写入标准输出

echo [-n] [string ...]

echo 实用程序将任何指定的操作数写入标准输出,由单个空白 (‘’) 字符分隔并后跟换行符 (‘’) 字符。

以下选项可用:

不打印尾随换行符。

选项结束标记 -``- 无法识别并按字面书写。

换行符也可以通过在字符串末尾附加 ‘\c’ 来抑制,正如 iBCS2 兼容系统所做的那样。 请注意, -n 选项以及 ‘\c’ 的效果是在 IEEE Std 1003.1-2001 (“POSIX.1”) 中实现定义的,由 Cor. 1-2002 修正。 为了可移植性,只有当第一个参数不以连字符 (‘-’) 开头并且不包含任何反斜杠 (‘\’) 时,才应使用 echo 。 如果这还不够,应该使用 printf(1) 。

大多数 shell 提供了一个内置的 echo 命令,该命令在处理选项和反斜杠方面往往与此实用程序不同。 请参阅 builtin(1) 手册页。

The echo utility exits 0 on success, and >0 if an error occurs.

builtin(1), csh(1), printf(1), sh(1)

echo 实用程序符合经 1-2002 修订的 IEEE Std 1003.1-2001 (“POSIX.1”) 。

echo 命令出现在 Version 2 AT&T UNIX 中。

October 5, 2016

FreeBSD 13.1-RELEASE

ctfdump.1

CTFDUMP(1)

CTFDUMP(1)

FreeBSD General Commands Manual

CTFDUMP(1)

名称

ctfdump —

转储 ELF 文件的 SUNW_ctf 部分

ctfdump [-dfhlsSt] -u file file

ctfdump 实用程序转储 ELF 二进制文件中存在的 CTF 数据段 (SUNW_ctf) 的内容。 此部分之前是使用 ctfconvert(1) 或 ctfmerge(1) 创建的。

可以使用以下选项:

显示数据对象部分。

显示函数部分。

显示标题。

显示标签部分。

显示字符串表。

显示统计信息。

显示类型部分。

ufile

将未压缩的 CTF 数据写入名为 ufile 的原始 CTF 文件。

The ctfdump utility exits 0 on success, and >0 if an error occurs.

ctfconvert(1), ctfmerge(1)

ctfdump 实用程序首次出现在 FreeBSD 7.0 中。

CTF 实用程序来自 OpenSolaris。

July 7, 2010

FreeBSD 13.1-RELEASE

date.1

DATE(1)

DATE(1)

FreeBSD General Commands Manual

DATE(1)

date —

-l
-q
queue
at
-r
job [job ...]
概要
描述
实现说明
选项
-q
-m
-f
-l
-d
-b
-v
-c
-r
-t
文件
参见
作者
[email protected]
[email protected]
[email protected]
缺陷
-l
-q
queue
at
-r
job [job ...]
概要
描述
实现说明
选项
-q
-m
-f
-l
-d
-b
-v
-c
-r
-t
文件
参见
作者
[email protected]
[email protected]
[email protected]
缺陷
概要
描述
选项
-1
-2
-9
-c
-d
-f
-h
-k
-L
-l
-N
-n
-q
-r
-S
-t
-V
-v
环境
退出状态
信号
SIGINFO
参见
历史
作者
[email protected]
[email protected]
缺陷
概要
描述
-n
退出状态
参见
标准
历史
概要
描述
-d
-f
-h
-l
-s
-S
-t
-u
退出状态
参见
历史
作者
显示或设置日期和时间

概要

date [-jnRu] [-r seconds | filename] [-v [+ | -]val [ymwdHMS]] ... [+output_fmt] date [-ju] [[[[[cc]yy]mm]dd]HH]MM[.ss] date [-jRu] -f input_fmt new_date [+output_fmt] date [-jnu] [-I[FMT]] [-f input_fmt] [-r ...] [-v ...] [new_date]

描述

当不带参数调用时, date 实用程序显示当前日期和时间。 否则,根据指定的选项, date 将设置日期和时间或以用户定义的方式打印。

date 实用程序显示从内核时钟读取的日期和时间。 当用于设置日期和时间时,内核时钟和硬件时钟都会更新。

只有超级用户可以设置日期,如果系统安全级别(参见 securelevel(7)) 大于 1,则时间更改不得超过 1 秒。

选项如下:

-f

使用 input_fmt 作为格式字符串来解析提供的 new_date 而不是使用默认的 [[[[[cc]yy]mm]dd]HH]MM[.ss] 格式。 使用 strptime(3) 完成解析。

-I[FMT]

使用 ISO 8601 输出格式。 FMT 可以省略,在这种情况下,默认值为 ‘date’ 。 有效的 FMT 值为 ‘date 、’ ‘hours 、’ ‘minutes’ 和 ‘seconds’ 。 日期和时间被格式化为指定的精度。 当 FMT 为 ‘hours’ (或更精确的 ‘minutes’ 或 ‘seconds’ )时, ISO 8601 格式包括时区。

-j

不要尝试设置日期。 除了 -f 选项之外,这还允许您使用 + 标志将一种日期格式转换为另一种日期格式。 请注意, -f 格式字符串未指定的任何日期或时间组件都从当前时间获取它们的值。

-n

过时的标志,为了兼容性而接受和忽略。

-R

使用 RFC 2822 日期和时间输出格式。 这相当于使用 “%a, %d %b %Y %T %z” 作为 output_fmt 而 LC_TIME 设置为 “C” 语言环境。

-r seconds

打印以 seconds 表示的日期和时间,其中 seconds 是自 Epoch(00:00:00 UTC,1970 年 1 月 1 日;参见 time(3) )以来的秒数,可以指定为十进制、八进制或十六进制。

-r filename

打印最后一次修改 filename 的日期和时间。

-u

以 UTC (协调世界时)时间显示或设置日期。

-v

根据 val 调整(即取当前日期并显示调整结果;不实际设置日期)秒、分、时、月、日、星期、月或年。 如果 val 前面有加号或减号,则根据剩余字符串向前或向后调整日期,否则设置日期的相关部分。 使用这些标志可以根据需要多次调整日期。 标志按给定的顺序处理。

设置值时(而不是调整它们),秒在 0-59 范围内,分钟在 0-59 范围内,小时在 0-23 范围内,月日在 1-31 范围内,工作日在在 0-6 范围内(周日至周六),月份在 1-12 范围内(1 月至 12 月),年份在 80-38 或 1980-2038 范围内。

如果 val 是数字,则必须使用 y, m, w, d, H, M 或 S 之一来指定要调整日期的哪一部分。

可以使用名称而不是数字来指定星期几或月份。 如果名称与加号(或减号)一起使用,则日期将向前(或向后)到与给定工作日或月份匹配的下一个(前一个)日期。 如果给定的星期几或月份与当前日期相同,则不会调整日期。

当日期调整为特定值或单位大于小时时,将忽略夏令时注意事项。 以小时或更少为单位的调整遵循夏令时。 因此,假设当前日期是 3 月 26 日 0:30,并且 DST 调整意味着时钟从 01:00 前进到 02:00,使用 -v +1H 会将日期调整为 3 月 26 日 2:30。 同样,如果日期是 10 月 29 日 0:30,并且 DST 调整意味着时钟从 02:00 回到 01:00,则需要使用 -v +3H 才能到达 10 月 29 日 2:30。

当日期调整为实际不存在的特定值时(例如欧洲/伦敦时区 2000 年 3 月 26 日,英国夏令时 1:30),日期将以一小时为单位静默向前调整,直到达到有效时间。 当日期调整为出现两次的特定值时(例如 2000 年 10 月 29 日 1:30),将设置生成的时区,以使日期与两次中较早的时间相匹配。

不可能将日期调整为无效的绝对日期,因此使用开关 -v 31d -v 12m 只会在一年中的五个月中失败。 因此,通常在设置日期之前设置月份;使用 -v 12m -v 31d 总是有效的。

按月调整日期本质上是模棱两可的,因为一个月是一个可变长度的单位,具体取决于当前日期。 这种日期调整以最直观的方式应用。 首先, date 试图保留月份中的日期。 如果由于目标月份比当前月份短而无法执行,则结果将是目标月份的最后一天。 例如,在 5 月 31 日使用 -v +1m 会将日期调整为 6 月 30 日,而在 1 月 30 日使用相同选项会将日期调整为 2 月的最后一天。 这种方法也被认为对 shell 脚本最有意义。 不过,请注意,以相同的月数来回可能会将您带到不同的日期。

有关详细信息,请参阅以下示例。

带有前导加号 (‘+’) 的操作数表示用户定义的格式字符串,该字符串指定显示日期和时间的格式。 格式字符串可以包含 strftime(3) 手册页中描述的任何转换规范,以及任何任意文本。 换行符 (‘’) 始终在格式字符串指定的字符之后输出。 默认显示的格式字符串是 “+%+” 。

如果操作数没有前导加号,则将其解释为用于设置系统当前日期和时间概念的值。 设置日期和时间的规范表示是:

cc

世纪(19 或 20)添加到缩写年份。

yy

缩写形式的年份(例如,1989 年为 89,2006 年为 06)。

mm

数字月份,从 1 到 12 的数字。

dd

日,从 1 到 31 的数字。

HH

小时,一个从 0 到 23 的数字。

MM

分钟,一个从 0 到 59 的数字。

ss

秒,从 0 到 60 的数字(59 加上潜在的闰秒)。

除会议记录外的所有内容都是可选的。

自动处理夏令时、标准时间、闰秒和闰年的时间更改。

环境

以下环境变量会影响 date 的执行:

TZ

显示日期时使用的时区。 正常格式是相对于 /usr/share/zoneinfo 的路径名。 例如,命令 “TZ=America/Los_Angeles date” 显示加利福尼亚的当前时间。 有关详细信息,请参阅 environ(7) 。

文件

/var/log/utx.log

日期重置和时间更改的记录

/var/log/messages

用户设置时间的记录

退出状态

date 实用程序在成功时退出 0,如果无法设置日期,则退出 1,如果能够设置本地日期,但无法全局设置,则退出 2。

实例

命令:

date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S"

将显示:

DATE: 1987-11-21 TIME: 13:36:16

在欧洲/伦敦时区,命令:

date -v1m -v+1y

将显示:

Sun Jan 4 04:15:24 GMT 1998

目前是 Mon Aug 4 04:15:24 BST 1997 。

命令:

date -v1d -v3m -v0y -v-1d

将显示 2000 年二月的最后一天:

Tue Feb 29 03:18:00 GMT 2000

命令也一样:

date -v3m -v30d -v0y -v-1m

因为没有像 2 月 30 日这样的日期。

命令:

date -v1d -v+1m -v-1d -v-fri

将显示该月的最后一个星期五:

Fri Aug 29 04:31:11 BST 1997

目前是 Mon Aug 4 04:31:11 BST 1997 。

命令:

date 8506131627

将日期设置为 “June 13, 1985, 4:27 PM 。”

date "+%Y%m%d%H%M.%S"

可以在一台机器上打印出适合在另一台机器上设置的日期。 (“+%m%d%H%M%Y.%S” 用于 Linux 。)

命令:

date 1432

将时间设置为 2:32 PM, ,而不修改日期。

命令

TZ=America/Los_Angeles date -Iseconds -r 1533415339

将显示

2018-08-04T13:42:19-07:00

最后是命令:

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

可用于解析 date 的输出并以 Epoch 时间表示。

诊断

将 -I 标志与 -R 或输出格式 (“+...”) 操作数组合是无效的。 如果发生这种情况, date 会打印: ‘multiple output formats specified’ 并以错误状态退出。

参见

locale(1), gettimeofday(2), getutxent(3), strftime(3), strptime(3) R. Gusella and S. Zatti, TSP: The Time Synchronization Protocol for UNIX 4.3BSD.

标准

date 实用程序预计与 IEEE Std 1003.2 (“POSIX.2”) 兼容。 -d, -f, -I, -j, -r, -t 和 -v- 选项都是对标准的扩展。

-I 标志选择的格式与 ISO 8601 兼容。

历史

date 命令出现在 Version 1 AT&T UNIX 中。

-I 标志是在 FreeBSD 12.0 中添加的。

August 25, 2020

FreeBSD 13.1-RELEASE

名称

env.1

ENV(1)

ENV(1)

FreeBSD General Commands Manual

ENV(1)

名称

env —

设置环境并执行命令,或打印环境

env [-0iv] [-L|-U user[/class]] [-u name] [name=value ...] env [-iv] [-L|-U user[/class]] [-P altpath] [-S string] [-u name] [name=value ...] utility [argument ...]

env 实用程序在修改命令行中指定的环境后执行另一个 utility 。 每个 name=value 选项指定环境变量 name 的设置,其值为 value 。 所有这些环境变量都是在 utility 执行之前设置的。

选项如下:

以 NUL 结束每个输出行,而不是换行符。

仅使用 name=value 选项指定的那些环境变量执行该 utility 。 env 继承的环境被完全忽略。

| user[/class]

在处理任何 -i 或 -u 选项之后,但在处理任何 name=value 选项之前,将指定用户和登录类的 login.conf(5) 中的环境变量定义添加到环境中。 如果使用 -L ,则只读取系统范围的 /etc/login.conf.db 文件;如果使用 -U ,则指定用户的 ~/.login_conf 也会被读取。 用户可以由名称或 uid 指定。如果给出了用户名 ‘-’ ,则不会进行用户查找,如果没有明确给出,登录类将默认为 ‘default’ ,并且不会对值进行替换。

altpath

搜索由 altpath 指定的目录集以定位指定的 utility ,而不是使用 PATH 环境变量的值。

string

将给定的 string 拆分为多个字符串,并将每个结果字符串作为 env 实用程序的单独参数进行处理。 -S 选项识别一些特殊的字符转义序列并且还支持环境变量替换,如下所述。

name

如果环境变量 name 在环境中,则在处理其余选项之前将其删除。 这类似于 sh(1) 中的 unset 命令。 name 的值不能包含 ‘=’ 字符。

打印 env 实用程序完成的每个处理步骤的详细信息。 如果多次指定 -v ,将打印附加信息。

仅当在任何 name=value 选项之前指定上述选项时,它们才会被识别。

如果未指定 utility ,则 env 会打印出环境中变量的名称和值。 除非指定了 -0 否则每个名称/值对由新行分隔,在这种情况下,名称/值对由 NUL 分隔。 -0 和 utility 不能一起指定。

-S 选项的处理将根据在 string 中找到的任何空格或 字符将给定 string 拆分为单独的参数。 然后,这些新参数中的每一个都将被视为已在原始 env 命令中指定为单独的参数。

空格和制表符可以通过使用单引号 (“'”) 或双引号 (‘"’)- 或反斜杠 (‘\’) 嵌入其中一个新参数中。 单引号将转义所有非单引号字符,直到匹配的单引号。 双引号将转义所有非双引号字符,直到匹配的双引号。 如果在匹配的引号字符之前到达 string 的结尾,则这是一个错误。

如果 -S 将创建一个以 ‘#’ 字符开头的新参数,则该参数和 string 的其余部分将被忽略。 当您希望新参数以 ‘#’ 字符开头时,可以使用 ‘\#’ 序列,而不会导致 string 的其余部分被跳过。

在处理 string 值时, -S 处理会将某些字符组合视为转义序列,表示要采取的某些操作。 字符转义序列采用反斜杠表示法。 字符及其含义如下:

忽略 string 中的剩余字符。 这不能出现在双引号字符串中。

替换为 字符。

替换为 字符。

替换为 <回车> 字符。

替换为 字符。

替换为 字符。

替换为 ‘#’ 字符。 当您需要一个 ‘#’ 作为通过拆分给定 string 创建的一个参数中的第一个字符时,这将很有用。

替换为 ‘$’ 字符。

如果在双引号字符串中找到它,则将其替换为单个空格。 如果在带引号的字符串之外找到它,则将其视为原始 string 中新参数之间的分隔符。

替换为 <双引号> 字符。

替换为 <单引号> 字符。

替换为反斜杠字符。

和反斜杠的序列是唯一在单引号字符串中被识别的序列。 其他序列在单引号字符串中没有特殊含义。 所有转义序列都在双引号字符串中被识别。 如果单个 ‘\’ 字符后跟上面列出的字符以外的字符,则会出错。

-S 的处理还支持从环境变量中替换值。 为此,环境变量的名称必须在 ‘${}’ 之内,例如: ${SOMEVAR} 。 不支持 $SOMEVAR 的通用 shell 语法。 所有替换的值都将是环境变量的值,就像最初调用 env 实用程序时一样。 如上所述,不会检查这些值是否有任何转义序列。 并且 name=value 的任何设置都不会影响 -S 处理中用于替换的值。

此外, -S 处理不能引用大多数 shell 定义的特殊参数的值。 例如, -S 无法识别特殊参数,例如: ‘$*’, ‘$@’, ‘$#’, ‘$?’ 或 ‘$$’ 如果它们出现在给定的 string 中。

env 实用程序通常用作解释脚本的第一行的 interpreter ,如 execve(2) 中所述。

请注意内核解析 ‘#!’ 的方式 自 FreeBSD 6.0 起,解释脚本的(第一行)已更改。 在此之前, FreeBSD 内核会根据在该行中找到的任何空格(空格或 字符)将该第一行拆分为单独的参数。 所以,如果一个名为 /usr/local/bin/someport 的脚本的第一行是:

#!/usr/local/bin/php -n -q -dsafe_mode=0

那么 /usr/local/bin/php 程序将使用以下参数启动:

arg[0] = '/usr/local/bin/php' arg[1] = '-n' arg[2] = '-q' arg[3] = '-dsafe_mode=0' arg[4] = '/usr/local/bin/someport'

加上用户在执行 someport 时指定的任何参数。 但是,这个处理多个选项就 ‘#!’ 行不是任何其他操作系统解析解释脚本的第一行的方式。 因此,在对 FreeBSD 6.0 进行更改后,该脚本将导致 /usr/local/bin/php 以以下参数启动:

arg[0] = '/usr/local/bin/php' arg[1] = '-n -q -dsafe_mode=0' arg[2] = '/usr/local/bin/someport'

加上用户指定的任何参数。 这导致一些脚本的行为发生了重大变化。 在上述脚本的情况下,要让它在 FreeBSD 6.0 下的行为方式与在早期版本下的行为方式相同,第一行应更改为:

#!/usr/bin/env -S /usr/local/bin/php -n -q -dsafe_mode=0

env 实用程序将以整行作为单个参数启动:

arg[1] = '-S /usr/local/bin/php -n -q -dsafe_mode=0'

然后 -S 处理将在执行 /usr/local/bin/php 之前将该行拆分为单独的参数。

如果名称不包含 ‘/’ 字符,则 env 实用程序使用 PATH 环境变量来定位请求的 utility ,除非已指定 -P 选项。

The env utility exits 0 on success, and >0 if an error occurs. 退出状态 126 表示已找到 utility ,但无法执行。 退出状态 127 表示找不到 utility 。

由于 env 实用程序通常用作解释脚本的第一行的一部分,因此以下示例显示了 env 实用程序在脚本中的多种用途。

解释脚本的内核处理不允许脚本直接引用其他脚本作为它自己的解释器。 作为一种解决方法,主要区别在于

#!/usr/local/bin/foo

和

#!/usr/bin/env /usr/local/bin/foo

是即使 /usr/local/bin/foo 本身就是一个解释脚本,后者也可以工作。

可能 env 最常见的用途是为脚本找到正确的解释器,此时解释器可能位于不同系统的不同目录中。 以下示例将通过搜索 PATH 指定的目录来找到 ‘perl’ 解释器。

#!/usr/bin/env perl

该示例的一个限制是它假定用户的 PATH 值设置为一个可以找到您要执行的解释器的值。 -P 选项可用于确保在搜索 utility 时使用特定的目录列表。 请注意,此示例还需要 -S 选项才能正常工作。

#!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl

仅当它位于 /usr/local/bin 或 /usr/bin 中时,上面才会找到 ‘perl’ 。 这可以与 PATH 的当前值相结合,以提供更大的灵活性。 请注意, -S 和 -P 选项之间不需要空格:

#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl

env 实用程序接受 - 选项作为 -i 的同义词。

printenv(1), sh(1), execvp(3), login.conf(5), environ(7)

env 实用程序符合 IEEE Std 1003.1-2001 (“POSIX.1”) 。 -0, -L, -P, -S, -U, -u 和 -v 选项是 FreeBSD 支持的非标准扩展,但在其他操作系统上可能不可用。

env 命令出现在 4.4BSD 中。 FreeBSD 6.0 中添加了 -P, -S 和 -v 选项。 FreeBSD 13.0 中添加了 -0, -L 和 -U 选项。

出于显而易见的原因, env 实用程序不处理名称中带有等号 (‘=’) 的 utility 值。

env 实用程序在处理 -S 选项时不考虑多字节字符,这可能会导致某些语言环境中的结果不正确。

March 3, 2021

FreeBSD 13.1-RELEASE

chmod.1

CHMOD(1)

CHMOD(1)

FreeBSD General Commands Manual

CHMOD(1)

名称

chmod —

改变文件模式

chmod [-fhv] [-R [-H | -L | -P]] mode file ...

chmod 实用程序修改由 mode 操作数指定的列出文件的文件模式位。

选项如下:

如果 chmod 无法修改 file 的模式,则不要显示诊断消息,也不要修改退出状态以反映此类故障。

如果指定了 -R 选项,则命令行上的符号链接会被跟随,因此不受该命令的影响。 (不遵循树遍历期间遇到的符号链接。)

如果文件是符号链接,请更改链接本身的模式,而不是链接指向的文件。

如果指定了 -R 选项,则遵循所有符号链接。

如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。

更改以文件为根的文件层次结构的模式,而不仅仅是文件本身。 当使用 “.*” 等通配符时,请注意无意中将 “..” 硬链接匹配到父目录。

使 chmod 变得冗长,在修改模式时显示文件名。 如果多次指定 -v 标志,还将以八进制和符号表示法打印文件的旧模式和新模式。

除非指定了 -R 选项,否则 -H -、 -L 和 -P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。

如果 chmod 接收到 SIGINFO 信号(参见 stty(1) 和 status 参数),则显示当前文件名以及旧模式和新模式。

只有文件的所有者或超级用户才被允许更改文件的模式。

The chmod utility exits 0 on success, and >0 if an error occurs.

模式可以是绝对的或象征性的。 绝对模式是由以下一个或多个值的总和构成的八进制数:

(setuid 位)。 设置了该位的可执行文件将在有效 uid 设置为文件所有者的 uid 的情况下运行。 如果底层文件系统支持此功能,则具有此位集的目录将强制在其中创建的所有文件和子目录由目录所有者拥有,而不是由创建进程的 uid 拥有:参见 chmod(2) 和 suiddir 选项 mount(8) 。

(setgid 位)。 设置了此位的可执行文件将运行时将有效 gid 设置为文件所有者的 gid。

(粘性位)。 请参阅 chmod(2) 和 sticky(7) 。

允许所有者阅读。

允许所有者写入。

对于文件,允许所有者执行。 对于目录,允许所有者在目录中搜索。

允许群组成员阅读。

允许组成员写入。

对于文件,允许组成员执行。 对于目录,允许组成员在目录中搜索。

允许他人阅读。

允许别人写。

对于文件,允许他人执行。 对于目录,允许其他人在目录中搜索。

例如,允许所有者读、写和执行,组成员读和执行,其他人读和执行,并且没有 set-uid 或 set-gid 行为的绝对模式是755(400+200+100+040 +010+004+001)。

符号模式由以下语法描述:

mode ::= clause [, clause ...] clause ::= [who ...] [action ...] action action ::= op [perm ...] who ::= a | u | g | o op ::= + | - | = perm ::= r | s | t | w | x | X | u | g | o

who 符号 ``u''、 ``g'' 和 ``o'' 分别指定用户、组和模式位的其他部分。 who 符号 ``a'' 等价于 ``ugo''。

perm 符号表示模式位的部分,如下所示:

r

读取的位。

s

set-user-ID-on-execution 和 set-group-ID-on-execution 位。

t

粘性位。

w

写入位。

x

执行/搜索位。

X

如果文件是目录或任何执行/搜索位设置为原始(未修改)模式,则执行/搜索位。带有 perm 符号 ``X'' 的操作仅与 op 符号 ``+'' 一起有意义,并且在所有其他情况下都被忽略。

u

文件原始模式中的用户权限位。

g

文件原始模式中的组权限位。

o

文件原始模式中的其他权限位。

op 符号表示执行的操作,如下所示:

如果没有为 perm 提供值,``+'' 操作无效。 如果没有为 who 提供值,则设置 perm 中指定的每个权限位,文件模式创建掩码(请参阅 umask(2) )中的相应位是明确的。 否则,设置由指定的 who 和 perm 值表示的模式位。

-

如果没有为 perm 提供值,则 ``-'' 操作无效。 如果没有为 who 提供值,则清除 perm 中指定的每个权限位,其中设置了文件模式创建掩码中的相应位。 否则,由指定的 who 和 perm 值表示的模式位将被清除。

=

由 who 值指定的模式位被清除,或者,如果没有指定 who 值,则所有者、组和其他模式位被清除。 然后,如果没有为 who 提供值,则设置 perm 中指定的每个权限位,文件模式创建掩码中的相应位是明确的。 否则,设置由指定的 who 和 perm 值表示的模式位。

每个 clause 指定要对模式位执行的一个或多个操作,并且每个操作都按指定的顺序应用于模式位。

仅对其他权限的操作(由符号“o”本身指定)与 perm 符号 “s” 或 “t” 相结合,将被忽略。

目录上的 “w” 权限将允许文件创建、重定位和复制到该目录。 在目录本身中创建的文件将继承其组 ID。

使任何人都可以读取文件,并且只能由所有者写入文件。

拒绝组和其他人的写权限。

将读取和写入权限设置为通常的默认值,但保留当前设置的任何执行权限。

如果任何人都可以搜索/可执行目录或文件,则让每个人都可以搜索/可执行该目录或文件。

使每个人都可以读取/可执行文件,并且只能由所有者写入。

清除组和其他的所有模式位。

设置组位等于用户位,但清除组写入位。

-v 选项是非标准的,不建议在脚本中使用它。

chflags(1), install(1), setfacl(1), chmod(2), stat(2), umask(2), fts(3), setmode(3), sticky(7), symlink(7), chown(8), mount(8)

chmod 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容,但该标准中未包含的 perm 符号 “t” 除外。

chmod 命令出现在 Version 1 AT&T UNIX 中。

马的顽皮部位没有 perm 选项。

January 7, 2017

FreeBSD 13.1-RELEASE

chfn.1

CHPASS(1)

CHPASS(1)

FreeBSD General Commands Manual

CHPASS(1)

名称

chpass, chfn, chsh, ypchpass, ypchfn, ypchsh —

添加或更改用户数据库信息

chpass [-a list] [-e expiretime] [-p encpass] [-s newshell] [user] ypchpass [-loy] [-a list] [-d domain] [-e expiretime] [-h host] [-p encpass] [-s newshell] [user]

chpass 实用程序允许编辑与 user 关联的用户数据库信息,默认情况下,与当前用户关联。

chfn, chsh, ypchpass, ypchfn 和 ypchsh 实用程序的行为与 chpass 相同。 (只有一个程序。)

信息被格式化并提供给编辑器进行更改。

仅显示允许用户更改的信息。

选项如下:

list

超级用户可以直接提供用户数据库条目,格式由 passwd(5) 指定,作为参数。 此参数必须是所有用户数据库字段的冒号 (“:”) 分隔列表,尽管它们可能为空。

expiretime

更改帐户过期时间。 此选项用于设置脚本的过期时间,就像在交互式编辑器中完成一样。

encpass

超级用户可以直接提供加密的密码字段,以 crypt(3) 使用的格式作为参数。

newshell

尝试将用户的 shell 更改为 newshell 。

可能的显示项目如下:

Login:

用户的登录名

Password:

用户的加密密码

Uid:

用户登录

Gid:

用户登录组

Class:

用户的一般分类

Change:

密码更改时间

Expire:

账户到期时间

Full Name:

用户的真实姓名

Office Location:

用户办公地点 (1)

Office Phone:

用户办公电话 (1)

Home Phone:

用户家庭电话 (1)

Other Information:

为用户 (1) 定义的任何本地参数

Home Directory:

用户的主目录

Shell:

用户的登录外壳

NOTE(1) -

在实际的 master.passwd 文件中,这些字段是嵌入在 FullName 字段中的逗号分隔字段。

login 字段是用于访问计算机帐户的用户名。

password 字段包含用户密码的加密形式。

uid 字段是与 login 字段关联的数字。 这两个字段在系统中(并且通常在一组系统中)应该是唯一的,因为它们控制文件访问。

虽然可以有多个具有相同登录名和/或相同用户 ID 的条目,但这样做通常是错误的。 处理这些文件的例程通常只会返回多个条目中的一个,并且该条目是随机选择的。

gid 字段是用户在登录时将被放置的组。 由于 BSD 支持多个组(参见 groups(1) ),这个字段目前没有什么特殊意义。 该字段可以填写数字或组名(请参阅 group(5) )。

class 字段引用 /etc/login.conf 中的类描述,通常用于在用户登录时初始化用户的系统资源限制。

change 字段是必须更改密码的日期。

expire 字段是帐户到期的日期。

change 和 expire 字段都应以 “month day year” 的形式输入,其中 month 为月名(前三个字符即可), day 为月日, year 为年。

五个字段可用于存储用户的 full name 、 office location 、 work 和 home telephone ,最后是 other information ,这些信息是一个逗号分隔的字符串,表示任何附加的 gecos 字段(通常用于特定于站点的用户信息)。 请注意, finger(1) 将在标题 Office: 下一起显示办公室位置和办公室电话。

用户的 home directory 是用户登录时所在的完整 UNIX 路径名。

shell 字段是用户喜欢的命令解释器。 如果 shell 字段为空,则假定为 Bourne shell, /bin/sh 。 当更改登录 shell 而不是超级用户时,用户可能不会从非标准 shell 更改或更改为非标准 shell。 非标准定义为在 /etc/shells 中找不到的 shell。

验证信息后, chpass 使用 pwd_mkdb(8) 更新用户数据库。

除非环境变量 EDITOR 设置为备用编辑器,否则将使用 vi(1) 编辑器。 当编辑器终止时,信息会被重新读取并用于更新用户数据库本身。 只有用户或超级用户可以编辑与用户相关的信息。

有关设置 PW_SCAN_BIG_IDS 环境变量的影响的说明,请参见 pwd_mkdb(8) 。

chpass 实用程序也可以与 NIS 一起使用,但是有一些限制。 目前, chpass 只能通过 rpc.yppasswdd(8) 更改 NIS passwd 映射,这通常只允许更改用户的密码、shell 和 GECOS 字段。 除非由 NIS 主服务器上的超级用户调用,否则 chpass (以及类似的 passwd(1)) 不能使用 rpc.yppasswdd(8) 服务器更改其他用户信息或向 NIS passwd 映射添加新记录。 此外, rpc.yppasswdd(8) 需要密码验证才能进行任何更改。 唯一允许在不提供密码的情况下提交更改的用户是 NIS 主服务器上的超级用户;所有其他用户,包括在 NIS 客户端(和 NIS 从属服务器)上具有 root 权限的用户,都必须输入密码。 (NIS 主服务器上的超级用户被允许绕过这些限制,主要是为了方便:对 NIS 主服务器具有 root 访问权限的用户已经拥有更新 NIS 映射所需的权限,但手动编辑映射源文件可能很麻烦。

注意:这些例外仅适用于 NIS 主服务器是 FreeBSD 系统时)。

因此,除非另有说明,当 chpass 与 NIS 一起使用时,以下限制适用:

  1. 只有外壳和 GECOS 信息可以更改。 所有其他字段都受到限制,即使超级用户调用了 chpass 。 虽然可以添加对更改其他字段的支持,但这会导致与其他支持 NIS 的系统的兼容性问题。 即使超级用户可以在编辑条目时为其他字段提供数据,额外的信息(除了密码 — 见下文)将被静默丢弃。

    例外:NIS 主服务器上的超级用户被允许更改任何字段。

  2. 需要密码验证。 chpass 实用程序将在进行任何更改之前提示用户输入 NIS 密码。 如果密码无效,所有更改都将被丢弃。

    例外:NIS 主服务器上的超级用户可以在不提供密码的情况下提交更改。 (超级用户可以选择使用 -o 标志关闭此功能,如下所述。)

当使用 NIS 支持编译 chpass 时,还有一些额外的选项标志可用:

domain

指定特定的 NIS 域。 chpass 实用程序默认使用由 domainname(1) 实用程序设置的系统域名。 -d 选项可用于覆盖默认值,或在未设置系统域名时指定域。

host

指定要查询的 NIS 服务器的名称或地址。 通常, chpass 将与在 master.passwd 或 passwd 映射中指定的 NIS 主控主机通信。 在尚未配置为 NIS 客户端的主机上,除非用户提供服务器的主机名,否则程序无法确定此信息。 请注意,指定的主机名不必是 NIS 主服务器的主机名;给定 NIS 域中的任何服务器(主服务器或从服务器)的名称都可以。

使用 -d 选项时,主机名默认为 “localhost” 。 -h 选项可以与 -d 选项一起使用,在这种情况下,用户指定的主机名将覆盖默认值。

如果用户同时存在于本地和 NIS 数据库中,则强制 chpass 修改用户密码信息的本地副本。

与 rpc.yppasswdd(8) (“old-mode”) 通信时强制使用基于 RPC 的更新。 当 NIS 主服务器上的超级用户调用时, chpass 允许使用专用的、非基于 RPC 的机制(在本例中为 UNIX 域套接字)对 NIS 密码映射进行无限制的更改。 -o 标志可用于强制 chpass 使用标准更新机制。 此选项主要用于测试目的。

的相反效果。 这个标志在很大程度上是多余的,因为如果启用了 NIS, chpass 默认会在 NIS 条目上运行。

/etc/master.passwd

用户数据库

/etc/passwd

版本 7 格式的密码文件

/etc/chpass.XXXXXX

密码文件的临时副本

/etc/shells

批准的 shell 列表

将当前用户的 shell 更改为 ‘/usr/local/bin/zsh’:

chsh -s /usr/local/bin/zsh

finger(1), login(1), passwd(1), getusershell(3), login.conf(5), passwd(5), pw(8), pwd_mkdb(8), vipw(8) Robert Morris and Ken Thompson, UNIX Password security.

chpass 实用程序出现在 4.3BSD-Reno 中。

用户信息应该(并且最终将)存储在其他地方。

November 17, 2020

FreeBSD 13.1-RELEASE

diff3.1

DIFF3(1)

DIFF3(1)

User Commands

DIFF3(1)

名称

diff3 - 逐行比较三个文件

diff3 [OPTION]... MYFILE OLDFILE YOURFILE

逐行比较三个文件。

-e --ed

将 OLDFILE 到 YOURFILE 的未合并更改输出到 MYFILE。

-E --show-overlap

输出未合并的更改,包围冲突。

-A --show-all

输出所有变化,包围冲突。

-x --overlap-only

输出重叠变化。

-X

输出重叠的变化,将它们括起来。

-3 --easy-only

输出未合并的非重叠更改。

-m --merge

输出合并文件而不是 ed 脚本 (默认 -A).

-L LABEL --label=LABEL

使用 LABEL 代替文件名。

-i

将 `w' 和 `q' 命令附加到 ed 脚本。

-a --text

将所有文件视为文本。

--strip-trailing-cr

在输入时去除尾随回车。

-T --initial-tab

通过在前面添加一个 tab 来使选项卡对齐。

--diff-program=PROGRAM

使用 PROGRAM 比较文件。

-v --version

输出版本信息。

--help

输出此帮助。

如果 FILE 是 `-',则读取标准输入。退出状态为 0 表示成功,1 表示冲突,2 表示故障。

由 Randy Smith 撰写。

向 报告错误。

版权所有 © 2004 Free Software Foundation, Inc。- 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。

diff3 的完整文档作为 Texinfo 手册进行维护。如果 info 和 diff3 程序已正确安装在您的站点上,则命令

info diff3

应该可以让您访问完整的手册。

April 2004

diffutils 2.8.7

comm.1

COMM(1)

COMM(1)

FreeBSD General Commands Manual

COMM(1)

comm —

概要
描述
-0
-i
-L
-U
-P
-S
-u
-v
-S (拆分字符串)处理的详细信息
\c
\f
\v
\#
\$
\_
\"
\´
\\
在 shell 脚本中使用
环境
退出状态
实例
兼容性
参见
标准
历史
缺陷
概要
描述
-f
-H
-h
-L
-P
-R
-v
退出状态
MODES
4000
2000
1000
0400
0200
0100
0040
0020
0010
0004
0002
0001
实例
644
go-w
=rw,+X
+X
755
u=rwx,go=rx
u=rwx,go=u-w
go=
g=u-w
兼容性
参见
标准
历史
缺陷

不鼓励向本地密码数据库添加新记录。 chpass 实用程序将允许管理员在启用 NIS 时将新记录添加到本地密码数据库,但这可能会导致一些混乱,因为新记录附加到主密码文件的末尾,通常在特殊的 NIS '+ 之后' 条目。 NIS 运行时,管理员应使用 vipw(8) 修改本地密码文件。

允许 NIS 主服务器上的超级用户向 NIS 密码映射添加新记录,前提是 rpc.yppasswdd(8) 服务器已使用 -a 标志启动以允许添加(默认情况下拒绝它们)。 chpass 实用程序默认尝试更新本地密码数据库;要改为更新 NIS 映射,请使用 -y 标志调用 chpass。

  • 不允许更改密码。 用户应该使用 passwd(1) 或 yppasswd(1) 来更改他们的 NIS 密码。 超级用户可以指定新密码(即使 “Password:” 字段未显示在编辑器模板中,超级用户也可以手动添加),但即使是超级用户也必须提供用户的原始密码,否则 rpc.yppasswdd(8) 将拒绝更新 NIS 映射。

    例外:NIS 主服务器上的超级用户可以使用 chpass 更改用户的 NIS 密码。

  • 概要
    描述
    -a
    -e
    -p
    -s
    环境
    NIS 交互
    -d
    -h
    -l
    -o
    -y
    -l
    文件
    实例
    参见
    历史
    缺陷
    概要
    描述
    作者
    REPORTING BUGS
    [email protected]
    版权
    参见
    选择或拒绝两个文件共有的行

    概要

    comm [-123i] file1 file2

    描述

    comm 实用程序读取 file1 和 file2 ,它们应该按词法排序,并生成三个文本列作为输出:仅在 file1 中的行;仅在 file2 中的行;和两个文件中的行。

    文件名 ``-'' 表示标准输入。

    可以使用以下选项:

    -1

    禁止打印第 1 列,仅在 file1 中的行。

    -2

    禁止打印第 2 列,仅在 file2 中的行。

    -3

    禁止打印第 3 列,两者共有的行。

    -i

    不区分大小写的行比较。

    每列前面都会有许多制表符,这些制表符的数量等于正在打印的编号较低的列的数量。 例如,如果第 2 列被抑制,则第 1 列中打印的行前面不会有任何制表符,而第 3 列中打印的行将有一个。

    comm 实用程序假定文件是按词法排序的;所有字符都参与行比较。

    环境

    LANG 、 LC_ALL 、 LC_COLLATE 和 LC_CTYPE 环境变量会影响 comm 的执行,如 environ(7) 中所述。

    退出状态

    The comm utility exits 0 on success, and >0 if an error occurs.

    实例

    假设一个名为 example.txt 的文件具有以下内容:

    a b c d

    仅在 example.txt 中显示行,仅在 stdin 和公共行中显示行:

    $ echo -e "B\nc" | comm example.txt - B a b c d

    仅显示进行不区分大小写比较的常用行:

    $ echo -e "B\nc" | comm -1 -2 -i example.txt - b c

    参见

    cmp(1), diff(1), sort(1), uniq(1)

    标准

    comm 实用程序符合 IEEE Std 1003.2-1992 (“POSIX.2”) 。

    -i 选项是对

    历史

    comm 命令出现在 Version 4 AT&T UNIX 中。

    July 27, 2020

    FreeBSD 13.1-RELEASE

    名称

    df.1

    DF(1)

    DF(1)

    FreeBSD General Commands Manual

    DF(1)

    名称

    df —

    显示可用磁盘空间

    df [--libxo] [-b | -g | -H | -h | -k | -m | -P] [-acilnT] [-,] [-t type] [file | filesystem ...]

    df 实用程序显示有关指定已安装 file system 或 file 系统上的可用磁盘空间量的统计信息。 默认情况下,块计数显示为假定块大小为 512 字节。 如果既没有指定文件也没有指定文件系统操作数,则显示所有已挂载文件系统的统计信息(受下面的 -t 选项影响)。

    可以使用以下选项:

    通过 libxo(3) 以不同的人类和机器可读格式生成输出。 有关命令行参数的详细信息,请参阅 xo_parse_args(3) 。

    显示所有挂载点,包括使用 MNT_IGNORE 标志挂载的那些。 这对于在命令行上指定的文件系统是隐含的。

    显式使用 512 字节块,覆盖环境中的任何 BLOCKSIZE 规范。 这与 -P 选项相同。 -k 选项覆盖此选项。

    显示总计。

    使用 1073741824 字节(1 Gibibyte)块而不是默认值。 这会覆盖环境中的任何 BLOCKSIZE 规范。

    “Human-readable” 输出。 使用单位后缀:Byte、Kibibyte、Mebibyte、Gibibyte、Tebibyte 和 Pebibyte(基于 1024 的幂),以便将位数减少到四位或更少。

    , -``-si

    与 -h 相同,但基于 1000 的幂。

    包括有关空闲和已用 inode 数量的统计信息。 结合 -h 或 -H 选项,inode 的数量按 1000 的幂进行缩放。

    使用 1024 字节(1 Kibibyte)块而不是默认值。 这会覆盖 -P 选项和环境中的任何 BLOCKSIZE 规范。

    仅显示有关本地安装的文件系统的信息。

    使用 1048576 字节(1 兆字节)块而不是默认值。 这会覆盖环境中的任何 BLOCKSIZE 规范。

    打印出之前从文件系统中获得的统计信息。 如果一个或多个文件系统可能处于无法提供统计信息的状态,则应使用此选项。 指定此选项时, df 将不会从文件系统请求新的统计信息,但会以先前获得的可能陈旧的统计信息进行响应。

    显式使用 512 字节块,覆盖环境中的任何 BLOCKSIZE 规范。 这与 -b 选项相同。 -k 选项覆盖此选项。

    仅打印指定类型的文件系统的统计信息。 可以在逗号分隔的列表中指定一种以上的类型。 文件系统类型列表可以以 “no” 为前缀,以指定 不应 对其采取操作的文件系统类型。 例如, df 命令:

    df -t nonfs,nullfs

    列出除 NFS 和 NULLFS 类型之外的所有文件系统。 lsvfs(1) 命令可用于找出系统上可用的文件系统类型。

    包括文件系统类型。

    -,

    (逗号)使用由 localeconv(3)- 返回的非货币分隔符(通常是逗号或句点)将打印尺寸分组并以千为单位分隔。 如果未设置区域设置,或者区域设置没有非货币分隔符,则此选项无效。

    指定报告块计数的单位。 这使用 getbsize(3) ,它允许使用字母 k (对于 1024 字节的倍数)、 m (对于 1048576 字节的倍数)或 g 对于 gibibytes)进行缩放的字节或数字单位。 允许的范围是 512 字节到 1 GB。 如果该值在外部,它将被设置为适当的限制。

    显示所有挂载点的可读可用磁盘空间,包括文件系统类型:

    $ df -ahT Filesystem Type Size Used Avail Capacity Mounted on /dev/ada1p2 ufs 213G 152G 44G 78% / devfs devfs 1.0K 1.0K 0B 100% /dev /dev/ada0p1 ufs 1.8T 168G 1.5T 10% /data linsysfs linsysfs 4.0K 4.0K 0B 100% /compat/linux/sys /dev/da0 msdosfs 7.6G 424M 7.2G 5% /mnt/usb

    显示以前收集的数据,包括除 devfs 或 linsysfs 文件系统之外的 inode 统计信息。 请注意, “no” 前缀会影响列表中的所有文件系统,并且 -t 选项只能指定一次:

    $ df -i -n -t nodevfs,linsysfs Filesystem 1K-blocks Used Avail Capacity iused ifree %iused Mounted on /dev/ada1p2 223235736 159618992 45757888 78% 1657590 27234568 6% / /dev/ada0p1 1892163184 176319420 1564470712 10% 1319710 243300576 1% /data /dev/da0 7989888 433664 7556224 5% 0 0 100% /mnt/usb

    显示包含文件 /etc/rc.conf 的文件系统的人类可读信息:

    $ df -h /etc/rc.conf Filesystem Size Used Avail Capacity Mounted on /dev/ada1p2 213G 152G 44G 78% /

    与上面相同,但指定了一些文件系统:

    $ df -h /dev/ada1p2 Filesystem Size Used Avail Capacity Mounted on /dev/ada1p2 213G 152G 44G 78% /

    lsvfs(1), quota(1), fstatfs(2), getfsstat(2), statfs(2), getbsize(3), getmntinfo(3), libxo(3), localeconv(3), xo_parse_args(3), fstab(5), mount(8), pstat(8), quot(8), swapinfo(8)

    除大多数选项外, df 实用程序符合 IEEE Std 1003.1-2004 (“POSIX.1”) ,它仅定义 -k, -P 和 -t 选项。

    df 命令出现在 Version 1 AT&T UNIX 中。

    如果指定了文件或文件系统,则忽略 -n 标志。 此外,如果用户无法访问安装点,则文件系统信息可能已过时。

    -b 和 -P 选项是相同的。 前者来自 BSD 传统,后者是 IEEE Std 1003.1-2004 (“POSIX.1”) 一致性所必需的。

    October 5, 2020

    FreeBSD 13.1-RELEASE

    chgrp.1

    CHGRP(1)

    CHGRP(1)

    FreeBSD General Commands Manual

    CHGRP(1)

    名称

    chgrp —

    更改组

    chgrp [-fhvx] [-R [-H | -L | -P]] group file ...

    chgrp 实用程序将由每个 file 操作数命名的文件的 group 设置为由组操作数指定的组 ID。

    可以使用以下选项:

    如果指定了 -R 选项,则命令行上的符号链接会被跟随,因此不受该命令的影响。 (不遵循遍历过程中遇到的符号链接。)

    如果指定了 -R 选项,则遵循所有符号链接。

    如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。

    更改以文件为根的文件层次结构的组 ID,而不仅仅是文件本身。 当使用 “.*” 等通配符时,请注意无意中将 “..” 硬链接匹配到父目录。

    force 选项忽略错误,除了使用错误并且不查询奇怪的模式(除非用户没有适当的权限)。

    如果文件是符号链接,则链接本身的组 ID 会更改,而不是指向的文件。

    使 chgrp 变得冗长,在组被修改时显示文件。 如果多次指定 -v 标志, chgrp 将打印文件名,后跟旧的和新的数字组 ID。

    不遍历文件系统挂载点。

    除非指定了 -R 选项,否则 -H -、 -L 和 -P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。

    group 操作数可以是组数据库中的组名,也可以是数字组 ID。 如果组名也是数字组 ID,则操作数用作组名。

    调用 chgrp 的用户必须属于指定的组并且是文件的所有者,或者是超级用户。

    如果 chgrp 接收到 SIGINFO 信号(参见 stty(1) 的 status 参数),则显示当前文件名以及旧的和新的组名。

    /etc/group

    组 ID 文件

    The chgrp utility exits 0 on success, and >0 if an error occurs.

    在该系统的早期版本中,符号链接没有组。

    -v 和 -x 选项是非标准的,不建议在脚本中使用它们。

    chown(2), fts(3), group(5), passwd(5), symlink(7), chown(8)

    chgrp 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。

    January 7, 2017

    FreeBSD 13.1-RELEASE

    Mail.1

    MAIL(1)

    MAIL(1)

    FreeBSD General Commands Manual

    MAIL(1)

    mail, Mail,

    ar.1

    AR(1)

    AR(1)

    FreeBSD General Commands Manual

    AR(1)

    ar, ranlib —

    概要
    描述
    --libxo
    -a
    -b
    -c
    -g
    -h
    -H
    -i
    -k
    -l
    -m
    -n
    -P
    -t
    -T
    环境
    BLOCKSIZE
    实例
    参见
    标准
    历史
    缺陷
    概要
    描述
    -H
    -L
    -P
    -R
    -f
    -h
    -v
    -x
    FILES
    退出状态
    兼容性
    参见
    标准
    mailx
    —

    发送和接收邮件

    概要

    mail [-dEiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ... [-sendmail-option ...] mail [-dEHiInNv] [-F] -f [name] mail [-dEHiInNv] [-F] [-u user] mail [-d] -e [-f name]

    介绍

    mail 实用程序是一个智能邮件处理系统,它的命令语法让人想起 ed(1) ,其中的行被消息替换。

    可以使用以下选项:

    -v

    详细模式。 交付的详细信息显示在用户的终端上。

    -d

    调试模式。 有关详细信息,请参阅 debug 邮件选项。

    -e

    测试(默认情况下,系统)邮箱中是否存在邮件。 如果有邮件则返回退出状态 0;否则,返回退出状态 1。

    -H

    只写一个标题摘要,然后退出。

    -E

    不要发送正文为空的消息。 这对于来自 cron(8) 脚本的管道错误很有用。

    -i

    忽略 tty 中断信号。 这在嘈杂的电话线上使用 mail 时特别有用。

    -I

    即使输入不是终端,也强制 mail 以交互模式运行。 特别是,发送邮件时的 ‘~’ 特殊字符仅在交互模式下有效。

    -n

    启动时禁止读取系统范围的 mail.rc 文件。

    -N

    在阅读邮件或编辑邮件文件夹时禁止初始显示邮件标题。

    -s subject

    在命令行上指定 subject 。 (只有 -s 标志之后的第一个参数用作主题;小心引用包含空格的主题。)

    -c cc-addr

    将抄送副本发送到用户的 cc-addr 列表。 cc-addr 参数应该是一个以逗号分隔的名称列表。

    -b bcc-addr

    向用户的密件 bcc-addr 列表发送密件抄送。 bcc-addr 参数应该是一个以逗号分隔的名称列表。

    -f [mbox]

    读入您的 mbox (或指定文件)的内容进行处理;当您 quit 时, mail 会将未删除的消息写回此文件。

    -F

    将消息记录在以第一个收件人命名的文件中。 该名称是在邮件标题的 “To:” 行中首先找到的地址的登录名部分。 覆盖 record 变量(如果已设置)。

    -u user

    相当于:

    mail -f /var/mail/user

    Startup Actions

    在启动时, mail 将按顺序执行系统命令文件 /usr/share/misc/mail.rc 、 /usr/local/etc/mail.rc 和 /etc/mail.rc 中的命令,除非系统明确告知不要这样做使用 -n 选项。 接下来,执行用户个人命令文件 ~/.mailrc 中的命令。 然后, mail 实用程序检查其命令行选项以确定是否要发送新消息,或者是否要读取现有邮箱。

    发送邮件

    要将消息发送给一个或多个人,可以使用参数调用 mail ,这些参数是邮件将被发送到的人的姓名。 然后,您需要输入您的消息,然后在一行的开头输入 ⟨control-D⟩ 。 回复或发送邮件 下面的部分描述了可帮助您撰写信件的一些 mail 功能。

    阅读邮件

    在正常使用中, mail 不提供任何参数,并在邮局检查您的邮件,然后打印出找到的每条邮件的一行标题。 当前消息最初是第一条消息(编号为 1),可以使用 print 命令(可以缩写为 p )打印。 您可以像在 ed(1) 中的行之间移动一样在消息之间移动,使用命令 + 和 - 前后移动以及简单的数字。

    处理邮件

    检查消息后,您可以 delete (d) 消息或 reply (r) 消息。 删除会导致 mail 程序忘记该消息。 这不是不可逆转的;消息可以通过给出它的编号来 undeleted (u) ,或者可以通过给出 exit (x) 命令中止 mail 会话。 但是,已删除的消息通常会消失,再也看不到了。

    指定的消息

    可以给诸如 print 和 delete 之类的命令一个消息编号列表作为参数,以一次应用于多个消息。 因此, “delete 1 2” 删除消息 1 和 2,而 “delete 1-5” 删除消息 1 到 5。 特殊名称 ‘*’ 表示所有消息, ‘$’ 表示最后一条消息;因此,可以在 “top *” 中使用打印消息前几行的命令 top 来打印所有消息的前几行。

    回复或发邮件

    您可以使用 reply 命令设置对消息的响应,将其发回给发件人。 然后,您输入的文本(直到文件结尾)定义了消息的内容。 在撰写邮件时, mail 会特别处理以字符 ‘~’ 开头的行。 例如,键入 ~m (单独一行)会将当前消息的副本放入响应中,将其右移一个制表位(参见下面的 indentprefix 变量)。 其他转义将设置主题字段,添加和删除消息的收件人,并允许您转义到编辑器以修改消息或转义到 shell 以运行某些命令。 (这些选项在下面的摘要中给出。)

    结束邮件处理会话

    您可以使用 quit (q) 命令结束 mail 会话。 已检查的消息将转到您的 mbox 文件,除非它们已被删除,在这种情况下它们将被丢弃。 未经审查的邮件会返回邮局。(参见上面的 -f 选项)。

    个人和系统范围的分发列表

    也可以创建个人分发列表,例如,您可以将邮件发送给 “cohorts” 并发送给一组人。 可以通过放置类似的行来定义此类列表

    alias cohorts bill ozalp jkf mark kridle@ucbcory

    在您的主目录中的文件 .mailrc 中。 此类别名的当前列表可以在 mail 中使用 alias 命令显示。 可以通过编辑 /etc/mail/aliases 创建系统范围的分发列表,参见 aliases(5) 和 sendmail(8) ;这些以不同的语法保存。 在您发送的邮件中,个人别名将在发送给其他人的邮件中扩展,以便他们能够 reply 收件人。 发送邮件时系统范围的别名不会扩展,但任何返回到机器的回复都会扩展系统范围的别名,因为所有邮件都通过 sendmail(8) 。

    网络邮件 (ARPA, UUCP, Berknet)

    mail 实用程序有许多选项可以在 .mailrc 文件中设置以改变其行为;因此 “set askcc” 启用 askcc 功能。 (这些选项总结如下。)

    概括

    (改编自邮件 Mail Reference Manual 。)

    每个命令都单独在一行上键入,并且可以在命令词之后使用参数。 该命令不需要全部输入 — 使用与输入前缀匹配的第一个命令。 对于以消息列表为参数的命令,如果没有给出消息列表,则使用满足命令要求的下一条消息转发。 如果当前消息的前面没有消息,则向后搜索,如果根本没有好的消息,则 mail 类型 “No applicable messages” 并中止命令。

    -

    打印出前面的消息。 如果给定一个数字参数 n, 则转到前 n N 条消息并打印它。

    #

    忽略该行的其余部分作为注释。

    ?

    打印命令的简短摘要。

    !

    执行后面的 shell(参见 sh(1) 和 csh(1)) 命令。

    Print

    (P) 与 print 类似,但也打印出忽略的标题字段。 另请参阅 print, ignore 和 retain 。

    Reply

    (R) 回复发起人。 不回复原始邮件的其他收件人。

    Type

    (T) Print 与打印命令相同。

    alias

    (a) 不带参数,打印出所有当前定义的别名。 使用一个参数,打印出该别名。 使用多个参数,创建新别名或更改旧别名。

    alternates

    (alt) 如果您在多台机器上拥有帐户, alternates 命令很有用。 它可用于通知 mail 列出的地址确实是您。 当您 reply 邮件时, mail 不会将邮件副本发送到 alternates 列表中列出的任何地址。 如果给定的 alternates 命令没有参数,则显示当前的替代名称集。

    chdir

    (c)- 将用户的工作目录更改为指定的,如果给定的话。 如果没有给出目录,则更改为用户的登录目录。

    copy

    (co) copy 命令的作用与 save 相同,只是它不会在您 quit 时将用于删除的消息标记为删除。

    delete

    (d) 将消息列表作为参数并将它们全部标记为已删除。 已删除的消息不会保存在 mbox 中,它们也不能用于大多数其他命令。

    dp

    (也 dt) 删除当前消息并打印下一条消息。 如果没有下一条消息, mail 会显示 “at EOF” 。

    edit

    (e) 获取消息列表并将文本编辑器依次指向每个消息。 从编辑器返回时,该消息被读回。

    exit

    (ex 或 x) 在不修改用户的系统邮箱、他的 mbox 文件或他在 -f 中的编辑文件的情况下立即返回到 shell。

    file

    (fi) 同 folder 。

    folders

    列出文件夹目录中的文件夹名称。

    folder

    (fo) folder 命令切换到一个新的邮件文件或文件夹。 没有参数,它会告诉您当前正在阅读哪个文件。 如果你给它一个参数,它会写出你在当前文件中所做的更改(例如删除)并读入新文件。 一些特殊的约定被认可为名称。 ‘#’ 表示上一个文件, ‘%’ 表示您的系统邮箱, “%user” 表示用户的系统邮箱, ‘&’ 表示您的 mbox 文件, “+folder” 表示您的文件夹目录下的文件。

    from

    (f) 获取消息列表并打印它们的消息标题。

    headers

    (h) 列出当前的报头范围,这是一个 18 个消息组。 如果给出 ‘+’ 参数,则打印下一个 18 个消息组,如果给出 ‘-’ 参数,则打印前一个 18 个消息组。

    help

    ? 的同义词

    hold

    (ho, 也 preserve) 获取消息列表并将其中的每条消息标记为保存在用户的系统邮箱中,而不是保存在 mbox 中。 不覆盖 delete 命令。

    ignore

    将命名的标题字段列表添加到 ignored list. 列表中。 当您打印消息时,忽略列表中的标题字段不会打印在您的终端上。 此命令对于抑制某些机器生成的标头字段非常方便。 Type 和 Print 命令可用于打印整个消息,包括忽略的字段。 如果 ignore 不带参数执行,它会列出当前被忽略的字段集。

    inc

    合并在阅读邮件时收到的任何新邮件。 新消息被添加到消息列表的末尾,并且当前消息被重置为第一条新邮件消息。 这不会重新编号现有的消息列表,也不会导致保存到目前为止所做的任何更改。

    mail

    (m) 将登录名和通讯组名作为参数,并将邮件发送给这些人。

    mbox

    指示在您退出时将消息列表发送到主目录中的 mbox 。 如果您 not 设置 hold 选项,这是消息的默认操作。

    more

    (mo) 获取消息列表并调用该列表上的寻呼机。

    next

    (n, 如 + 或 CR) 按顺序转到下一条消息并键入它。 使用参数列表,键入下一个匹配的消息。

    preserve

    (pre) hold 的同义词。

    print

    (p) 获取消息列表并在用户终端上键入每条消息。

    quit

    (q) 终止会话,将所有未删除、未保存的消息保存在用户登录目录中的 mbox 文件中,保留其系统邮箱中标记为 hold 或 preserve 或从未引用的所有消息,并从其系统邮箱中删除所有其他消息。 如果会话期间有新邮件到达,则会给出消息 “You have new mail” 。 如果在编辑带有 -f 标志的邮箱文件时给出,则重写编辑文件。 除非重写编辑文件失败,否则会返回到 shell,在这种情况下,用户可以使用 exit 命令退出。

    reply

    (r) 获取消息列表并将邮件发送给指定消息的发件人和所有收件人。 不得删除默认消息。

    respond

    reply 的同义词。

    retain

    将命名的标题字段列表添加到 retained list 中。 当您打印消息时,仅保留列表中的标题字段显示在您的终端上。 所有其他标头字段都被抑制。 type 和 print 命令可用于完整地打印消息。 如果在没有参数的情况下执行 retain ,它会列出当前保留的字段集。

    save

    (s) 获取消息列表和文件名,并将每条消息依次附加到文件末尾。 引号中的文件名,后跟行数和字符数会在用户终端上回显。

    set

    (se) 不带参数,打印所有变量值。 否则,设置选项。 参数的形式为 option=value ( ‘=’ 前后没有空格)或 option 。 引号可以放在赋值语句的任何部分来引用空格或制表符,即 “set indentprefix="->"”

    saveignore

    Saveignore 是 save ignore print 和 type 的内容。 通过 save 保存消息或自动保存到 mbox 时,会过滤掉如此标记的标题字段。

    saveretain

    Saveretain 是 save retain 是 print 和 type 的内容。 如此标记的标题字段是唯一在通过 save 保存或自动保存到 mbox 时与消息一起保存的字段。 Saveretain 覆盖 saveignore 。

    shell

    (sh) 调用 shell 的交互式版本。

    size

    获取消息列表并打印出每条消息的字符大小。

    source

    source 命令从文件中读取命令。

    top

    获取消息列表并打印每行的前几行。 打印的行数由变量 toplines 控制,默认为 5。

    type

    (t) print 的同义词。

    unalias

    获取由 alias 命令定义的名称列表并丢弃记住的用户组。 组名不再具有任何意义。

    undelete

    (u) 获取消息列表并将每条消息标记为 not 删除。

    unread

    (U) 获取消息列表并将每条消息标记为 not 读。

    unset

    获取选项名称列表并丢弃它们的记忆值; set 的逆。

    visual

    (v) 获取消息列表并在每条消息上调用显示编辑器。

    write

    (w) 与 save 类似,不同之处在于 只 保存消息体( (不包括 标题)。对于通过消息系统发送和接收源程序文本等任务非常有用。

    xit

    (x) exit 的同义词。

    z

    mail 实用程序以窗口形式显示邮件标题,如 headers 命令中所述。 您可以使用 z 命令将 mail 的注意力转移到下一个窗口。 此外,您可以使用 z- 移动到上一个窗口。

    波浪字符转义

    以下是波浪号转义的摘要,用于编写消息以执行特殊功能。 波浪号转义仅在行首被识别。 “tilde escape” 这个名字有点用词不当,因为实际的 escape 字符可以通过选项转义来设置。

    ~a

    将 sign= 选项中的签名字符串插入到消息中。

    ~A

    将 Sign= 选项中的签名字符串插入到消息中。

    ~b name ...

    将给定姓名添加到抄送收件人列表中,但不要使姓名在抄送:行中可见( “blind” 抄送)。

    ~c name ...

    将给定名称添加到抄送收件人列表中。

    ~d

    将主目录中的 dead.letter 文件读入消息中。

    ~e

    对到目前为止收集的消息调用文本编辑器。 编辑会话完成后,您可以继续将文本附加到消息中。

    ~f messages

    将命名消息读入正在发送的消息中。 如果未指定消息,则读入当前消息。 当前被忽略的消息头(通过 ignore 或 retain 命令)不包括在内。

    ~F messages

    与 ~f 相同,除了包含所有消息头。

    ~h

    通过依次键入每个字段并允许用户将文本附加到末尾或使用当前终端擦除和终止字符来修改字段来编辑消息标题字段。

    ~i string

    将命名选项的值插入到消息的文本中。

    ~m messages

    将命名的消息读入正在发送的消息中,按制表符缩进或按 indentprefix 的值缩进。 如果未指定消息,则阅读当前消息。 当前被忽略的消息头(通过 ignore 或 retain 命令)不包括在内。

    ~M messages

    与 ~m 相同,但包含所有消息头。

    ~p

    打印出到目前为止收集的消息,以消息头字段开头。

    ~q

    如果设置了 save ,则中止正在发送的消息,将消息复制到主目录中的 dead.letter 。

    ~r filename, ~r !command

    ~< filename, ~< !command

    将命名文件读入消息中。 如果参数以 ‘!’ 开头,则字符串的其余部分被视为任意系统命令并被执行,标准输出插入到消息中。

    ~R string

    使用 string 作为回复字段。

    ~s string

    使命名字符串成为当前主题字段。

    ~t name ...

    将给定名称添加到直接收件人列表中。

    ~v

    对目前收集的消息调用替代编辑器(由 VISUAL 环境变量定义)。 通常,替代编辑器将是屏幕编辑器。 退出编辑器后,您可以继续将文本附加到消息的末尾。

    ~w filename

    将消息写入指定文件。

    ~x

    与 ~q 一样退出,但消息未保存在 dead.letter 中。

    ~! command

    执行指示的 shell 命令,然后返回消息。

    ~| command, ~^ command

    将消息作为过滤器通过命令传递。 如果命令没有输出或异常终止,则保留消息的原始文本。 命令 fmt(1) 通常用作重新调整消息的 command 。

    ~: mail-command, ~_ mail-command

    执行给定的 mail 命令。 但是,并非所有命令都是允许的。

    ~.

    在输入时模拟文件结尾。

    ~?

    打印可用命令转义的摘要。

    ~~ string

    在以单个 ‘~’ 开头的消息中插入文本字符串。 如果您更改了转义字符,那么您应该将该字符加倍以发送它。

    邮件选项

    选项可以使用 set 命令设置,也可以使用 unset 或 set noname 命令禁用。 选项可以是二元的,在这种情况下,只看它们是否设置很重要;或字符串,在这种情况下,实际值是有意义的。 如果未设置选项, mail 将查找同名的环境变量。 可用选项包括:

    append

    导致保存在 mbox 中的消息附加到末尾而不是前置。 这应该始终设置(最好在系统范围的 mail.rc 文件之一中)。 默认为 noappend 。

    ask, asksub

    使 mail 提示您输入您发送的每封邮件的主题。 如果您只用换行符响应,则不会发送主题字段。 默认为 asksub 。

    askbcc

    导致在每封邮件末尾提示您提供其他密件抄送收件人。 用换行符响应表示您对当前列表感到满意。 默认为 noaskbcc 。

    askcc

    导致在每封邮件的末尾提示您提供其他抄送收件人。 用换行符响应表示您对当前列表感到满意。 默认为 noaskcc 。

    autoinc

    使新邮件在到达时自动合并。设置此项类似于在每个提示符处发出 inc 命令,不同之处在于当前消息不会在新邮件到达时重置。 默认为 noautoinc 。

    autoprint

    使 delete 命令的行为类似于 dp; 因此,删除一条消息后,将自动键入下一条消息。 默认为 noautoprint 。

    crt

    带值的选项 crt 用作阈值,以确定在使用 PAGER 读取消息之前必须等待多长时间。 如果 crt 未设置值,则系统中存储的终端屏幕高度用于计算阈值(请参阅 stty(1)) 。 默认为 nocrt 。

    debug

    设置二进制选项 debug 与在命令行中指定 -d 相同,会导致 mail 输出对调试 mail 有用的各种信息。 如果在这种模式下调用 mail 发送邮件,所有的准备工作都会进行并上报,但邮件不会真正发送出去。 默认是 nodebug 。

    dot

    二进制选项 dot 使 mail 将一行中的句点单独解释为您正在发送的消息的终止符。 默认为 nodot 。

    escape

    如果已定义,则此选项的第一个字符给出用于代替 ‘~’ 的字符以表示转义。

    flipr

    反转 reply 和 Reply 命令的意义。 默认为 noflipr 。

    folder

    用于存储消息文件夹的目录名称。 如果此名称以 ‘/’ 开头, mail 将其视为绝对路径名;否则,将找到相对于您的主目录的文件夹目录。

    header

    如果已定义,则在阅读邮件或编辑邮件文件夹时最初显示邮件标题。 默认为 header 。 可以通过在命令行上提供 -N 标志来禁用此选项。

    hold

    默认情况下,此选项用于将邮件保存在系统邮箱中。 默认为 nohold 。

    ignore

    导致来自终端的中断信号被忽略并作为 @ 回显。 默认为 noignore 。

    ignoreeof

    与 dot 相关的一个选项是 ignoreeof ,它使 mail 拒绝接受 ⟨control-D⟩ 作为消息的结尾。 Ignoreeof 也适用于 mail 命令模式。 默认为 noignoreeof 。

    indentprefix

    ~m 波浪号转义用于缩进消息的字符串,代替正常的制表符 (^I) 。 如果它包含空格或制表符,请务必引用该值。

    metoo

    通常,当扩展包含发件人的组时,会从扩展中删除发件人。 设置此选项会使发件人包含在组中。 默认为 nometoo 。

    quiet

    首次调用时禁止打印版本。默认为 noquiet 。

    record

    如果已定义,则给出用于记录所有外发邮件的文件的路径名。 如果未定义,则不保存外发邮件。 默认为 norecord 。

    Replyall

    反转 reply 和 Reply 命令的意义。 默认为 noReplyall 。

    save

    如果设置了此选项,并且您使用两个 RUBOUT 擦除或删除)中止消息, mail 会将部分字母复制到您主目录中的文件 dead.letter 中。 默认为 save 。

    searchheaders

    如果设置了这个选项,那么 “/x:y” 形式的消息列表说明符将扩展到所有在标题字段 x 中包含子字符串 y 的消息。 字符串搜索不区分大小写。 如果省略 x ,它将默认为 “Subject” 标题字段。 “/to:y” 形式是一种特殊情况,它将扩展到所有在 “To 、” “Cc” 或 “Bcc” 标头字段中包含子字符串 y 的消息。 “to” 的检查区分大小写,因此 “/To:y” 可用于将 y 的搜索限制为 “To:” 字段。 默认为 nosearchheaders 。

    toplines

    如果已定义,则给出要使用 top 命令打印的消息的行数;通常会打印前五行。 冗长的 设置选项

    verbose

    设置选项 verbose 与在命令行上使用 -v 标志相同。 当 mail 以详细模式运行时,消息的实际传递会显示在用户终端上。 默认为 noverbose 。

    环境

    DEAD

    在发生中断或传递错误时保存部分消息的文件的路径名。 默认为 ~/dead.letter 。

    EDITOR

    在 edit 命令和 ~e 转义中使用的文本编辑器的路径名。 如果未定义,则使用默认编辑器。

    HOME

    用户主目录的路径名。

    LISTER

    在 folders 命令中使用的目录列表器的路径名。 默认为 /bin/ls 。

    MAIL

    用户邮箱的位置。 默认为 /var/mail 。

    MAILRC

    包含初始 mail 命令的文件的路径名。默认为 ~/.mailrc 。

    MBOX

    邮箱文件的名称。 它可以是文件夹的名称。 默认是用户主目录中的 mbox 。

    PAGER

    在 more 命令或设置 crt 变量时使用的程序的路径名。 如果未定义此选项,则使用默认分页器 less(1) 。

    REPLYTO

    如果设置,将用于初始化传出消息的回复字段。

    SHELL

    要在 ! 中使用的 shell 的路径名 命令和 ~! 转义。 如果未定义此选项,则使用默认 shell。

    TMPDIR

    用于创建临时文件的目录的路径名。

    VISUAL

    在 visual 命令和 ~v 转义中使用的文本编辑器的路径名。

    USER

    执行邮件的用户的登录名。

    文件

    /var/mail/*

    邮局。

    ~/mbox

    用户的旧邮件。

    ~/.mailrc

    给出初始 mail 命令的文件。 这可以通过设置 MAILRC 环境变量来覆盖。

    /tmp/R*

    临时文件。

    /usr/share/misc/mail.*help

    帮助文件。

    /usr/share/misc/mail.rc

    /usr/local/etc/mail.rc

    /etc/mail.rc

    系统范围的初始化文件。 每个文件都将按顺序获取(如果存在)

    参见

    fmt(1), newaliases(1), vacation(1), aliases(5), sendmail(8)

    历史

    mail 命令出现在版本 Version 1 AT&T UNIX 中。 该手册页源自最初由 The Mail Reference Manual Kurt Shoens 编写的邮件参考手册。

    缺陷

    这里没有记录一些标志。 大多数对一般用户没有用。

    通常, mail 只是一个指向 Mail 和 mailx 的链接,这可能会造成混淆。

    alternates 列表的名称是不正确的英文(应该是 “alternatives”), 但为了兼容性而保留。

    August 8, 2018

    FreeBSD 13.1-RELEASE

    名称
    管理档案

    概要

    ar -d [-T] [-f] [-j] [-v] [-z] archive file ... ar -m [-T] [-a position-after] [-b position-before] [-f] [-i position-before] [-j] [-s | -S] [-z] archive file ... ar -p [-T] [-f] [-v] archive [file ...] ar -q [-T] [-c] [-D] [-f] [-s | -S] [-U] [-v] [-z] archive file ... ar -r [-T] [-a position-after] [-b position-before] [-c] [-D] [-f] [-i position-before] [-j] [-s | -S] [-u] [-U] [-v] [-z] archive file ... ar -s [-j] [-z] archive ar -t [-f] [-T] [-v] archive [file ...] ar -x [-C] [-T] [-f] [-o] [-u] [-v] archive [file ...] ar -M ranlib [-D] [-U] archive ...

    描述

    ar 实用程序创建并维护组合成档案的文件组。 创建存档后,可以向其中添加新文件,并且可以提取、删除或替换现有文件。

    文件在存档中由它们的最后一个文件名组件命名,因此如果包含 “/” 的路径引用的文件被存档,它将由路径的最后一个组件命名。 同样,当将命令行中列出的路径与存档中存储的文件名匹配时,只会比较路径的最后一个组成部分。

    ar- 的正常使用是用于创建和维护适合与链接编辑器 ld(1) 一起使用的库,尽管它不限于此目的。 ar 实用程序可以创建和管理用于加速链接编辑操作的存档符号表(请参阅 ar(5) )。 如果存档中存在符号表,它将通过存档的后续操作保持最新。

    ranlib 实用程序用于将存档符号表添加到现有存档。

    选项

    ar 实用程序支持以下选项:

    -a member-after

    当与选项 -m 一起使用时,此选项指定由参数 file ... 指定的归档成员移动到由参数 member-after 命名的归档成员之后。 当与选项 -r 一起使用时,此选项指定由参数 file ... 指定的文件添加到由参数 member-after 命名的存档成员之后。

    -b member-before

    当与选项 -m 一起使用时,此选项指定由参数 file ... 指定的存档成员移动到由参数 member-before 命名的存档成员之前。 当与选项 -r 一起使用时,此选项指定由参数 file ...- 指定的文件添加到由参数 member-before 命名的存档成员之前。

    -c

    使用 -r 和 -q 选项创建新存档时抑制打印的信息性消息。

    -C

    防止提取的文件替换文件系统中的同名文件。

    -d

    从参数 archive 指定的存档中删除参数 file ... 命名的成员。 存档的符号表(如果存在)将更新以反映存档的新内容。

    -D

    当与 -r 或 -q 选项结合使用时,与 -s 选项不带其他选项一起使用时,或者当作为 ranlib 调用时,插入 0 而不是真正的 mtime、uid 和 gid 值和 0644 而不是来自命名成员的文件模式通过参数 file ... 这确保了当成员内容相同时,生成的存档上的校验和是可重现的。 默认情况下启用此选项。 如果在命令行上指定了多个 -D 和 -U 选项,则最后一个优先。

    -f

    与选项 -T 同义。

    -i member-before

    与选项 -b 同义。

    -j

    此选项被接受但被忽略。

    -l

    接受此选项是为了与 GNU ar(1) 兼容,但会被忽略。

    -m

    在存档中移动由参数 file ... 指定的存档成员。 如果位置已由 -a, -b 或 -i 选项之一指定,则成员将移动到指定位置之前或之后。 如果未指定位置,则将指定的成员移动到存档的末尾。 如果档案有符号表,则更新它以反映档案的新内容。

    -M

    从标准输入读取和执行 MRI 图书馆员命令。 ar 实用程序可以理解的命令在 MRI 图书管理员命令 部分中进行了描述。

    -o

    提取成员时保留成员的原始修改时间。

    -p

    将由参数 file ... 命名的指定存档成员的内容写入标准输出。 如果未指定任何成员,则归档中所有文件的内容将按照它们在归档中出现的顺序写入。

    -q

    将参数 file ... 指定的文件附加到参数 archive 指定的存档,而不检查文件是否已存在于存档中。 存档符号表将根据需要更新。 如果参数 archive 指定的文件不存在,将创建一个新的档案。

    -r

    在参数 archive 指定的存档中替换(添加)参数 file ... 指定的文件,必要时创建存档。 替换现有成员不会更改存档中成员的顺序。 如果在参数文件中命名的 file ... 不存在,则存档中与该名称匹配的现有成员不会更改。 除非指定了定位选项 -a, -b 或 -i 之一,否则新文件将添加到存档的末尾。 存档符号表(如果存在)将更新以反映存档的新状态。

    -s

    将存档符号表(请参阅 ar(5) )添加到由参数 archive 指定的存档中。单独使用 -s 选项调用 ar 等效于调用 ranlib 。

    -S

    不要生成存档符号表。

    -t

    列出由参数 file ... 指定的文件,按它们在存档中出现的顺序排列,每行一个。 如果未指定文件,则列出存档中的所有文件。

    -T

    命名存档成员时,仅使用存档成员名称或命令行文件名参数的前 15 个字符。

    -u

    有条件地更新存档或提取成员。 当与 -r 选项一起使用时,如果由参数 file ... 命名的文件比它们的归档版本更新,它们将在归档中被替换。 当与 -x 选项一起使用时,参数 file ... 指定的成员仅在它们比文件系统中的相应文件更新时才会被提取。

    -U

    与 -r 或 -q 选项结合使用时,插入真正的 mtime、uid 和 gid 以及来自参数文件命名的成员的文件模式值 file ... 。如果在命令上指定了多个 -D 和 -U 选项行,最后一个优先。

    -v

    提供详细的输出。 当与 -d, -m, -q 或 -x 选项一起使用时, ar 给出正在执行的归档修改的逐个文件描述,它由三个空格分隔的字段组成:选项字母、破折号 “-” 和文件名。当与 -r 选项一起使用时, ar 显示如上的描述,但如果将文件添加到存档中,则首字母为 “a” ,如果文件替换存档中已有的文件,则为 “r” 。 当与 -p 选项一起使用时,包含在 “<” 和 “>” 字符中的文件名将写入标准输出,前面有一个换行符,后跟两个换行符。 命名文件的内容跟在文件名后面。 当与 -t 选项一起使用时, ar 显示八个空格分隔的字段:由 strmode(3) 显示的文件权限、由斜杠 ( “/”) 分隔的十进制用户和组 ID、以字节为单位的文件大小、文件修改 strftime(3) 格式 “%b %e %H:%M %Y” 的时间,以及文件名。

    -V

    打印版本字符串并退出。

    -x

    将参数 file ... 指定的存档成员提取到当前目录中。 如果未指定任何成员,则提取档案的所有成员。如果与提取的成员对应的文件不存在,则将创建该文件。 如果提取的成员对应的文件确实存在,则其所有者和组将不会更改,而其内容将被覆盖,并且其权限将设置为存档中输入的权限。 除非指定了 -o 选项,否则文件的访问和修改时间将与提取时间相同。

    -z

    此选项被接受但被忽略。

    MRI 图书管理员命令

    如果指定了 -M 选项, ar 实用程序将从其标准输入读取并执行命令。 如果标准输入是终端, ar 实用程序将在读取一行之前显示提示 “AR >” ,即使遇到错误也会继续操作。 如果标准输入不是终端, ar 实用程序将不会显示提示,并会在遇到错误时终止执行。

    每个输入行包含一个命令。 输入行中的单词由空格字符分隔。 该行的第一个单词是命令,其余单词是命令的参数。 在任何一种情况下都可以指定命令字。 参数可以用逗号或空格分隔。

    允许空行并被忽略。 长行以 “+” 字符结束。

    “*” 和 “;” 字符开始评论。 注释一直延伸到行尾。

    执行 MRI 图书管理员脚本时, ar 实用程序在存档的临时副本上工作。 使用 save 命令对副本进行永久更改。

    ar 实用程序可以理解的命令是:

    addlib archive | addlib archive (member [, member]...)

    将由参数 archive 命名的档案内容添加到当前档案中。 如果使用参数 member 命名特定成员,则将这些成员添加到当前存档中。 如果未指定任何成员,则将归档的全部内容添加到当前归档。

    addmod member [, member]...

    将参数 member 命名的文件添加到当前存档。

    clear

    丢弃当前存档的所有内容。

    create archive

    创建一个由参数 archive 命名的新档案,并使其成为当前档案。 如果命名存档已存在,则在发出 save 命令时将覆盖它。

    delete module [, member]...

    从当前存档中删除由参数 member 命名的模块。

    directory archive (member [, member]...) [outputfile]

    列出存档中的每个命名模块。 输出的格式取决于使用 verbose 命令设置的详细程度设置。 输出被发送到标准输出,或由参数 outputfile 指定的文件。

    end

    从 ar 实用程序成功退出。 对当前存档的任何未保存的更改都将被丢弃。

    extract member [, member]...

    从当前存档中提取由参数 member 命名的成员。

    list

    以详细样式显示当前存档的内容。

    open archive

    打开由参数 archive 命名的档案并将其设为当前档案。

    replace member [, member]...

    将当前存档中的命名成员替换为参数 member 指定的文件。 文件必须存在于当前目录中,并且命名模块必须已经存在于当前存档中。

    save

    提交对当前存档的所有更改。

    verbose

    切换 directory 命令的详细程度。

    实例

    要创建一个包含三个文件 ex1.o, ex2.o 和 ex3.o 的新存档 ex.a ,请使用:

    ar -rc ex.a ex1.o ex2.o ex3.o

    要将存档符号表添加到现有存档 ex.a, 请使用:

    ar -s ex.a

    要从档案 ex.a 中删除文件 ex1.o , 请使用:

    ar -d ex.a ex1.o

    要详细列出档案 ex.a 的内容, 请使用:

    ar -tv ex.a

    要使用 MRI 图书管理员命令创建包含文件 ex1.o 和 ex2.o 的新存档 ex.a ,请使用以下脚本:

    create ex.a * specify the output archive addmod ex1.o ex2.o * add modules save * save pending changes end * exit the utility

    诊断

    The ar utility exits 0 on success, and >0 if an error occurs.

    参见

    ld(1), archive(3), elf(3), strftime(3), strmode(3), ar(5)

    标准合规

    ar 实用程序支持 -a, -b, -c, -i, -m, -p, -q, -r, -s, -t, -u, -v, -C 和 -T 选项符合 IEEE Std 1003.2 (“POSIX.2”) 。

    历史

    ar 命令首次出现在 AT&T UNIX 版本 1 中。在 FreeBSD 8.0 中, Kai Wang <[email protected]> 使用 Streaming Archive Library (libarchive, -larchive) 和 ELF Access Library (libelf, -lelf) 重新实现了 ar 和 ranlib 。

    June 16, 2016

    FreeBSD 13.1-RELEASE

    名称

    ee.1

    ee(1)

    ee(1)

    ee(1)

    名称

    ee - 简单的编辑器

    ee [-e] [-i] [-h] [+#] [file ...] ree [-e] [-i] [-h] [+#] [file ...]

    描述 ee 是一个简单的面向屏幕的文本编辑器。 它始终处于文本插入模式,除非终端底部有提示,或者存在菜单(在终端中间的框中)。 命令 ree 与 ee, 相同,但仅限于编辑命名文件(不允许文件操作或 shell 转义)。

    具有类似用户友好品质但功能更多的编辑器可用,称为 aee 。

    为了使 ee 正常工作,必须设置环境变量 TERM 来指示正在使用的终端类型。 例如,对于 HP 700/92 终端, TERM 变量应设置为 "70092" 。 如果您需要更多信息,请咨询您的系统管理员。

    命令行提供以下选项:

    -e

    关闭制表符到空格的扩展。

    -i

    关闭终端顶部信息窗口的显示。

    -h

    关闭窗口和菜单边框的突出显示(提高某些终端的性能)。

    +#

    启动时将光标移动到 '#' 行。-

    要执行插入文本以外的任何操作,用户必须使用控制键( Control 键,由 "^"表示,与字母键一起按下,例如,^a)和键盘上可用的功能键(例如 Next Page、 Prev Page、 箭头键等)。

    由于并非所有终端都具有功能键,因此 ee 具有分配给控制键的基本光标移动功能以及键盘上更直观的键(如果可用)。 例如,要向上移动光标,用户可以使用向上箭头键或 ^u 。

    ^a 提示输入要插入的字符的十进制值。 ^b 移动到文本底部。 ^c 获取命令提示符。 ^d 向下移动光标。 ^e 提示输入要搜索的字符串。 ^f 取消删除最后一个删除的字符。 ^g 移动到行首。 ^h 退格。 ^i 制表符。 ^j 插入换行符。 ^k 删除光标所在的字符。 ^l 向左移动光标。 ^m 插入换行符。 ^n 移至下一页。 ^o 移动到行尾。 ^p 移至上一页。 ^r 向右移动光标。 ^t 移动到文本的顶部。 ^u 向上移动光标。 ^v 取消删除最后一个删除的单词。 ^w 删除从光标位置开始的单词。 ^x 搜索。 ^y 从光标位置删除到行尾。 ^z 取消删除最后删除的行。 ^[ (ESC) 弹出菜单。

    由于许多 shell 提供 Emacs 模式(用于光标移动和其他编辑操作),因此提供了一些可能对熟悉这些绑定的人更有用的绑定。 这些可通过 settings 菜单或初始化文件(见下文)访问。 映射如下:

    ^a 移动到行首。 ^b 后退 1 个字符。 ^c 命令提示符。 ^d 删除光标所在的字符。 ^e 行尾。 ^f 向前 1 个字符。 ^g 返回上一页。 ^h 退格。 ^i 制表符。 ^j 取消删除最后删除的字符。 ^k 删除行。 ^l 取消删除最后删除的行。 ^m 插入换行符。 ^n 移动到下一行。 ^o 提示输入要插入的字符的十进制值。 ^p 上一行。 ^r 恢复最后删除的单词。 ^t 移动到文本的顶部。 ^u 移动到文本的底部。 ^v 移至下一页。 ^w 删除从光标位置开始的单词。 ^y 提示输入要搜索的字符串。 ^z 下一个词。 ^[ (ESC) 弹出菜单。

    Next Page

    移至下一页。

    Prev Page

    移至上一页。

    Delete Char

    删除光标所在的字符。

    Delete Line

    从光标处删除到行尾。

    Insert line

    在光标位置插入换行符。

    Arrow keys

    沿指示的方向移动光标。

    某些操作需要的信息多于单次击键所能提供的信息。 对于最基本的操作,有一个菜单可以通过按 ESC 键获得。 通过获取命令提示符 (^c) 并键入以下命令之一,可以执行相同的操作以及更多操作。

    !cmd

    在 shell 中执行 cmd 。

    0-9

    移动到指示的行。

    case

    使搜索区分大小写。

    character

    显示光标处字符的 ascii 值。

    exit

    保存编辑的文本,然后离开编辑器。

    expand

    将制表符扩展到空格。

    file

    打印文件名。

    help

    显示帮助屏幕。

    line

    显示当前行号。

    nocase

    使搜索不区分大小写(默认)。

    noexpand

    按下 TAB 键时不要将制表符展开为空格。

    quit

    离开编辑器而不保存更改。

    read file

    读取命名 file 。

    write file

    将文本写入指定 file 。

    可以通过按 escape 键(或 ^[ 如果没有 escape 键)来获得弹出菜单。 在菜单中时,可以使用退出键离开菜单而不进行任何操作。 使用向上和向下箭头键,或 ^u 向上移动和 ^d 向下移动以移动到菜单中的所需项目,然后按 return 键执行指示的任务。

    每个菜单项的左侧是一个字母,如果在键盘上按下相应的字母,则选择该菜单项。

    ee 中的主菜单如下:

    leave editor

    如果进行了更改,用户将获得一个菜单,提示是否应保存更改。

    help

    显示一个帮助屏幕,其中包含所有键盘操作和命令。

    file operations

    弹出一个菜单,用于选择是否读取文件、写入文件或保存编辑器的当前内容,以及将编辑器的内容发送到打印命令(参见 从文件初始化 ee 部分)。

    redraw screen

    如果屏幕已损坏,则提供一种重新绘制屏幕的方法。

    settings

    显示操作模式的当前值和右边距。 当光标在特定项目上时按回车键,可以更改值。 要离开此菜单,请按 escape 键。 (请参阅下面的 Modes 。)

    search

    弹出一个菜单,用户可以在其中选择输入要搜索的字符串,或者搜索已经输入的字符串。

    miscellaneous

    弹出一个菜单,允许用户设置当前段落的格式、执行 shell 命令或检查编辑器中文本的拼写。

    段落由以下文本块为 ee 定义:

    • 文件开始或结束。

    • 没有字符或只有空格和/或制表符的行。

    • 以句点 ('.') 或右尖括号 ('>') 开头的行。

    可以通过两种方式格式化段落:通过选择 format paragraph 菜单项,或通过设置 ee 来自动格式化段落。 自动模式可以通过菜单设置,也可以通过初始化文件设置。

    ee 中的文本操作分为三种状态:自由格式、边距、自动格式化。

    "Free-form" 最适合用于编程之类的事情。 对行的长度没有限制,也不会进行格式化。

    "Margins" 允许用户输入文本而不必担心超出右边距(右边距可以在 settings 菜单中设置,默认为终端的右边距)。 这是允许 format paragraph 菜单项工作的模式。

    "Automatic formatting" 提供类似文字处理器的行为。 用户可以输入文本,而 ee 将确保每次用户在输入或删除文本后插入空格时,整个段落都适合终端的宽度。 为了进行自动格式化,还必须启用边距观察。

    是一个“无模式”编辑器(它一直处于文本插入模式),但它所做的一些事情还是有模式的。 这些包括:

    tab expansion

    制表符可以作为单个制表符插入,也可以替换为空格。

    case sensitivity

    搜索操作可以对字符是大写还是小写敏感,或者完全忽略大小写。

    margins observed

    线条可以在右边距被截断,也可以永远延伸。

    auto paragraph formatting

    在输入文本时,编辑器可以尝试使其在屏幕宽度内看起来相当不错。

    eightbit characters

    切换八位字符是显示为尖括号中的值(例如 "<220>")还是字符。

    info window

    可以显示或不显示显示可以执行的键盘操作的窗口。

    emacs keys

    控制键可以被赋予类似于 emacs 的绑定,也可以不被赋予。

    16 bit characters

    切换 16 位字符是作为一个 16 位数量还是两个 8 位数量处理。 这主要适用于中国大 5 代码集。

    您可以通过初始化文件(见下文)或菜单(见上文)设置这些模式。

    有两种方法可以从 ee 检查文本中的拼写。 一种是使用传统的 spell(1) 命令,另一种是使用可选的 ispell(1) 命令。

    一种是使用传统的 spell 命令,另一种是使用可选的 ispell 命令。 使用拼写,无法识别的单词将被放置在文件的顶部。 对于 ispell 选项,文件被写入磁盘,然后在文件上运行 ispell ,一旦 ispell 完成对文件的更改,文件就会读回。

    用户可以选择打印编辑器内容的菜单项。 ee 通过管道将编辑器中的文本传递给初始化命令 printcommand 指定的命令(请参阅下面的 从文件初始化 ee 部分)。默认是将内容发送到 "lp"。

    用户分配给 printcommand 的任何内容都必须从标准输入中获取输入。 有关详细信息,请咨询您的系统管理员。

    可以通过在 miscellaneous 菜单中选择 shell command 项,或通过在 command: 提示符下在要执行的命令前放置感叹号("!")从 ee 中执行 shell 命令。 此外,用户可以使用左尖括号 (">") 将编辑缓冲区的内容引导到 shell 操作(通过管道),然后使用 "!" 以及要执行的 shell 命令。 shell 操作的输出也可以通过在感叹号前使用右尖括号 ("<") 定向到编辑缓冲区。 这些甚至可以一起用于将输出发送到 shell 操作并将结果读回编辑器。 因此,如果编辑器包含要排序的单词列表,则可以通过在命令提示符下键入以下内容来对它们进行排序:

    ><!sort

    这会将编辑器的内容通过管道发送到 sort 实用程序,结果将被放置到当前光标位置的编辑缓冲区中。 用户必须删除旧信息。

    由于不同的用户有不同的偏好, ee 允许一些轻微的可配置性。 ee 的初始化文件有三个可能的位置:文件 /usr/share/misc/init.ee 、用户主目录中的文件 .init.ee 或当前目录中的文件 .init.ee 如果不同于主目录)。 这允许系统管理员在系统范围内为用户设置一些首选项(例如, print 命令),并且用户可以自定义特定目录的设置(例如用于通信的目录和用于编程的不同目录)。

    首先读取文件 usr/share/misc/init.ee ,然后是 $HOME/.init.ee ,然后是 .init.ee ,其中最近读取的文件指定的设置优先。

    在初始化文件中可以输入以下项目:

    case

    将搜索设置为区分大小写。

    nocase

    将搜索设置为不区分大小写(默认)。

    expand

    使 ee 将制表符扩展到空格(默认)。

    noexpand

    使 ee 将制表符作为单个字符插入。

    info

    终端顶部会显示一个小信息窗口(默认)。

    noinfo

    关闭信息窗口的显示。

    margins

    当光标超出用户在插入文本时设置的右边距时,使 ee 截断右边距处的行(默认)。

    nomargins

    允许线条超出右边距。

    autoformat

    导致 ee 在文本插入时自动尝试格式化当前段落。

    noautoformat

    关闭自动段落格式(默认)。

    printcommand

    允许设置打印命令(默认值: "lp")。

    rightmargin

    用户可以为右边距选择一个值(屏幕上的第一列为零)。

    highlight

    打开突出显示信息窗口和菜单的边框(默认)。

    nohighlight

    关闭信息窗口和菜单边框的突出显示。

    eightbit

    打开八位字符的显示。

    noeightbit

    关闭八位字符的显示(它们在尖括号内显示为十进制值,例如 "<220>")。

    16bit

    打开对 16 位字符的处理。

    no16bit

    关闭对 16 位字符的处理。

    emacs

    打开 emacs 键绑定。

    noemacs

    关闭 emacs 键绑定。

    在 settings 菜单中使用此条目时,用户可以选择将编辑器的当前配置(请参阅上面的 从文件初始化 ee )保存到当前目录或用户主目录中名为 .init.ee 的文件中。 如果名为 .init.ee 的文件已经存在,它将被重命名为 .init.ee.old 。

    本材料按“原样”提供。 对本材料不提供任何形式的保证,包括但不限于对适销性和特定用途适用性的默示保证。 Hewlett-Packard 和 Hugh Mahon 均不对此处包含的错误负责,也不对与提供、执行或使用本材料有关的附带或间接损害负责。 Hewlett-Packard 和 Hugh Mahon 均不对本软件或文档的使用或可靠性承担任何责任。 该软件和文档完全不受支持。 没有可用的支持合同。 Hewlett-Packard 未对任何程序或文档进行任何质量保证。 您可能会发现材料的质量不如支持的材料

    始终在编辑之前制作不易复制的文件副本。 尽早保存文件,并经常保存。

    ee 支持单字节字符代码集(八位干净),或中文 Big-5 代码集。 (其他多字节代码集也可能起作用,但 Big-5 起作用的原因是一个两字节字符在屏幕上也占据了两列。)

    对于较慢的系统,自动段落格式化操作可能太慢。

    /usr/share/misc/init.ee- $HOME/.init.ee- .init.ee

    ee 软件由 Hugh Mahon 开发。

    本软件和文档包含受版权保护的专有信息。 保留所有权利。

    版权所有 (c) 1990, 1991, 1992, 1993, 1995, 1996, 2001 Hugh Mahon.

    termcap(4), terminfo(4), environ(5), spell(1), ispell(1), lp(1), aee(1)

    dd.1

    DD(1)

    DD(1)

    FreeBSD General Commands Manual

    DD(1)

    名称

    dd —

    convert and copy a file

    dd [operands ...]

    dd 实用程序将标准输入复制到标准输出。 输入数据以 512 字节块的形式读取和写入。 如果输入读取很短,则来自多个读取的输入被聚合以形成输出块。 完成后, dd 将完整和部分输入和输出块的数量以及截断的输入记录显示到标准错误输出。

    可以使用以下操作数:

    =n

    将输入和输出块大小都设置为 n 字节,取代 ibs 和 obs 操作数。 如果没有指定除 noerror 、 notrunc 或 sync 以外的转换值,则每个输入块将作为单个块复制到输出,而不会聚合任何短块。

    =n

    将转换记录大小设置为 n 字节。 面向记录的转换值需要转换记录大小。

    =n

    仅复制 n 个输入块。

    =n

    在终止之前复制 n 个输入文件。 此操作数仅适用于输入设备是磁带时。

    =c

    在转换模式下或由于使用 noerror 和 sync 模式填充块时,使用指定的 ASCII 字符填充,而不是使用空格或 NUL 。

    =n

    将输入块大小设置为 n 字节,而不是默认的 512。

    =file

    从 file 而不是标准输入中读取输入。

    =value[,value ...]

    其中 value 是以下列表中的符号之一。

    从输入文件中读取可能无法获得完整的块。 当读取返回短时,继续读取以填充块。 如果没有此标志, count 会限制在输入上调用 read(2) 的次数,而不是完全复制的块数。 不能与 conv=sync 结合使用。

    在输入文件上设置 O_DIRECT 标志以使读取绕过任何本地缓存。

    =n

    在输入文件 n 块上查找。 这与 skip=n 同义。

    =n

    将输出块大小设置为 n 字节,而不是默认的 512。

    =file

    将输出写入 file 而不是标准输出。 除非指定了 notrunc 转换值,否则任何常规输出文件都会被截断。 如果查找输出文件的初始部分(参见 oseek 操作数),则输出文件在该点被截断。

    =value[,value ...]

    其中 value 是以下列表中的符号之一。

    在输出文件上设置 O_FSYNC 标志以使写入同步。

    在输出文件上设置 O_SYNC 标志以使写入同步。 这与 fsync 值同义。

    在输出文件上设置 O_DIRECT 标志以使写入绕过任何本地缓存。

    =n

    在输出文件上查找 n 个块。 这与 seek=n 同义。

    =n

    在复制之前从输出的开头寻找 n 个块。 在非磁带设备上,使用 lseek(2) 操作。 否则,将读取现有块并丢弃数据。 如果用户没有磁带的读取权限,则使用磁带 ioctl(2) 函数调用对其进行定位。 如果查找操作超过文件末尾,则从当前文件末尾到指定偏移量的空间被 NUL 字节块填充。

    =n

    在复制之前从输入的开头跳过 n 个块。 在支持搜索的输入上,使用 lseek(2) 操作。 否则,读取并丢弃输入数据。 对于管道,读取正确的字节数。 对于所有其他设备,读取正确数量的块,而不区分正在读取的部分或完整块。

    =n

    将复制速度限制为每秒 n 字节。

    =value

    其中 value 是以下列表中的符号之一。

    不要将传输统计信息打印为状态输出的最后一行。

    不要打印状态输出。 显示错误消息;信息性消息不是。

    每秒打印一次基本传输统计信息。

    =value[,value ...]

    其中 value 是以下列表中的符号之一。

    , oldascii

    与 unblock 值相同,只是在转换记录之前将字符从 EBCDIC 转换为 ASCII 。 (如果还指定了操作数 cbs ,则这些值意味着 unblock 。) ASCII 有两个转换映射。 ascii 值指定了与 AT&T System V UNIX 兼容的推荐值。 oldascii 值指定用于历史 AT&T UNIX 和 pre-4.3BSD-Reno 系统的值。

    将输入视为与输入和输出块边界无关的换行符或文件结尾终止的可变长度记录的序列。 任何尾随换行符都将被丢弃。每个输入记录都转换为固定长度的输出记录,其中长度由 cbs 操作数指定。 短于转换记录大小的输入记录用空格填充。 长于转换记录大小的输入记录将被截断。 被截断的输入记录的数量(如果有)在复制完成时报告给标准错误输出。

    , ibm, oldebcdic, oldibm

    与 block 值相同,只是在转换记录后将字符从 ASCII 转换为 EBCDIC 。 (如果还指定了操作数 cbs ,则这些值意味着 block 。) EBCDIC 有四个转换映射。 值 ebcdic 指定与 AT&T System V UNIX 兼容的推荐值。 值 ibm 是一个稍微不同的映射,它与 AT&T System V UNIX ibm 值兼容。 oldebcdic 和 oldibm 值是用于历史 AT&T UNIX 和 pre-4.3BSD-Reno 系统的映射。

    在关闭输出文件之前对其执行 fdatasync(2) 。

    在关闭输出文件之前对其执行 fsync(2) 。

    将大写字符转换为小写字符。

    , parnone, parodd, parset

    输出具有指定奇偶校验的数据。 除非还指定了 EBCDIC 到 ASCII 的转换,否则输入上的奇偶校验位将被去除。

    不要停止处理输入错误。 当发生输入错误时,将按照与标准完成消息相同的格式将诊断消息和当前输入和输出块计数写入标准错误输出。 如果还指定了 sync 转换,则任何丢失的输入数据都将替换为 NUL 字节(如果指定了面向块的转换值,则替换为空格)并作为普通输入缓冲区处理。 如果指定了 fillchar 选项,命令行中提供的填充字符将覆盖填充字符的自动选择。 如果未指定 sync 转换,则从输出中省略输入块。 在不是磁带或管道的输入文件上,文件偏移量将使用 lseek(2) 定位到发生错误的块之后。

    不要截断输出文件。 这将保留输出文件中未由 dd 显式写入的任何块。 磁带不支持 notrunc 值。

    将最终输出块填充到完整的输出块大小。 如果转换后输入文件不是输出块大小的倍数,则此转换会强制最终输出块与前面的块大小相同,以便在需要写入常规大小块的设备上使用。 此选项与 bs=n 块大小规范的使用不兼容。

    如果一个或多个输出块仅包含 NUL 字节,请尝试按所需空间查找输出文件,而不是用 NUL- 填充它们,从而产生稀疏文件。

    交换每对输入字节。 如果输入缓冲区的字节数为奇数,则在交换期间将忽略最后一个字节。

    将每个输入块填充到输入缓冲区大小。 如果指定了面向块的转换值,则空格用于填充字节,否则使用 NUL 字节。

    将小写字符转换为大写字符。

    将输入视为与输入和输出块边界无关的固定长度记录序列。 输入记录的长度由 cbs 操作数指定。 任何尾随空格字符都将被丢弃,并附加一个换行符。

    如果指定了大小或速度,则需要十进制、八进制或十六进制字节数。 如果数字以 “b”, “k”, “m”, “g”, “t”, “p” 或 “w” 结尾,则该数字乘以 512, 1024 (1K), 1048576 (1M), 1073741824 (1G), 1099511627776 (1T), 1125899906842624 (1P) 或整数中的字节数。 两个或多个数字可以用 “x” 分隔以表示产品。

    完成后, dd 将完整和部分输入和输出块的数量、截断的输入记录和奇数长度的字节交换块显示到标准错误输出。 部分输入块是读取的小于输入块大小的块。 部分输出块是写入小于输出块大小的块。 到磁带设备的部分输出块被认为是致命错误。 否则,将写入块的其余部分。 字符设备的部分输出块将产生警告消息。 截断输入块是指指定了面向可变长度记录的转换值并且输入行太长而无法放入转换记录或没有换行符终止的输入块。

    通常,来自输入或转换或两者的数据被聚合到指定大小的输出块中。 在达到输入结束后,任何剩余的输出都被写入一个块。 这意味着最终的输出块可能比输出块的大小要短。

    如果 dd 接收到 SIGINFO (请参阅 stty(1) 的 status 参数)信号,则当前输入和输出块计数将以与标准完成消息相同的格式写入标准错误输出。 如果 dd 收到 SIGINT 信号,当前输入和输出块计数将以与标准完成消息相同的格式写入标准错误输出,并且 dd 将退出。

    The dd utility exits 0 on success, and >0 if an error occurs.

    检查磁盘驱动器是否包含坏块:

    dd if=/dev/ada0 of=/dev/null bs=1m

    刷新磁盘驱动器,以防止当前可恢复的读取错误发展为不可恢复的读取错误:

    dd if=/dev/ada0 of=/dev/ada0 bs=1m

    从文件中删除奇偶校验位:

    dd if=file conv=parnone of=file.txt

    检查文件上的(偶数)奇偶校验错误:

    dd if=file conv=pareven | cmp -x - file

    要创建 Mode-1 CD-ROM(数据 CD-ROM 磁盘的常用格式)的映像,请使用 2048 字节的块大小:

    dd if=/dev/cd0 of=filename.iso bs=2048

    将文件系统映像写入记忆棒,必要时用零填充末尾到 1MiB 边界:

    dd if=memstick.img of=/dev/da0 bs=1m conv=noerror,sync

    cp(1), mt(1), recoverdisk(1), tr(1), geom(4), trim(8)

    dd 实用程序有望成为 IEEE Std 1003.2 (“POSIX.2”) 标准的超集。 files 和 status 操作数以及 ascii, ebcdic, ibm, oldascii, oldebcdic 和 oldibm 值是对 POSIX 标准的扩展。

    dd 命令出现在 Version 5 AT&T UNIX 中。

    geom(4) 子系统中的保护机制可能会阻止超级用户将块写入磁盘。 可以在 geom(4) 手册页中找到临时禁用这些保护机制的说明。

    June 4, 2020

    FreeBSD 13.1-RELEASE

    egrep.1

    GREP(1)

    GREP(1)

    FreeBSD General Commands Manual

    GREP(1)

    grep, egrep,

    概要
    描述
    选项
    控制键
    EMACS 键模式
    功能键
    命令
    菜单操作
    段落格式
    模式
    拼写检查
    打印编辑器的内容
    Shell 操作
    从文件初始化 ee
    保存编辑器配置
    注意事项
    国际代码集支持
    警告
    文件
    作者
    参见
    概要
    描述
    bs
    cbs
    count
    files
    fillchar
    ibs
    if
    iflag
    fullblock
    direct
    iseek
    obs
    of
    oflag
    fsync
    sync
    direct
    oseek
    seek
    skip
    speed
    status
    noxfer
    none
    progress
    conv
    ascii
    block
    ebcdic
    fdatasync
    fsync
    lcase
    pareven
    noerror
    notrunc
    osync
    sparse
    swab
    sync
    ucase
    unblock
    退出状态
    实例
    参见
    标准
    历史
    缺陷
    fgrep
    ,
    rgrep
    —

    文件模式搜索器

    概要

    grep [-abcdDEFGHhIiLlmnOopqRSsUVvwxz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [-``-binary-files=value] [-``-color[=when]] [-``-colour[=when]] [-``-context[=num]] [-``-label] [- -line-buffered] [-``-null] [pattern] [file ...]

    描述

    grep 实用程序搜索任何给定的输入文件,选择匹配一个或多个模式的行。 默认情况下,如果模式中的正则表达式 (RE) 匹配输入行而没有尾随换行符,则该模式匹配输入行。 空表达式匹配每一行。 与至少一种模式匹配的每个输入行都被写入标准输出。

    grep 用于简单模式和基本正则表达式 (BREs); egrep 可以处理扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即,它不解释正则表达式)。 模式可以由一行或多行组成,允许任何模式行匹配输入的一部分。

    可以使用以下选项:

    -A num, -``-after-context=num

    每次匹配后打印 num 行尾随上下文。 另请参见 -B 和 -C 选项。

    -a, -``-text

    将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 grep 将简单地打印 “Binary file ... matches” 。 使用此选项会强制 grep 输出与指定模式匹配的行。

    -B num, -``-before-context=num

    在每次匹配之前打印前导上下文的 num 行。 另请参见 -A 和 -C 选项。

    -b, -``-byte-offset

    匹配模式的字节偏移量显示在相应匹配行的前面。

    -C[num], -``-context[=num]

    打印围绕每个匹配项的前导和尾随上下文的 num 行。 num 的默认值为 “2” ,相当于 “-A 2 -B 2” 。 注意:选项和它的参数之间不能有空格。

    -c, -``-count

    只有选定的行数被写入标准输出。

    -``-colour=[when], -``-color=[when]

    使用 GREP_COLOR 环境变量中存储的表达式标记匹配文本。 when 的可能值是 “never”, “always” 和 “auto” 。

    -D action, -``-devices=action

    为设备、FIFO 和套接字指定所需的 action 。 默认 action 是 “read” ,这意味着它们像普通文件一样被读取。 如果 action 设置为 “skip” ,设备将被静默跳过。

    -d action, -``-directories=action

    指定目录所需的 action 。 默认为 “read” ,这意味着目录的读取方式与普通文件相同。 其他可能的值是 “skip” 以静默忽略目录, “recurse” 以递归方式读取它们,这与 -R 和 -r 选项的效果相同。

    -E, -``-extended-regexp

    将 pattern 为扩展的正则表达式(即,强制 grep 表现为 egrep )。

    -e pattern, -``-regexp=pattern

    指定在搜索输入期间使用的 pattern :如果输入行匹配任何指定的模式,则选择该输入行。 当使用多个 -e 选项指定多个模式时,或者当一个 pattern 以破折号 (‘-’) 开头时,此选项最有用。

    -``-exclude pattern

    如果指定,它将从搜索中排除与给定文件名 pattern 匹配的文件。 请注意, -``-exclude 和 -``-include 模式是按给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include 模式,则搜索所有未排除的文件。 模式与指定的完整路径匹配,而不仅仅是文件名组件。

    -``-exclude-dir pattern

    如果指定了 -R ,它将从搜索中排除与给定文件名 pattern 匹配的目录。 请注意, -``-exclude-dir 和 -``-include-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include-dir 模式,则搜索所有未排除的目录。

    -F, -``-fixed-strings

    将 pattern 解释为一组固定字符串(即强制 grep 表现为 fgrep )。

    -f file, -``-file=file

    从 file 中读取一个或多个换行符分隔的模式。空模式行匹配每个输入行。 换行符不被视为模式的一部分。 如果 file 为空,则不匹配。

    -G, -``-basic-regexp

    将 pattern 解释为基本的正则表达式(即强制 grep 表现得像传统的 grep )。

    -H

    始终使用输出行打印文件名标题。

    -h, -``-no-filename

    切勿使用输出行打印文件名标题 (即 filenames) 。

    -``-help

    打印简短的帮助信息。

    -I

    忽略二进制文件。 此选项等效于 “-``-binary-file=``without-match” 选项。

    -i, -``-ignore-case

    执行不区分大小写的匹配。 默认情况下, grep 区分大小写。

    -``-include pattern

    如果指定,则仅搜索与给定文件名 pattern 匹配的文件。 请注意, -``-include 和 -``-exclude 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 模式与指定的完整路径匹配,而不仅仅是文件名组件。

    -``-include-dir pattern

    如果指定了 -R ,则仅搜索与给定文件名 pattern 匹配的目录。 请注意, -``-include-dir 和 -``-exclude-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。

    -L, -``-files-without-match

    只有不包含所选行的文件名才会写入标准输出。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。

    -l, -``-files-with-matches

    只有包含选定行的文件名被写入标准输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。

    -``-label

    用于代替 “(standard input)” 的标签,用于通常打印文件名的文件名。 此选项适用于 -H, -L 和 -l 。

    -``-mmap

    使用 mmap(2) 而不是 read(2) 来读取输入,这在某些情况下可能会带来更好的性能,但可能会导致未定义的行为。

    -m num, -``-max-count=num

    在 num 匹配后停止读取文件。

    -n, -``-line-number

    每个输出行前面都有其在文件中的相对行号,从第 1 行开始。 为每个处理的文件重置行号计数器。 如果指定了 -c, -L, -l 或 -q ,则忽略此选项。

    -``-null

    在文件名之后打印一个零字节。

    -O

    如果指定了 -R ,则仅当符号链接在命令行上明确列出时才跟随它们。 默认不遵循符号链接。

    -o, -``-only-matching

    仅打印行的匹配部分。

    -p

    如果指定了 -R ,则不遵循任何符号链接。 这是默认设置。

    -q, -``-quiet, - -silent

    安静模式:抑制正常输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。

    -R, -r, -``-recursive

    递归搜索列出的子目录。 (即,强制 grep 表现为 rgrep )。

    -S

    如果指定了 -R ,则遵循所有符号链接。 默认不遵循符号链接。

    -s, -``-no-messages

    静音模式。 不存在和不可读的文件被忽略(即,它们的错误消息被抑制)。

    -U, -``-binary

    搜索二进制文件,但不要尝试打印它们。

    -u

    此选项无效,仅用于与 GNU grep 兼容。

    -V, -``-version

    显示版本信息并退出。

    -v, -``-invert-match

    选定的行是那些 不 匹配任何指定模式的行。

    -w, -``-word-regexp

    表达式作为一个词被搜索(好像被 ‘[[:<:]]’ 和 ‘[[:>:]]’ 包围;参见 re_format(7) )。

    -x, -``-line-regexp

    只有针对整个固定字符串或正则表达式选择的输入行才被视为匹配行。

    -y

    相当于 -i 。已过时。

    -z, -``-null-data

    将输入和输出数据视为以零字节而不是换行符结尾的行序列。

    -``-binary-files=value

    控制二进制文件的搜索和打印。选项是:

    binary (default)

    搜索二进制文件但不打印它们。

    without-match

    不要搜索二进制文件。

    text

    将所有文件视为文本。

    -``-line-buffered

    强制输出为行缓冲。 默认情况下,当标准输出是终端时输出是行缓冲的,否则是块缓冲的。

    如果没有指定文件参数,则使用标准输入。 此外, “-” 可以用来代替文件名,在任何接受文件名的地方,以从标准输入中读取。 这包括 -f 和文件参数。

    退出状态

    grep 实用程序以下列值之一退出:

    0

    选择了一条或多条线。

    1

    未选择任何行。

    >1

    发生错误。

    实例

    • 查找文件中所有出现的模式 ‘patricia’ :

      $ grep 'patricia' myfile

    • 与上面相同,但只查找完整的单词:

      $ grep -w 'patricia' myfile

    • 计算确切模式 ‘FOO’ 的出现次数:

      $ grep -c FOO myfile

    • 与上面相同,但忽略大小写:

      $ grep -c -i FOO myfile

    • 在行首查找所有出现的模式 ‘.Pp’ :

      $ grep '^\.Pp' myfile

      撇号确保整个表达式由 grep 而不是用户的 shell 评估。 插入符号 ‘^’ 匹配行首的空字符串,而 ‘\’ 转义 ‘.’, 否则将匹配任何字符。

    • 查找文件中不包含单词 ‘foo’ 或 ‘bar’ 的所有行:

      $ grep -v -e 'foo' -e 'bar' myfile

    • 使用扩展正则表达式仔细阅读文件 ‘calendar’ 以查找 19、20 或 25:

      $ egrep '19|20|25' calendar

    • 显示匹配行和包含模式 ‘FIXME’ 的 ‘*.h’ 文件的名称。 从 /usr/src/sys/arm 目录递归搜索

      $ grep -H -R FIXME --include=*.h /usr/src/sys/arm/

    • 与上面相同,但仅显示匹配文件的名称:

      $ grep -l -R FIXME --include=*.h /usr/src/sys/arm/

    • 显示包含文本 ‘foo’ 的行。 输出的匹配部分是彩色的,每一行都以行号和匹配行的文件中的偏移量作为前缀。

      $ grep -b --colour -n foo myfile

    • 显示与从标准输入读取的扩展正则表达式模式匹配的行:

      $ echo -e 'Free\nBSD\nAll.*reserved' | grep -E -f - myfile

    • 显示 pciconf(8) 命令输出中与指定扩展正则表达式匹配的行以及三行前导上下文和一行尾随上下文:

      $ pciconf -lv | grep -B3 -A1 -E 'class.*=.*storage'

    • 抑制任何输出并使用退出状态显示适当的消息:

      $ grep -q foo myfile && echo File matches

    参见

    ed(1), ex(1), sed(1), zgrep(1), re_format(7)

    标准

    grep 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。

    标志 [-AaBbCDdGHhILmoPRSUVw] 是该规范的扩展,当与空模式文件一起使用时 -f 标志的行为未定义。

    提供所有长选项是为了与该实用程序的 GNU 版本兼容。

    grep 实用程序的历史版本也支持标志 [-ruy] 。此实现支持这些选项;但是,强烈建议不要使用它们。

    历史

    grep 命令首次出现在 Version 6 AT&T UNIX 中。

    November 19, 2020

    FreeBSD 13.1-RELEASE

    名称

    diff.1

    DIFF(1)

    DIFF(1)

    FreeBSD General Commands Manual

    DIFF(1)

    名称

    diff —

    差异文件和目录比较器

    diff [-aBbdipTtw] [-c | -e | -f | -n | -q | -u | -y] [--brief] [--changed-group-format GFMT] [--ed] [--expand-tabs] [--forward-ed

    diff 实用程序比较 file1 和 file2 的内容,并将将一个文件转换为另一个文件所需的更改列表写入标准输出。 如果文件相同,则不会产生输出。

    输出选项(互斥):

    number --context number

    与 -c 类似,但会产生带有上下文 number 行的差异。

    产生具有 3 行上下文的差异。 使用 -c 会稍微修改输出格式:输出以识别所涉及的文件及其创建日期开始,然后每个更改由带有 15 个 * 的行分隔。 从 file1 中删除的行标有 ‘- ’; 添加到 file2 的那些标记为 ‘+ ’ 。 从一个文件更改到另一个文件的行在两个文件中都标有 ‘! ’ 。 彼此相距 3 行以内的更改在输出时被组合在一起。

    string --ifdef string

    在标准输出上创建 file1 和 file2 的合并版本,其中包含 C 预处理器控件,以便在不定义 string 的情况下编译结果等同于编译 file1, 而定义 string 将产生 file2 。

    --ed

    以适合作为编辑器实用程序 ed(1) 输入的形式生成输出,然后可以使用该格式将 file1 转换为 file2。

    使用 -e 比较目录时,会在输出中添加额外的命令,因此结果是一个 sh(1) 脚本,用于将两个目录共有的文本文件从它们在 dir1 中的状态转换为它们在 dir2 中的状态。

    --forward-ed

    与 -e 标志的输出相同,但顺序相反。 它不能被 ed(1) 消化。

    生成一个类似于 -e 的脚本,但顺序相反,并且在每个插入或删除命令上都有更改的行数。 这是 rcsdiff 使用的形式。

    --brief

    当文件不同时,只需打印一行。 不输出更改列表。

    number --unified number

    与 -u 类似,但会产生带有上下文 number 行的差异。

    生成具有 3 行上下文的 unified 差异。 统一差异类似于 -c 选项产生的上下文差异。 然而,与 -c 不同的是,所有要更改(添加和/或删除)的行都存在于单个部分中。

    --side-by-side

    在两列中输出,它们之间有一个标记。 标记可以是以下之一:

    space

    对应的行是相同的。

    '|'

    对应的线路不同。

    '<'

    文件不同,只有第一个文件包含该行。

    '>'

    文件不同,只有第二个文件包含该行。

    比较选项:

    --text

    将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 diff 将简单地打印 “Binary files ... differ” 。 使用此选项会强制 diff 产生差异。

    --ignore-blank-lines

    导致只包含空行的块被忽略

    --ignore-space-change

    导致尾随空格(空格和制表符)被忽略,其他空格字符串比较相等。

    --minimal

    非常努力地产生尽可能小的差异。 在处理具有许多更改的大型文件时,这可能会消耗大量的处理能力和内存。

    pattern --ignore-matching-lines pattern

    忽略行与扩展正则表达式 pattern 匹配的更改、插入和删除。 可以指定多个 -I 模式。 更改中的所有行都必须匹配某些模式才能忽略更改。 有关正则表达式模式的更多信息,请参阅 re_format(7) 。

    --ignore-case

    忽略字母的大小写。 例如, “A” 将等于 “a” 。

    --paginate

    通过 pr(1) 传递输出以对其进行分页。

    label --label label

    打印 label 而不是上下文或统一差异标头中的第一个(和第二个,如果此选项被指定两次)文件名和时间。

    --show-c-function

    使用统一和上下文差异,每次更改时显示上下文前最后一行的前 40 个字符,以字母、下划线或美元符号开头。 对于遵循标准布局约定的 C 源代码,这将显示更改适用的函数的原型。

    --initial-tab

    对于正常、上下文或统一的输出格式,在该行的其余部分之前打印一个制表符而不是一个空格。 这使得行中的制表符对齐一致。

    --expand-tabs

    将展开输出行中的选项卡。 正常或 -c 输出将字符添加到每行的前面,这可能会破坏原始源代码行的缩进并使输出列表难以解释。 此选项将保留原始源的缩进。

    --ignore-all-blanks

    类似于 -b --ignore-space-change 但会导致空格(空格和制表符)被完全忽略。 例如, “if ( a == b )” 将比较等于 “if(a==b)” 。

    number --width number

    使用并排格式时最多输出 number 列。 默认值为 130。

    GFMT

    在提供的格式输入组

    格式是带有特殊关键字的字符串:

    %<

    FILE1 中的行

    %<

    来自 FILE2 的行

    比较文件名时忽略大小写

    不要忽略大小写比较文件名(默认)

    默认差异输出

    与 GNU diff 兼容的存根选项

    删除输入文件上的回车

    使用并排格式时不输出公共行

    number

    代表制表符的空格数(默认 8)

    目录比较选项:

    --new-file

    如果一个文件只在一个目录中找到,就好像它也在另一个目录中找到但大小为零一样。

    --unidirectional-new-file

    如果一个文件只在 dir2 中找到,就好像它也在 dir1 中找到但大小为零一样。

    --recursive

    导致将 diff 递归应用到遇到的公共子目录。

    name --starting-file name

    在中间重新启动一个目录 diff ,以文件 name 开头。

    --report-identical-files

    导致 diff 报告相同的文件,否则未提及。

    file --exclude-from file

    从比较中排除其基本名称与 file 中的行匹配的文件和子目录。 可以指定多个 -X 选项。

    pattern --exclude pattern

    从比较中排除基本名称与 pattern 匹配的文件和子目录。 通过 fnmatch(3) 使用 shell 样式的通配符匹配模式。 可以指定多个 -x 选项。

    如果两个参数都是目录,则 diff 按名称对目录的内容进行排序,然后对不同的文本文件运行常规文件 diff 算法,生成更改列表。 不同的二进制文件、公共子目录和只出现在一个目录中的文件都被这样描述。 在目录模式下,仅比较常规文件和目录。 如果遇到非常规文件,例如设备特殊文件或 FIFO,则会打印诊断消息。

    如果 file1 和 file2 中只有一个是目录,则 diff 应用于非目录文件以及目录文件中包含的文件名与非目录文件的最后一个组件相同的文件。

    如果 file1 或 file2 是 ‘-’, 则使用标准输入代替它。

    默认(不带 -e -、 -c 或 -n --rcs 选项)输出包含这些形式的行,其中 XX, YY, ZZ, QQ 分别是文件顺序的行号。

    a``YY

    在 file1 的第 XX 行(末尾)处,附加 file2 的第 YY 行的内容以使它们相等。

    a``YY,ZZ

    同上,但将 file2 的 YY 到 ZZ 的行范围附加到文件 1 的 XX 行。

    d``YY

    在第 XX 行删除该行。 值 YY 告诉哪一行更改将使 file1 与 file2 保持一致。

    d``ZZ

    删除 file1 中的 XX 到 YY 行范围。

    c``YY

    将 file1 中的 XX 行更改为 file2 中的 YY 行。

    c``ZZ

    用 ZZ 行替换指定行的范围。

    c``ZZ,QQ

    将 file1 中的 XX,YY 范围替换为 file2 中的 ZZ,QQ 范围。

    这些行类似于将 file1 转换为 file2 的 ed(1) 子命令。 动作字母前的行号与 file1 相关;后面的属于 file2 。 因此,通过将 a 替换为 d 并以相反的顺序读取该行,还可以确定如何将 file2 转换为 file1 。 与 ed(1) 中一样,相同的对(其中 num1 = num2)被缩写为单个数字。

    /tmp/diff.XXXXXXXX

    比较设备或标准输入时使用的临时文件。 请注意,临时文件在创建后立即取消链接,因此它不会显示在目录列表中。

    diff 实用程序以下列值之一退出:

    0

    没有发现差异。

    1

    发现了差异。

    >1

    发生错误。

    比较 old_dir 和 new_dir 递归生成统一差异并将仅在这些目录之一中找到的文件视为新文件:

    $ diff -ruN /path/to/old_dir /path/to/new_dir

    同上,但不包括匹配表达式 “*.h” 和 “*.c” 的文件:

    $ diff -ruN -x '*.h' -x '*.c' /path/to/old_dir /path/to/new_dir

    显示单行指示文件是否不同:

    $ diff -q /boot/loader.conf /boot/defaults/loader.conf 文件 /boot/loader.conf 和 /boot/defaults/loader.conf 不同

    假设一个名为 example.txt 的文件具有以下内容:

    FreeBSD 是一个操作系统 Linux是一个内核 OpenBSD 是一个操作系统

    将 stdin 与 example.txt 进行比较,从比较中排除包含 “Linux” 或 “Open” 的行:

    $ echo "FreeBSD is an operating system" | diff -q -I 'Linux|Open' example.txt -

    cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1) James W. Hunt and M. Douglas McIlroy, An Algorithm for Differential File Comparison, Computing Science Technical Report, Bell Laboratories 41, June 1976.

    diff 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。

    标志 [-aDdIiLlNnPpqSsTtwXxy] 是对该规范的扩展。

    diff 命令出现在 Version 6 AT&T UNIX 中。

    June 19, 2020

    FreeBSD 13.1-RELEASE

    fgrep.1

    GREP(1)

    GREP(1)

    FreeBSD General Commands Manual

    GREP(1)

    名称

    grep, egrep, fgrep, rgrep —

    文件模式搜索器

    grep [-abcdDEFGHhIiLlmnOopqRSsUVvwxz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [-``-binary-files=value] [-``-color[=when]] [-``-colour[=when]] [-``-context[=

    grep 实用程序搜索任何给定的输入文件,选择匹配一个或多个模式的行。 默认情况下,如果模式中的正则表达式 (RE) 匹配输入行而没有尾随换行符,则该模式匹配输入行。 空表达式匹配每一行。 与至少一种模式匹配的每个输入行都被写入标准输出。

    grep 用于简单模式和基本正则表达式 (BREs); egrep 可以处理扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即,它不解释正则表达式)。 模式可以由一行或多行组成,允许任何模式行匹配输入的一部分。

    可以使用以下选项:

    num, -``-after-context=num

    每次匹配后打印 num 行尾随上下文。 另请参见 -B 和 -C 选项。

    , -``-text

    将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 grep 将简单地打印 “Binary file ... matches” 。 使用此选项会强制 grep 输出与指定模式匹配的行。

    num, -``-before-context=num

    在每次匹配之前打印前导上下文的 num 行。 另请参见 -A 和 -C 选项。

    , -``-byte-offset

    匹配模式的字节偏移量显示在相应匹配行的前面。

    [num], -``-context[=num]

    打印围绕每个匹配项的前导和尾随上下文的 num 行。 num 的默认值为 “2” ,相当于 “-A 2 -B 2” 。 注意:选项和它的参数之间不能有空格。

    , -``-count

    只有选定的行数被写入标准输出。

    -``-colour=[when], -``-color=[when]

    使用 GREP_COLOR 环境变量中存储的表达式标记匹配文本。 when 的可能值是 “never”, “always” 和 “auto” 。

    action, -``-devices=action

    为设备、FIFO 和套接字指定所需的 action 。 默认 action 是 “read” ,这意味着它们像普通文件一样被读取。 如果 action 设置为 “skip” ,设备将被静默跳过。

    action, -``-directories=action

    指定目录所需的 action 。 默认为 “read” ,这意味着目录的读取方式与普通文件相同。 其他可能的值是 “skip” 以静默忽略目录, “recurse” 以递归方式读取它们,这与 -R 和 -r 选项的效果相同。

    , -``-extended-regexp

    将 pattern 为扩展的正则表达式(即,强制 grep 表现为 egrep )。

    pattern, -``-regexp=pattern

    指定在搜索输入期间使用的 pattern :如果输入行匹配任何指定的模式,则选择该输入行。 当使用多个 -e 选项指定多个模式时,或者当一个 pattern 以破折号 (‘-’) 开头时,此选项最有用。

    -``-exclude pattern

    如果指定,它将从搜索中排除与给定文件名 pattern 匹配的文件。 请注意, -``-exclude 和 -``-include 模式是按给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include 模式,则搜索所有未排除的文件。 模式与指定的完整路径匹配,而不仅仅是文件名组件。

    -``-exclude-dir pattern

    如果指定了 -R ,它将从搜索中排除与给定文件名 pattern 匹配的目录。 请注意, -``-exclude-dir 和 -``-include-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include-dir 模式,则搜索所有未排除的目录。

    , -``-fixed-strings

    将 pattern 解释为一组固定字符串(即强制 grep 表现为 fgrep )。

    file, -``-file=file

    从 file 中读取一个或多个换行符分隔的模式。空模式行匹配每个输入行。 换行符不被视为模式的一部分。 如果 file 为空,则不匹配。

    , -``-basic-regexp

    将 pattern 解释为基本的正则表达式(即强制 grep 表现得像传统的 grep )。

    始终使用输出行打印文件名标题。

    , -``-no-filename

    切勿使用输出行打印文件名标题 (即 filenames) 。

    -``-help

    打印简短的帮助信息。

    忽略二进制文件。 此选项等效于 “-``-binary-file=``without-match” 选项。

    , -``-ignore-case

    执行不区分大小写的匹配。 默认情况下, grep 区分大小写。

    -``-include pattern

    如果指定,则仅搜索与给定文件名 pattern 匹配的文件。 请注意, -``-include 和 -``-exclude 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 模式与指定的完整路径匹配,而不仅仅是文件名组件。

    -``-include-dir pattern

    如果指定了 -R ,则仅搜索与给定文件名 pattern 匹配的目录。 请注意, -``-include-dir 和 -``-exclude-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。

    , -``-files-without-match

    只有不包含所选行的文件名才会写入标准输出。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。

    , -``-files-with-matches

    只有包含选定行的文件名被写入标准输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。

    -``-label

    用于代替 “(standard input)” 的标签,用于通常打印文件名的文件名。 此选项适用于 -H, -L 和 -l 。

    -``-mmap

    使用 mmap(2) 而不是 read(2) 来读取输入,这在某些情况下可能会带来更好的性能,但可能会导致未定义的行为。

    num, -``-max-count=num

    在 num 匹配后停止读取文件。

    , -``-line-number

    每个输出行前面都有其在文件中的相对行号,从第 1 行开始。 为每个处理的文件重置行号计数器。 如果指定了 -c, -L, -l 或 -q ,则忽略此选项。

    -``-null

    在文件名之后打印一个零字节。

    如果指定了 -R ,则仅当符号链接在命令行上明确列出时才跟随它们。 默认不遵循符号链接。

    , -``-only-matching

    仅打印行的匹配部分。

    如果指定了 -R ,则不遵循任何符号链接。 这是默认设置。

    , -``-quiet, - -silent

    安静模式:抑制正常输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。

    , -r, -``-recursive

    递归搜索列出的子目录。 (即,强制 grep 表现为 rgrep )。

    如果指定了 -R ,则遵循所有符号链接。 默认不遵循符号链接。

    , -``-no-messages

    静音模式。 不存在和不可读的文件被忽略(即,它们的错误消息被抑制)。

    , -``-binary

    搜索二进制文件,但不要尝试打印它们。

    此选项无效,仅用于与 GNU grep 兼容。

    , -``-version

    显示版本信息并退出。

    , -``-invert-match

    选定的行是那些 不 匹配任何指定模式的行。

    , -``-word-regexp

    表达式作为一个词被搜索(好像被 ‘[[:<:]]’ 和 ‘[[:>:]]’ 包围;参见 re_format(7) )。

    , -``-line-regexp

    只有针对整个固定字符串或正则表达式选择的输入行才被视为匹配行。

    相当于 -i 。已过时。

    , -``-null-data

    将输入和输出数据视为以零字节而不是换行符结尾的行序列。

    -``-binary-files=value

    控制二进制文件的搜索和打印。选项是:

    (default)

    搜索二进制文件但不打印它们。

    不要搜索二进制文件。

    将所有文件视为文本。

    -``-line-buffered

    强制输出为行缓冲。 默认情况下,当标准输出是终端时输出是行缓冲的,否则是块缓冲的。

    如果没有指定文件参数,则使用标准输入。 此外, “-” 可以用来代替文件名,在任何接受文件名的地方,以从标准输入中读取。 这包括 -f 和文件参数。

    grep 实用程序以下列值之一退出:

    选择了一条或多条线。

    未选择任何行。

    发生错误。

    • 查找文件中所有出现的模式 ‘patricia’ :

      $ grep 'patricia' myfile

    • 与上面相同,但只查找完整的单词:

      $ grep -w 'patricia' myfile

    • 计算确切模式 ‘FOO’ 的出现次数:

    ed(1), ex(1), sed(1), zgrep(1), re_format(7)

    grep 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。

    标志 [-AaBbCDdGHhILmoPRSUVw] 是该规范的扩展,当与空模式文件一起使用时 -f 标志的行为未定义。

    提供所有长选项是为了与该实用程序的 GNU 版本兼容。

    grep 实用程序的历史版本也支持标志 [-ruy] 。此实现支持这些选项;但是,强烈建议不要使用它们。

    grep 命令首次出现在 Version 6 AT&T UNIX 中。

    November 19, 2020

    FreeBSD 13.1-RELEASE

    awk.1

    AWK(1)

    AWK(1)

    FreeBSD General Commands Manual

    AWK(1)

    awk —

    at.1

    AT(1)

    AT(1)

    FreeBSD General Commands Manual

    AT(1)

    at, batch,

    ] [
    --ignore-all-space
    ] [
    --ignore-case
    ] [
    --ignore-space-change
    ] [
    --initial-tab
    ] [
    --minimal
    ] [
    --no-ignore-file-name-case
    ] [
    --normal
    ] [
    --rcs
    ] [
    --show-c-function
    ] [
    --starting-file
    ] [
    --speed-large-files
    ] [
    --strip-trailing-cr
    ] [
    --tabsize
    number] [
    --text
    ] [
    --unified
    ] [
    -I
    pattern |
    --ignore-matching-lines
    pattern] [
    -L
    label |
    --label
    label] file1 file2
    diff
    [
    -aBbdilpTtw
    ] [
    -I
    pattern |
    --ignore-matching-lines
    pattern] [
    -L
    label |
    --label
    label] [
    --brief
    ] [
    --changed-group-format
    GFMT] [
    --ed
    ] [
    --expand-tabs
    ] [
    --forward-ed
    ] [
    --ignore-all-space
    ] [
    --ignore-case
    ] [
    --ignore-space-change
    ] [
    --initial-tab
    ] [
    --minimal
    ] [
    --no-ignore-file-name-case
    ] [
    --normal
    ] [
    --paginate
    ] [
    --rcs
    ] [
    --show-c-function
    ] [
    --speed-large-files
    ] [
    --starting-file
    ] [
    --strip-trailing-cr
    ] [
    --tabsize
    number] [
    --text
    ]
    -C
    number | -context number file1 file2
    diff
    [
    -aBbdiltw
    ] [
    -I
    pattern |
    --ignore-matching-lines
    pattern] [
    --brief
    ] [
    --changed-group-format
    GFMT] [
    --ed
    ] [
    --expand-tabs
    ] [
    --forward-ed
    ] [
    --ignore-all-space
    ] [
    --ignore-case
    ] [
    --ignore-space-change
    ] [
    --initial-tab
    ] [
    --minimal
    ] [
    --no-ignore-file-name-case
    ] [
    --normal
    ] [
    --paginate
    ] [
    --rcs
    ] [
    --show-c-function
    ] [
    --speed-large-files
    ] [
    --starting-file
    ] [
    --strip-trailing-cr
    ] [
    --tabsize
    number] [
    --text
    ]
    -D
    string |
    --ifdef
    string file1 file2
    diff
    [
    -aBbdilpTtw
    ] [
    -I
    pattern |
    --ignore-matching-lines
    pattern] [
    -L
    label |
    --label
    label] [
    --brief
    ] [
    --changed-group-format
    GFMT] [
    --ed
    ] [
    --expand-tabs
    ] [
    --forward-ed
    ] [
    --ignore-all-space
    ] [
    --ignore-case
    ] [
    --ignore-space-change
    ] [
    --initial-tab
    ] [
    --minimal
    ] [
    --no-ignore-file-name-case
    ] [
    --normal
    ] [
    --paginate
    ] [
    --rcs
    ] [
    --show-c-function
    ] [
    --speed-large-files
    ] [
    --starting-file
    ] [
    --strip-trailing-cr
    ] [
    --tabsize
    number] [
    --text
    ]
    -U
    number |
    --unified
    number file1 file2
    diff
    [
    -aBbdilNPprsTtw
    ] [
    -c
    |
    -e
    |
    -f
    |
    -n
    |
    -q
    |
    -u
    ] [
    --brief
    ] [
    --changed-group-format
    GFMT] [
    --context
    ] [
    --ed
    ] [
    --expand-tabs
    ] [
    --forward-ed
    ] [
    --ignore-all-space
    ] [
    --ignore-case
    ] [
    --ignore-space-change
    ] [
    --initial-tab
    ] [
    --minimal
    ] [
    --new-file
    ] [
    --no-ignore-file-name-case
    ] [
    --normal
    ] [
    --paginate
    ] [
    --rcs
    ] [
    --recursive
    ] [
    --report-identical-files
    ] [
    --show-c-function
    ] [
    --speed-large-files
    ] [
    --strip-trailing-cr
    ] [
    --tabsize
    number] [
    --text
    ] [
    --unidirectional-new-file
    ] [
    --unified
    ] [
    -I
    pattern |
    --ignore-matching-lines
    pattern] [
    -L
    label |
    --label
    label] [
    -S
    name |
    --starting-file
    name] [
    -X
    file |
    --exclude-from
    file] [
    -x
    pattern |
    --exclude
    pattern] dir1 dir2
    diff
    [
    -aBbditwW
    ] [
    --expand-tabs
    ] [
    --ignore-all-blanks
    ] [
    --ignore-blank-lines
    ] [
    --ignore-case
    ] [
    --minimal
    ] [
    --no-ignore-file-name-case
    ] [
    --strip-trailing-cr
    ] [
    --suppress-common-lines
    ] [
    --tabsize
    number] [
    --text
    ] [
    --width
    ]
    -y
    |
    --side-by-side
    file1 file2
    概要
    描述
    -C
    -c
    -D
    -e
    -f
    -n
    -q
    -U
    -u
    -y
    -a
    -B
    -b
    -d
    -I
    -i
    -l
    -L
    -p
    -T
    -t
    -w
    -W
    --changed-group-format
    --ignore-file-name-case
    --no-ignore-file-name-case
    --normal
    --speed-large-files
    --strip-trailing-cr
    --suppress-common-lines
    --tabsize
    -N
    -P
    -r
    -S
    -s
    -X
    -x
    输出风格
    XX
    XX
    XX
    XX,YY
    XX
    XX,YY
    XX,YY
    文件
    退出状态
    实例
    参见
    标准
    历史
    num]] [
    -``-label
    ] [
    -
    -line-buffered
    ] [
    -``-null
    ] [pattern] [file ...]

    $ grep -c FOO myfile

  • 与上面相同,但忽略大小写:

    $ grep -c -i FOO myfile

  • 在行首查找所有出现的模式 ‘.Pp’ :

    $ grep '^\.Pp' myfile

    撇号确保整个表达式由 grep 而不是用户的 shell 评估。 插入符号 ‘^’ 匹配行首的空字符串,而 ‘\’ 转义 ‘.’, 否则将匹配任何字符。

  • 查找文件中不包含单词 ‘foo’ 或 ‘bar’ 的所有行:

    $ grep -v -e 'foo' -e 'bar' myfile

  • 使用扩展正则表达式仔细阅读文件 ‘calendar’ 以查找 19、20 或 25:

    $ egrep '19|20|25' calendar

  • 显示匹配行和包含模式 ‘FIXME’ 的 ‘*.h’ 文件的名称。 从 /usr/src/sys/arm 目录递归搜索

    $ grep -H -R FIXME --include=*.h /usr/src/sys/arm/

  • 与上面相同,但仅显示匹配文件的名称:

    $ grep -l -R FIXME --include=*.h /usr/src/sys/arm/

  • 显示包含文本 ‘foo’ 的行。 输出的匹配部分是彩色的,每一行都以行号和匹配行的文件中的偏移量作为前缀。

    $ grep -b --colour -n foo myfile

  • 显示与从标准输入读取的扩展正则表达式模式匹配的行:

    $ echo -e 'Free\nBSD\nAll.*reserved' | grep -E -f - myfile

  • 显示 pciconf(8) 命令输出中与指定扩展正则表达式匹配的行以及三行前导上下文和一行尾随上下文:

    $ pciconf -lv | grep -B3 -A1 -E 'class.*=.*storage'

  • 抑制任何输出并使用退出状态显示适当的消息:

    $ grep -q foo myfile && echo File matches

  • 概要
    描述
    -A
    -a
    -B
    -b
    -C
    -c
    -D
    -d
    -E
    -e
    -F
    -f
    -G
    -H
    -h
    -I
    -i
    -L
    -l
    -m
    -n
    -O
    -o
    -p
    -q
    -R
    -S
    -s
    -U
    -u
    -V
    -v
    -w
    -x
    -y
    -z
    binary
    without-match
    text
    退出状态
    0
    1
    >1
    实例
    参见
    标准
    历史
    模式导向的扫描和处理语言

    概要

    awk [-safe] [-version] [-d[n]] [-F fs] [-v var=value] [prog | -f progfile] file ...

    描述

    awk 扫描每个输入 file 以查找与 prog 或一个或多个指定为 -f progfile 的文件中指定的一组模式中的任何一个匹配的行。 对于每个模式,当 file 的一行与模式匹配时,将执行一个关联的操作。 每一行都与每个模式动作语句的模式部分匹配;为每个匹配的模式执行相关的操作。 文件名 ‘-’ 表示标准输入。 任何 var=value 形式的 file 都被视为一个赋值,而不是一个文件名,如果它是一个文件名,它会在它被打开的时候被执行。

    选项如下:

    -d[n]

    调试模式。 将调试级别设置为 n, 如果未指定 n ,则设置为 1。 大于 1 的值会导致 awk 在发生致命错误时转储核心。

    -F fs

    将输入字段分隔符定义为正则表达式 fs 。

    -f progfile

    从指定的文件 progfile 而不是从命令行读取程序代码。

    -safe

    禁用文件输出 (print > 、 print >>) 、 进程创建 (cmd | getline 、 print | 、 system) 和对环境的访问 (ENVIRON; 请参阅下面的变量部分)。 这是 awk 的 “safe” 版本的第一个 (但不是非常可靠的) 近似值。

    -version

    将 awk 的版本号打印到标准输出并退出。

    -v var=value

    在执行 prog 之前为变量 var 赋 value ;可以存在任意数量的 -v 选项。

    输入通常由由换行符或 RS 值分隔的输入行 (records) 组成。 如果 RS 为空,则使用任意数量的空行作为记录分隔符,并使用换行符作为字段分隔符(除了 FS 的值)。 这在处理多行记录时很方便。

    输入行通常由由空格或正则表达式 FS 分隔的字段组成。 字段表示为 $1, $2, ..., 而 $0 表示整行。 如果 FS 为空,则输入行被拆分为每个字符一个字段。

    通常,任意数量的空白分隔字段。 要将字段分隔符设置为单个空白,请使用值为 ‘[ ]’ 的 -F 选项。 如果指定了 ‘t’ 的字段分隔符,则 awk 将其视为已指定 ‘\t’ 并使用 ⟨TAB⟩ 作为字段分隔符。 为了使用文字 ‘t’ 作为字段分隔符,请使用 -F 选项,其值为 ‘[t]’ 。

    模式动作语句具有以下形式

    pattern { action }

    缺少 { action } 表示打印该行;缺失的模式总是匹配的。 模式操作语句由换行符或分号分隔。

    允许在终止语句之后或逗号 (‘,’) 、左大括号 (‘{’) 、逻辑 AND (‘&&’) 、逻辑 OR (‘||’) 和 ‘do’ 之后使用换行符或 ‘else’ 关键字,或在 ‘if 、’ ‘for’ 或 ‘while’ 语句的右括号之后。 此外,反斜杠 (‘\’) 可用于转义标记之间的换行符。

    动作是一系列语句。 语句可以是以下之一:

    if (expression) statement [else statement]

    while (expression) statement

    for (expression; expression; expression) statement

    for (var in array) statement

    do statement while (expression)

    break

    continue

    { [statement ...] }

    expression # commonly var = expression

    print [expression-list] [>expression]

    printf format [..., expression-list] [>expression]

    return [expression]

    next # skip remaining patterns on this input line

    nextfile # skip rest of this file, open next, start at top

    delete array[expression] # delete an array element

    delete array # delete all elements of array

    exit [expression] # exit immediately; status is expression

    语句以分号、换行符或右大括号结束。 一个空的 expression-list 代表 $0 。 字符串常量用 "" 引用,其中识别出通常的 C 转义(请参阅 printf(1) 以获取这些转义的完整列表)。 表达式根据需要采用字符串或数值,并使用运算符 + - * / % ^ (求幂) 和连接 (由空格表示) 构建。 运算符 ! ++ -- += -= *= /= %= ^= > >= < <= == != ?: 也可用于表达式。 变量可以是标量、数组元素(表示为 x[i]) 或字段。 变量被初始化为空字符串。 数组下标可以是任意字符串,不一定是数字;这允许一种形式的联想记忆。 允许使用多个下标,例如 [i,j,k] ;成分是连接的,由 SUBSEP 的值分隔 (请参阅下面的变量部分) 。

    print 语句将其参数打印在标准输出上(如果存在 >file 或 >>file 则打印在文件上;如果存在 | cmd ,则打印在管道上),由当前输出字段分隔符分隔,并由输出记录分隔符终止. file 和 cmd 可以是文字名称或带括号的表达式;不同语句中的相同字符串值表示相同的打开文件。 printf 语句根据格式格式化其表达式列表(请参阅 printf(1) )。

    模式是正则表达式和关系表达式的任意布尔组合(带有 ! || &&) 。 awk 支持扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 模式中的独立正则表达式适用于整行。 正则表达式也可能出现在关系表达式中,使用运算符 ~ 和 !~ 。 /re/ 是一个常量正则表达式;任何字符串(常量或变量)都可以用作正则表达式,但模式中孤立正则表达式的位置除外。

    一个模式可能由两个用逗号分隔的模式组成;在这种情况下,对从第一个模式的出现到第二个模式的出现的所有行执行该动作。

    关系表达式是以下之一:

    expression matchop regular-expression

    expression relop expression

    expression in array-name

    [(](#()expr, expr, ...) in array-name

    其中 relop 是 C 中六个关系运算符中的任何一个,而 matchop 是 ~ (匹配)或 !~ 不匹配)。 条件是算术表达式、关系表达式或它们的布尔组合。

    特殊模式 BEGIN 和 END 可用于在读取第一个输入行之前和最后一个输入行之后捕获控制。 BEGIN 和 END 不与其他模式组合。

    具有特殊含义的变量名:

    ARGC

    参数计数,可分配。

    ARGV

    参数数组,可赋值;非空成员被视为文件名。

    CONVFMT

    转换数字时的转换格式(默认 “%.6g” )。

    ENVIRON

    环境变量数组;下标是名称。

    FILENAME

    当前输入文件的名称。

    FNR

    当前文件中当前记录的序号。

    FS

    用于分隔字段的正则表达式;也可以通过选项 -F fs 设置。

    NF

    当前记录中的字段数。 $NF 可用于获取当前记录中最后一个字段的值。

    NR

    当前记录的序号。

    OFMT

    数字的输出格式(默认 “%.6g” 数字的输出格式(默认

    OFS

    输出字段分隔符(默认为空白)。

    ORS

    输出记录分隔符(默认换行符)。

    RLENGTH

    match() 函数匹配的字符串的长度。

    RS

    输入记录分隔符(默认换行符)。

    RSTART

    match() 函数匹配的字符串的起始位置。

    SUBSEP

    分隔多个下标(默认 034)。

    函数

    awk 语言有多种内置函数:算术、字符串、输入/输出、通用和位操作。

    可以这样定义函数(在模式动作语句的位置):

    function foo(a, b, c) { ...; return x }

    如果是标量,参数按值传递,如果是数组名,则按引用传递;函数可以递归调用。 参数是函数的本地参数;所有其他变量都是全局的。 因此,可以通过在函数定义中提供多余的参数来创建局部变量。

    算术函数

    atan2(y, x)

    以弧度返回 y/x 的反正切。

    cos(x)

    返回 x 的余弦,其中 x 以弧度为单位。

    exp(x)

    返回 x 的指数。

    int(x)

    返回 x 截断为整数值。

    log(x)

    返回 x 的自然对数。

    rand()

    返回一个随机数 n ,满足 0≤n <1 。

    sin(x)

    返回 x 的正弦值,其中 x 以弧度为单位。

    sqrt(x)

    返回 x 的平方根。

    srand(expr)

    将 rand() 的种子设置为 expr 并返回前一个种子。 如果省略 expr ,则使用一天中的时间。

    字符串函数

    gsub(r, t, s)

    与 sub() 相同,只是替换了所有出现的正则表达式。 gsub() 返回替换的数量。

    index(s, t)

    s 中字符串 t 出现的位置,如果没有出现,则为 0。

    length(s)

    s 作为字符串的长度,如果没有给出参数,则为 $0 。

    match(s, r)

    正则表达式 r 在 s 中出现的位置,如果没有出现,则为 0。 变量 RSTART 设置为匹配字符串的起始位置 (与返回值相同) ,如果未找到匹配项,则设置为零。 变量 RLENGTH 设置为匹配字符串的长度,如果没有找到匹配项,则设置为 -1 。

    split(s, a, fs)

    将字符串 s 拆分为数组元素 a[1], a[2], ..., a[n]- 并返回 n 。 如果没有给出 fs ,则使用正则表达式 FS 或字段分隔符 fs 进行分隔。 一个空字符串作为字段分隔符将字符串拆分为每个字符一个数组元素。

    sprintf(fmt, expr, ...)

    根据 printf(1) 格式 fmt 格式化 expr, ... 产生的字符串。

    sub(r, t, s)

    用 t 代替字符串 s 中第一次出现的正则表达式 r 。 如果没有给出 s ,则使用 $0 。 t 中的 & 符号 (‘&’) 在字符串 s 中被替换为正则表达式 r 。 可以通过在其前面加上两个反斜杠 (‘\\’) 来指定文字 & 符号。 可以通过在其前面加上另一个反斜杠 (‘\\’) 来指定文字反斜杠。 sub() 返回替换的数量。

    substr(s, m, n)

    最多返回从位置 m 开始的 s 的 n 个字符的子字符串,从 1 开始计数。 如果省略 n ,或者如果 n 指定的字符多于字符串中剩余的字符,则子字符串的长度受 s 长度的限制。

    tolower(str)

    返回 str 的副本,其中所有大写字符都转换为对应的小写字符。

    toupper(str)

    返回 str 的副本,其中所有小写字符都转换为对应的大写字符。

    输入/输出和一般功能

    close(expr)

    关闭文件或管道 expr 。 expr 应该与用于打开文件或管道的字符串匹配。

    cmd | getline [var]

    从 cmd 的输出通过管道传输的流中读取输入记录。 如果省略 var ,则设置变量 $0 和 NF 。 否则设置 var 。 如果流未打开,则将其打开。 只要流保持打开状态,后续调用就会从流中读取后续记录。 流保持打开状态,直到通过调用 close() 显式关闭。 getline 返回 1 表示输入成功,0 表示文件结束, -1 表示错误。

    fflush([expr])

    刷新文件或管道 expr 的任何缓冲输出,或者如果省略 expr ,则刷新所有打开的文件或管道。 expr 应该与用于打开文件或管道的字符串匹配。

    getline

    将 $0 设置为当前输入文件中的下一个输入记录。 这种形式的 getline 设置变量 NF 、 NR 和 FNR 。 getline 返回 1 表示输入成功,0 表示文件结束, -1 表示错误。

    getline var

    将 $0 设置为变量 var 。 这种形式的 getline 设置变量 NR 和 FNR 。 getline 返回 1 表示输入成功,0 表示文件结束, -1 表示错误。

    getline [var] <file

    将 $0 设置为 file 中的下一条记录。 如果省略 var ,则设置变量 $0 和 NF 。否则设置 var 。 如果 file 未打开,则将其打开。 只要流保持打开状态,后续调用就会从 file 中读取后续记录。 file 保持打开状态,直到通过调用 close() 显式关闭。

    system(cmd)

    执行 cmd 并返回其退出状态。

    比特运算函数

    compl(x)

    返回整数参数 x 的按位补码。

    and(v1, v2, ...)

    对提供的所有参数执行按位与,作为整数。 必须至少有两个值。

    or(v1, v2, ...)

    对提供的所有参数执行按位或,作为整数。 必须至少有两个值。

    xor(v1, v2, ...)

    对提供的所有参数执行按位异或,作为整数。 必须至少有两个值。

    lshift(x, n)

    返回向左移动 n 位的整数参数 x。

    rshift(x, n)

    返回整数参数 x 向右移动 n 位。

    退出状态

    The awk utility exits 0 on success, and >0 if an error occurs.

    但请注意, exit 表达式可以修改退出状态。

    实例

    打印长度超过 72 个字符的行:

    length($0) > 72

    以相反的顺序打印前两个字段:

    { print $2, $1 }

    同样,输入字段由逗号和/或空格和制表符分隔:

    BEGIN { FS = ",[ \t]*|[ \t]+" } { print $2, $1 }

    将第一列相加,打印总和和平均值:

    { s += $1 } END { print "sum is", s, " average is", s/NR }

    打印开始/停止对之间的所有行:

    /start/, /stop/

    模拟 echo(1):

    BEGIN { # Simulate echo(1) for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i] printf "\n" exit }

    将错误消息打印到标准错误:

    { print "error!" > "/dev/stderr" }

    参见

    cut(1), lex(1), printf(1), sed(1), re_format(7) A. V. Aho, B. W. Kernighan, and P. J. Weinberger, The AWK Programming Language, Addison-Wesley, 1988, ISBN 0-201-07981-X.

    标准

    awk 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范,但 awk 不支持 {n,m} 模式匹配。

    标志 -d -、 -safe 和 -version 以及命令 fflush, compl, and, or, xor, lshift, rshift 是对该规范的扩展。

    历史

    awk 实用程序出现在 Version 7 AT&T UNIX 中。

    缺陷

    数字和字符串之间没有显式转换。 要强制将表达式视为数字,请向其添加 0;强制将其视为将 "" 连接到它的字符串。

    函数中变量的范围规则很糟糕;语法更糟。

    June 6, 2020

    FreeBSD 13.1-RELEASE

    名称
    atq
    ,
    atrm
    —

    排队、检查或删除作业以供以后执行

    概要

    at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at -l -q queue at -r job [job ...]

    atq [-q queue] [-v]

    atrm job [job ...]

    batch [-q queue] [-f file] [-mv] [time]

    描述

    at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。

    at

    在指定时间执行命令;

    atq

    列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;

    atrm

    删除工作;

    batch

    在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。

    at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。

    例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。

    at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。

    对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。

    超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。

    如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。

    如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。

    如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。

    实现说明

    请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。

    选项

    -q queue

    使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。

    -m

    即使没有输出,也可以在作业完成后向用户发送邮件。

    -f file

    从 file 而不是标准输入中读取作业。

    -l

    不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。

    -d

    是 atrm 的别名(此选项已弃用;请改用 -r )。

    -b

    是 batch 的别名。

    -v

    对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。

    -c

    将命令行上列出的作业分类到标准输出。

    -r

    删除指定的作业。

    -t

    使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:

    CC

    年份的前两位数字(世纪)。

    YY

    年份的后两位数。

    MM

    一年中的月份,从 1 到 12。

    DD

    一个月中的第几天,从 1 到 31。

    hh

    一天中的小时,从 0 到 23。

    mm

    小时的分钟,从 0 到 59。

    SS

    分钟的秒数,从 0 到 60。

    如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。

    文件

    /var/at/jobs

    包含作业文件的目录

    /var/at/spool

    包含输出假脱机文件的目录

    /var/run/utx.active

    登录记录

    /var/at/at.allow

    允许权限控制

    /var/at/at.deny

    拒绝权限控制

    /var/at/jobs/.lockfile

    创造工作锁定文件

    参见

    nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)

    作者

    At 主要由 Thomas Koenig <[email protected]> 编写。 时间解析例程由 David Parsons <[email protected]> 编写, Joe Halpin <[email protected]> 进行了小幅改进。

    缺陷

    如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。

    当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。

    指定超过 2038 年的日期可能不适用于某些系统。

    August 11, 2018

    FreeBSD 13.1-RELEASE

    名称

    grep.1

    GREP(1)

    GREP(1)

    FreeBSD General Commands Manual

    GREP(1)

    名称

    grep, egrep, fgrep, rgrep —

    文件模式搜索器

    grep [-abcdDEFGHhIiLlmnOopqRSsUVvwxz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [-``-binary-files=value] [-``-color[=when]] [-``-colour[=when]] [-``-context[=

    grep 实用程序搜索任何给定的输入文件,选择匹配一个或多个模式的行。 默认情况下,如果模式中的正则表达式 (RE) 匹配输入行而没有尾随换行符,则该模式匹配输入行。 空表达式匹配每一行。 与至少一种模式匹配的每个输入行都被写入标准输出。

    grep 用于简单模式和基本正则表达式 (BREs); egrep 可以处理扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即,它不解释正则表达式)。 模式可以由一行或多行组成,允许任何模式行匹配输入的一部分。

    可以使用以下选项:

    num, -``-after-context=num

    每次匹配后打印 num 行尾随上下文。 另请参见 -B 和 -C 选项。

    , -``-text

    将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 grep 将简单地打印 “Binary file ... matches” 。 使用此选项会强制 grep 输出与指定模式匹配的行。

    num, -``-before-context=num

    在每次匹配之前打印前导上下文的 num 行。 另请参见 -A 和 -C 选项。

    , -``-byte-offset

    匹配模式的字节偏移量显示在相应匹配行的前面。

    [num], -``-context[=num]

    打印围绕每个匹配项的前导和尾随上下文的 num 行。 num 的默认值为 “2” ,相当于 “-A 2 -B 2” 。 注意:选项和它的参数之间不能有空格。

    , -``-count

    只有选定的行数被写入标准输出。

    -``-colour=[when], -``-color=[when]

    使用 GREP_COLOR 环境变量中存储的表达式标记匹配文本。 when 的可能值是 “never”, “always” 和 “auto” 。

    action, -``-devices=action

    为设备、FIFO 和套接字指定所需的 action 。 默认 action 是 “read” ,这意味着它们像普通文件一样被读取。 如果 action 设置为 “skip” ,设备将被静默跳过。

    action, -``-directories=action

    指定目录所需的 action 。 默认为 “read” ,这意味着目录的读取方式与普通文件相同。 其他可能的值是 “skip” 以静默忽略目录, “recurse” 以递归方式读取它们,这与 -R 和 -r 选项的效果相同。

    , -``-extended-regexp

    将 pattern 为扩展的正则表达式(即,强制 grep 表现为 egrep )。

    pattern, -``-regexp=pattern

    指定在搜索输入期间使用的 pattern :如果输入行匹配任何指定的模式,则选择该输入行。 当使用多个 -e 选项指定多个模式时,或者当一个 pattern 以破折号 (‘-’) 开头时,此选项最有用。

    -``-exclude pattern

    如果指定,它将从搜索中排除与给定文件名 pattern 匹配的文件。 请注意, -``-exclude 和 -``-include 模式是按给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include 模式,则搜索所有未排除的文件。 模式与指定的完整路径匹配,而不仅仅是文件名组件。

    -``-exclude-dir pattern

    如果指定了 -R ,它将从搜索中排除与给定文件名 pattern 匹配的目录。 请注意, -``-exclude-dir 和 -``-include-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include-dir 模式,则搜索所有未排除的目录。

    , -``-fixed-strings

    将 pattern 解释为一组固定字符串(即强制 grep 表现为 fgrep )。

    file, -``-file=file

    从 file 中读取一个或多个换行符分隔的模式。空模式行匹配每个输入行。 换行符不被视为模式的一部分。 如果 file 为空,则不匹配。

    , -``-basic-regexp

    将 pattern 解释为基本的正则表达式(即强制 grep 表现得像传统的 grep )。

    始终使用输出行打印文件名标题。

    , -``-no-filename

    切勿使用输出行打印文件名标题 (即 filenames) 。

    -``-help

    打印简短的帮助信息。

    忽略二进制文件。 此选项等效于 “-``-binary-file=``without-match” 选项。

    , -``-ignore-case

    执行不区分大小写的匹配。 默认情况下, grep 区分大小写。

    -``-include pattern

    如果指定,则仅搜索与给定文件名 pattern 匹配的文件。 请注意, -``-include 和 -``-exclude 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 模式与指定的完整路径匹配,而不仅仅是文件名组件。

    -``-include-dir pattern

    如果指定了 -R ,则仅搜索与给定文件名 pattern 匹配的目录。 请注意, -``-include-dir 和 -``-exclude-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。

    , -``-files-without-match

    只有不包含所选行的文件名才会写入标准输出。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。

    , -``-files-with-matches

    只有包含选定行的文件名被写入标准输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。

    -``-label

    用于代替 “(standard input)” 的标签,用于通常打印文件名的文件名。 此选项适用于 -H, -L 和 -l 。

    -``-mmap

    使用 mmap(2) 而不是 read(2) 来读取输入,这在某些情况下可能会带来更好的性能,但可能会导致未定义的行为。

    num, -``-max-count=num

    在 num 匹配后停止读取文件。

    , -``-line-number

    每个输出行前面都有其在文件中的相对行号,从第 1 行开始。 为每个处理的文件重置行号计数器。 如果指定了 -c, -L, -l 或 -q ,则忽略此选项。

    -``-null

    在文件名之后打印一个零字节。

    如果指定了 -R ,则仅当符号链接在命令行上明确列出时才跟随它们。 默认不遵循符号链接。

    , -``-only-matching

    仅打印行的匹配部分。

    如果指定了 -R ,则不遵循任何符号链接。 这是默认设置。

    , -``-quiet, - -silent

    安静模式:抑制正常输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。

    , -r, -``-recursive

    递归搜索列出的子目录。 (即,强制 grep 表现为 rgrep )。

    如果指定了 -R ,则遵循所有符号链接。 默认不遵循符号链接。

    , -``-no-messages

    静音模式。 不存在和不可读的文件被忽略(即,它们的错误消息被抑制)。

    , -``-binary

    搜索二进制文件,但不要尝试打印它们。

    此选项无效,仅用于与 GNU grep 兼容。

    , -``-version

    显示版本信息并退出。

    , -``-invert-match

    选定的行是那些 不 匹配任何指定模式的行。

    , -``-word-regexp

    表达式作为一个词被搜索(好像被 ‘[[:<:]]’ 和 ‘[[:>:]]’ 包围;参见 re_format(7) )。

    , -``-line-regexp

    只有针对整个固定字符串或正则表达式选择的输入行才被视为匹配行。

    相当于 -i 。已过时。

    , -``-null-data

    将输入和输出数据视为以零字节而不是换行符结尾的行序列。

    -``-binary-files=value

    控制二进制文件的搜索和打印。选项是:

    (default)

    搜索二进制文件但不打印它们。

    不要搜索二进制文件。

    将所有文件视为文本。

    -``-line-buffered

    强制输出为行缓冲。 默认情况下,当标准输出是终端时输出是行缓冲的,否则是块缓冲的。

    如果没有指定文件参数,则使用标准输入。 此外, “-” 可以用来代替文件名,在任何接受文件名的地方,以从标准输入中读取。 这包括 -f 和文件参数。

    grep 实用程序以下列值之一退出:

    选择了一条或多条线。

    未选择任何行。

    发生错误。

    • 查找文件中所有出现的模式 ‘patricia’ :

      $ grep 'patricia' myfile

    • 与上面相同,但只查找完整的单词:

      $ grep -w 'patricia' myfile

    • 计算确切模式 ‘FOO’ 的出现次数:

    ed(1), ex(1), sed(1), zgrep(1), re_format(7)

    grep 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。

    标志 [-AaBbCDdGHhILmoPRSUVw] 是该规范的扩展,当与空模式文件一起使用时 -f 标志的行为未定义。

    提供所有长选项是为了与该实用程序的 GNU 版本兼容。

    grep 实用程序的历史版本也支持标志 [-ruy] 。此实现支持这些选项;但是,强烈建议不要使用它们。

    grep 命令首次出现在 Version 6 AT&T UNIX 中。

    November 19, 2020

    FreeBSD 13.1-RELEASE

    apropos.1

    APROPOS(1)

    APROPOS(1)

    FreeBSD General Commands Manual

    APROPOS(1)

    名称

    apropos, whatis —

    搜索手册页数据库

    apropos [-afk] [-C file] [-M path] [-m path] [-O outkey] [-S arch] [-s section] expression ...

    apropos 和 whatis 实用程序查询由 makewhatis(8) 生成的手册页数据库,评估每个数据库中每个文件的 expression 。 默认情况下,它们显示所有匹配手册的名称、章节编号和描述行。

    默认情况下, apropos 在 man(1) 规定的默认路径中搜索 makewhatis(8) 数据库,并使用不区分大小写的扩展正则表达式匹配手动名称和描述 (the Nm 和 Nd 宏键) 。 多个术语意味着成对 -o 。

    whatis 是 apropos -f 的同义词。

    选项如下:

    不是只显示标题行,而是显示完整的手册页,就像 man(1) -a 一样。 如果标准输出是终端设备且未指定 -c ,则使用 more(1) 对其进行分页。 在 -a 模式下, mandoc(1) 手册中描述的选项 -IKOTW 也可用。

    file

    以 man.conf(5) 格式指定替代配置 file 。

    仅在手册页名称中搜索 expression 中的所有单词。 搜索不区分大小写,仅匹配整个单词。 在此模式下,宏键、比较运算符和逻辑运算符不可用。

    支持完整的 expression 语法。 这是 apropos 的默认值。

    path

    使用冒号分隔的路径而不是搜索 makewhatis(8) 数据库的默认路径列表。 无效路径或没有手动数据库的路径将被忽略。

    path

    将冒号分隔的路径添加到搜索 makewhatis(8) 数据库的路径列表中。 无效路径或没有手动数据库的路径将被忽略。

    outkey

    显示与键 outkey 关联的值,而不是手动描述。

    arch

    将搜索限制在指定 machine(1) 架构的页面。 arch 不区分大小写。 默认情况下,会显示所有架构的页面。

    section

    将搜索限制在手册的指定部分。 默认情况下,显示所有部分的页面。 请参阅 man(1) 以获取部分列表。

    选项 -chlw 也受支持,并记录在 man(1) 中。 选项 -fkl 是互斥的并且相互覆盖。

    expression 由逻辑运算符 -a (and) 和 -o (or) 连接的搜索词组成。 -a 运算符优先于 -o 并且两者都是从左到右计算的。

    ( expr )

    如果子表达式 expr 为真,则为真。

    expr1 -a expr2

    如果 expr1 和 expr2 都为真(逻辑 ‘and’ ),则为真。

    expr1 [-o] expr2

    如果 expr1 和/或 expr2 评估为真(逻辑 ‘or’ ),则为真。

    term

    如果满足 term ,则为真。 这有语法 [[key[,key...]](=|~)]val, 其中 key 是要查询的 mdoc(7) 宏, val 是它的值。 有关可用键的列表,请参阅 。运算符 = 计算子字符串,而 ~ 计算区分大小写的扩展正则表达式。

    term

    如果 term 是正则表达式,则不区分大小写。 对子字符串项没有影响。

    结果首先根据节号按数字升序排序,然后按页面名称按 ascii(7) 字母升序排序,不区分大小写。

    每个输出行的格式为

    name[, name...](sec) - description

    其中 “name” 是手册的名称, “sec” 是手册部分, “description” 是手册的简短描述。 如果为手册指定了架构,则显示为

    name(sec/arch) - description

    生成的手册可以以

    $ man -s sec name

    如果在输出中指定了体系结构,请使用

    $ man -s sec -S arch name

    查询评估由 makewhatis(8) 索引的 mdoc(7) 宏子集。 除了下面列出的宏键之外,特殊键 any 可用于匹配任何可用的宏键。

    名称和描述:

    手册名称

    单行手册描述

    机器架构(不区分大小写)

    手册节号

    节和交叉引用:

    节标题(不包括标准节)

    小节标题

    对另一个手册页的交叉引用

    书目参考

    命令行实用程序的语义标记:

    命令行选项(标志)

    命令修饰符

    命令参数

    内部或交互式命令

    环境变量

    文件系统路径

    函数库的语义标记:

    函数库名称

    包含文件

    函数返回类型

    函数名称

    函数参数类型和名称

    变量类型

    变量名称

    定义变量或预处理器常量

    错误常量

    环境变量

    各种语义标记:

    作者姓名

    超链接

    “mailto”超链接

    内核配置声明

    数学符号

    商品名

    物理标记:

    斜体或下划线

    粗体字体

    打字机字体

    文本生成:

    参考标准文档

    AT&T UNIX 版本参考

    BSD 版本参考

    BSD/OS 版本参考

    NetBSD 版本参考

    FreeBSD 版本参考

    OpenBSD 版本参考

    DragonFly 版本参考

    一般来说,宏键应该产生完整的结果,而不期望用户考虑实际的宏使用。 例如,结果包括:

    函数参数出现在 Fn 行中

    函数名用 Fo 宏标记

    include 文件名用 Fd 宏标记

    显示为函数返回类型的类型

    SYNOPSIS 中函数参数中出现的类型

    使用环境变量 MANPAGER 的任何非空值代替标准分页程序, more(1); 有关详细信息,请参见 man(1) 。 仅在指定 -a 或 -l 时使用。

    用于搜索手册页的以冒号分隔的目录列表;有关详细信息,请参见 man(1) 。 被 -M 覆盖,如果指定了 -l ,则忽略。

    指定未定义 MANPAGER 如果 PAGER 和 MANPAGER 均未定义,则使用 more(1) -s 。 仅在指定 -a 或 -l 时使用。

    mandoc.db

    makewhatis(8) 关键字数据库的名称

    /etc/man.conf

    默认 man(1) 配置文件

    The apropos utility exits 0 on success, and >0 if an error occurs.

    搜索 “.cf” 作为手册名称和描述的子字符串:

    $ apropos =.cf

    还包括 “.cnf” 和 “.conf” 的匹配项:

    $ apropos =.cf =.cnf =.conf

    使用区分大小写的正则表达式在名称和描述中搜索:

    $ apropos '~set.?[ug]id'

    在提及 “optind” 和 “optarg” 变量的库部分中搜索手册:

    $ apropos -s 3 Va=optind -a Va=optarg

    执行与使用参数 “ssh” 调用 whatis 完全相同的操作:

    $ apropos -- -i 'Nm~[[:<:]]ssh[[:>:]]'

    以下两个调用是等效的:

    $ apropos -S arch -s section expression

    $ apropos \( expression \) -a arch~^(arch|any)$ -a sec~^section$

    man(1), re_format(7), makewhatis(8)

    apropos 实用程序符合 man(1) -k 的 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。

    所有选项、 whatis 命令、对逻辑运算符、宏键、子字符串匹配、结果排序、环境变量 MANPAGER 和 MANPATH 、数据库格式和配置文件的支持都是该规范的扩展。

    whatis 的部分功能已经由 1BSD 中的前 manwhere 实用程序提供。 apropos 和 whatis 实用程序首先出现在 2BSD 中。 它们是针对 OpenBSD 5.6 从头开始重写的。

    -M 选项和 MANPATH 变量最早出现在 4.3BSD; -m 在 4.3BSD-Reno 中; -C 在 4.4BSD-Lite1 中;和 -S 和 -s 在 OpenBSD 4.5 中用于 apropos ,在 OpenBSD 5.6 中用于 whatis 。 选项 -acfhIKklOTWw 出现在 OpenBSD 5.7 中。

    Bill Joy 于 1977 年写了 manwhere ,最初的 BSD apropos 和 whatis 写于 1979 年 2 月。当前版本由 Kristaps Dzonsons <> 和 Ingo Schwarze <> 编写。

    November 22, 2018

    FreeBSD 13.1-RELEASE

    dtrace.1

    DTRACE(1)

    DTRACE(1)

    FreeBSD General Commands Manual

    DTRACE(1)

    名称

    dtrace —

    动态跟踪编译器和跟踪实用程序

    dtrace [-32 | -64] [-aACeFGhHlqSvVwZ] [-b bufsz] [-c cmd] [-D name [=value]] [-I path] [-L path] [-o output] [-s script] [-U name] [-x arg [=value]] [-X

    DTrace 是从 Solaris 移植的综合动态跟踪框架。 DTrace 提供了一个强大的基础架构,允许管理员、开发人员和服务人员简明扼要地回答有关操作系统和用户程序行为的任意问题。

    dtrace 命令为 DTrace 工具提供的基本服务提供通用接口,包括:

    • 列出 DTrace 当前发布的探测器和提供程序集的选项

    • 使用任何探针描述说明符(提供者、模块、功能、名称)直接启用探针的选项

    • 运行 D 编译器并编译一个或多个 D 程序文件或直接在命令行上编写的程序的选项

    • 生成匿名跟踪程序的选项

    您可以使用 dtrace 来创建 D 脚本,方法是在 shebang 声明中使用它来创建解释器文件。 您还可以使用 dtrace 尝试编译 D 程序并确定它们的属性,而无需使用 -e 选项实际启用跟踪。

    -P -、 -m -、 -f -、 -n 和 -i 选项接受的参数可以包括用 predicate 括起来的可选 D 语言谓词和用大括号括起来的可选 D 语言 action 语句列表。 必须适当引用命令行上指定的 D 程序代码以避免 shell 解释元字符。

    支持以下选项:

    |

    D 编译器使用操作系统内核的本机数据模型生成程序。 如果指定了 -32 选项, dtrace 会强制 D 编译器使用 32 位数据模型编译 D 程序。 如果指定了 -64 选项, dtrace 将强制 D 编译器使用 64 位数据模型编译 D 程序。 这些选项通常不是必需的,因为 dtrace 选择本机数据模型作为默认值。 数据模型影响整数类型的大小和其他语言属性。 为任一数据模型编译的 D 程序可以在 32 位和 64 位内核上执行。 -32 和 -64 选项还确定由 -G 选项生成的 elf(5) 文件格式(ELF32 或 ELF64)。

    声明匿名跟踪状态并显示跟踪数据。 您可以将 -a 选项与 -e 选项结合使用,以强制 dtrace 在使用匿名跟踪状态后立即退出,而不是继续等待新数据。

    生成用于匿名跟踪的指令并将它们写入 /boot/dtrace.dof 。 此选项构造一组 dtrace 配置文件指令以启用指定的探针进行匿名跟踪,然后退出。 默认情况下, dtrace 尝试将指令存储到文件 /boot/dtrace.dof 。 可以使用 -o 选项修改此行为以指定备用输出文件。

    bufsz

    将主体跟踪缓冲区大小设置为 bufsz 。 跟踪缓冲区大小可以包括任何大小后缀 k、m、g 或 t。 如果无法分配缓冲区空间, dtrace 会根据 bufresize 属性的设置尝试减小缓冲区大小或退出。

    cmd

    运行指定的命令 cmd 并在完成后退出。 如果命令行上存在多个 -c 选项,则 dtrace 会在所有命令退出时退出,并在每个子进程终止时报告其退出状态。 第一个命令的进程 ID 可用于命令行上指定的任何 D 程序,或通过 $target 宏变量使用 -s 选项。

    在编译 D 程序之前,对它们运行 C 预处理器 cpp(1) 。 您可以使用 -D -、 -U -、 -I 和 -H 选项将选项传递给 C 预处理器。 如果使用 -X 选项,则可以选择符合 C 标准的程度。 有关调用 C 预处理器时 D 编译器定义的标记集的描述,请参见 -X 。

    name [=value]

    调用 cpp(1) 时定义 name 使用 -C 选项启用)。 如果您指定附加 value, 则会为名称分配相应的值。 此选项将 -D 选项传递给每个 cpp(1) 调用。

    在编译任何请求并使用匿名跟踪状态 (-a 选项)但在启用任何探测之前退出。 您可以将此选项与 -a 选项结合使用以打印匿名跟踪数据并退出。 您还可以将此选项与 D 编译器选项结合使用。 这种组合验证程序编译时没有实际执行它们并启用相应的检测。

    [[provider:] module:] function [[predicate] action]

    指定要跟踪或列出的函数名称 (-l 选项)。相应的参数可以包括任何探测描述形式 provider:module:function, module:function, 或 function 。 未指定的探测描述字段留空,并匹配任何探测,无论这些字段中的值如何。 如果描述中没有指定除 function 以外的限定符,则匹配具有相应 function 的所有探测器。 -f 参数可以以可选的 D 探测子句作为后缀。 您可以一次在命令行上指定多个 -f 选项。

    通过识别函数入口和返回来合并跟踪输出。 函数入口探测报告是缩进的,它们的输出以 ‘->’ 为前缀。 函数返回探测报告是未缩进的,它们的输出以 ‘<-’ 为前缀。 系统调用入口探测报告是缩进的,它们的输出以 ‘=>’ 为前缀。 系统调用返回探测报告是未缩进的,它们的输出以 ‘<=’ 为前缀。

    生成包含嵌入式 DTrace 程序的 ELF 文件。 程序中指定的 DTrace 探针保存在可重定位的 ELF 对象中,该对象可以链接到另一个程序中。 如果存在 -o 选项,则使用指定为此操作数的参数的路径名保存 ELF 文件。 如果 -o 选项不存在并且 DTrace 程序包含一个名为 filename.d 的文件,则使用名称 filename.o 保存 ELF 文件。 否则,ELF 文件将使用名称 d.out 保存。

    生成一个头文件,其中包含与指定提供程序定义中的探针相对应的宏。 该选项应该用于生成包含在其他源文件中的头文件,以供以后与 -G 选项一起使用。 如果存在 -o 选项,则使用指定为该选项参数的路径名保存头文件。 如果 -o 选项不存在并且 DTrace 程序包含在名为 filename.d 的文件中,则使用名称 filename.h 保存头文件。

    调用 cpp(1) 时打印包含文件的路径名(使用 -C 选项启用)。 此选项将 -H 选项传递给每个 cpp(1) 调用,使其显示路径名列表,每行一个,以显示标准错误。

    probe-id [[predicate] action]

    指定要跟踪或列出的探测标识符 (probe-id) (l 选项)。 您可以使用十进制整数指定探测 ID,如 `dtrace -l` 所示。 -i 参数可以以可选的 D 探测子句作为后缀。 您一次可以指定多个 -i 选项。

    path

    调用 cpp(1) 使用 -C 选项启用)时,将指定的目录 path 添加到 #include 文件的搜索路径。 此选项将 -I 选项传递给每个 cpp(1) 调用。 指定的 path 被插入到默认目录列表之前的搜索路径中。

    列出探针而不是启用它们。 如果指定了 -l 选项,则 dtrace 会生成与使用 -P -、 -m -、 -f -、 -n -、 -i 和 -s 选项给出的描述相匹配的探测报告。 如果未指定这些选项,则此选项列出所有探测。

    path

    将指定的目录 path 添加到 DTrace 库的搜索路径中。 DTrace 库用于包含编写 D 程序时可以使用的通用定义。 指定 path 添加在默认库搜索路径之后。

    [provider:] module [[predicate] action]

    指定要跟踪或列出的模块名称 (-l 选项)。 相应的参数可以包括任何探测描述形式 provider:module 或 module 。 未指定的探测描述字段留空,并匹配任何探测,无论这些字段中的值如何。 如果描述中没有指定除 module 以外的限定符,则匹配具有相应 module 的所有探测器。 -m 参数可以以可选的 D 探测子句作为后缀。 一次可以在命令行上指定多个 -m 选项。

    [[[provider:] module:] function:] name [[predicate] action]

    指定要跟踪或列出的探测名称 (-l 选项)。 相应的参数可以包括任何探测描述形式 provider:module:function:name 、 module:function:name, function:name 或 name 。 未指定的探测描述字段留空,并匹配任何探测,无论这些字段中的值如何。 如果描述中没有指定除 name 之外的限定符,则匹配具有相应 name 的所有探测器。 -n 参数可以以可选的 D 探测子句作为后缀。 一次可以在命令行上指定多个 -n- 选项。

    output

    为 -A -、 -G 和 -l 选项或跟踪数据本身指定 output 文件。 如果存在 -A 选项但不存在 -o ,则默认输出文件为 /boot/dtrace.dof 。 如果存在 -G 选项并且 -s 选项的参数的格式为 filename.d 而 -o 不存在,则默认输出文件为 filename.o 。 否则默认输出文件是 d.out 。

    pid

    获取指定的进程 ID pid ,缓存其符号表,并在完成后退出。 如果命令行上存在多个 -p 选项,则 dtrace 会在所有命令退出后退出,并在每个进程终止时报告其退出状态。 第一个进程 ID 可用于在命令行上指定的任何 D 程序或通过 $target 宏变量使用 -s 选项。

    provider [[predicate] action]

    指定要跟踪或列出的提供程序名称 (-l 选项)。其余的探测描述字段模块、函数和名称留空,并匹配任何探测,无论这些字段中的值如何。 -P 参数可以以可选的 D 探测子句作为后缀。 您可以一次在命令行上指定多个 -P 选项。

    设置静音模式。 dtrace 抑制消息,例如与指定选项和 D 程序匹配的探测器数量,并且不打印列标题、CPU ID、探测器 ID 或在输出中插入换行符。 只有由 D 程序语句(如 ‘dtrace()’ 和 ‘printf()’ 跟踪和格式化的数据才会显示到标准输出。

    script

    编译指定的 D 程序源文件。 如果存在 -e 选项,则编译程序但不启用检测。 如果存在 -l 选项,则编译程序并列出与其匹配的探针集,但不启用检测。 如果 -e -、 -l -、 -G 或 -A 都不存在,则启用 D 程序指定的检测并开始跟踪。

    显示 D 编译器中间代码。 D 编译器生成为每个 D 程序生成的中间代码到标准错误的报告。

    name

    调用 cpp(1) 时取消定义指定的 name (使用 -C 选项启用)。 此选项将 -U 选项传递给每个 cpp(1) 调用。

    设置详细模式。 如果指定了 -v 选项, dtrace 会生成一个程序稳定性报告,显示指定 D 程序的最低接口稳定性和依赖性级别。

    报告 dtrace 支持的最高 D 编程接口版本。 版本信息被打印到标准输出并且 dtrace 命令退出。

    允许在使用 -s -、 -P -、 -m -、 -f -、 -n 或 -i 选项指定的 D 程序中执行破坏性操作。 如果未指定 -w 选项,则 dtrace 不允许编译或启用包含破坏性操作的 D 程序。

    arg [=value]

    启用或修改 DTrace 运行时选项或 D 编译器选项。 布尔选项通过指定它们的名称来启用。 带有值的选项是通过用等号 (=) 分隔选项名称和值来设置的。

    size 参数可以后缀为 K 、 M 、 G 或 T (大写或小写)之一,以分别表示千字节、兆字节、千兆字节或太字节的倍数。

    time 参数可以以 ns 、 nsec 、 us 、 usec 、 ms 、 msec 、 s 、 sec 、 m 、 min 、 h 、 hour 、 d 、 day 、

    aggrate=time

    聚合读取率。

    aggsize=size

    聚合缓冲区的大小。

    bufpolicy=fill|switch|ring

    指定主体缓冲区的缓冲区策略。

    bufresize=auto|manual

    缓冲区大小调整策略。

    bufsize=size

    每个 CPU 主要缓冲区的大小。 与 -b 标志相同。

    cleanrate=time

    清洁率。 必须以 “hz” 后缀为每秒数指定。

    cpu=scalar

    指定启用跟踪的 CPU。

    defaultargs

    允许引用未指定的宏参数。

    destructive

    允许破坏性行为。 与 -w 标志相同。

    dynvarsize=size

    动态变量空间的大小。

    flowindent

    打开流动缩进。 与 -F 标志相同。

    grabanon

    声明匿名状态。 与 -a 标志相同。

    jstackframes=scalar

    jstack() 的默认堆栈帧数。

    jstackstrsize=scalar

    jstack() 的默认字符串空间大小。

    nspec=scalar

    推测的数量。

    quiet

    设置静音模式。 与 -q 标志相同。

    specsize=size

    推测缓冲区的大小。

    strsize=size

    字符串的最大大小。

    stackframes=scalar

    执行 stack() 操作时展开的最大内核空间堆栈帧数。

    stackindent=scalar

    缩进 stack() 和 ustack() 输出时使用的空白字符数。

    statusrate=time

    状态检查率。

    switchrate=time

    缓冲区切换速率。

    ustackframes=scalar

    执行 ustack() 操作时要展开的最大用户空间堆栈帧数。

    a | | |

    指定调用 cpp(1) 时应选择的 ISO C 标准的符合程度(使用 -C 选项启用)。 -X 选项参数会根据参数字母的值影响 __STDC__ 宏的值和存在。

    -X 选项支持以下参数:

    a

    默认。 ISO C 和 K&R 兼容性扩展,具有 ISO C 要求的语义更改。 如果未指定 -X ,这是默认模式。 当 cpp(1) 与 -Xa 选项一起调用时,预定义宏 __STDC__ 的值为 0。

    c

    一致性。 严格符合 ISO C,没有 K&R C 兼容性扩展。 当 cpp(1) 与 -Xc 选项一起调用时,预定义宏 __STDC__ 的值为 1。

    s

    仅限 K&R C。 结合 -Xs 选项调用 cpp(1) 时,未定义宏 __STDC__。

    t

    过渡。 ISO C 加 K&R C 兼容性扩展,无需 ISO C 要求的语义更改。 当 cpp(1) 与 -Xt 选项一起调用时,预定义宏 __STDC__ 的值为 0。

    由于 -X 选项仅影响 D 编译器调用 C 预处理器的方式,因此 -Xa 和 -Xt 选项从 D 的角度来看是等效的,并且提供这两个选项只是为了便于重用来自 C 构建环境的设置。

    无论 -X 模式如何,始终指定以下附加 C 预处理器定义并且在所有模式下都有效:

    • __sun

    • __unix

    • __SVR4

    • __sparc (仅在 SPARC 系统上)

    允许与零个探测匹配的探测描述。 如果未指定 -Z 选项,如果在 D 程序文件 (-s 选项)或命令行 (-P -、 -m -、 -f -、 -n 或 -i )中指定了任何探测描述,则 dtrace 将报告错误并退出 options) 包含与任何已知探测不匹配的描述。

    可以在 dtrace 命令行上指定零个或多个附加参数来定义一组宏变量等)。 附加参数可以在使用 -s 选项或命令行指定的 D 程序中使用。

    /boot/dtrace.dof

    匿名跟踪指令的文件。

    返回以下退出状态:

    0

    顺利完成。

    对于 D 程序请求,退出状态 0 表示程序已成功编译、探测器已成功启用或匿名状态已成功检索。 即使指定的跟踪请求遇到错误或丢弃, dtrace 也会返回 0。

    1

    发生错误。

    对于 D 程序请求,退出状态为 1 表示程序编译失败或无法满足指定的请求。

    2

    指定了无效的命令行选项或参数。

    dtrace 实用程序首次出现在 FreeBSD 7.1 中。

    cpp(1) 、 elf(5) 、 SDT(9) 动态跟踪指南.

    February 25, 2020

    FreeBSD 13.1-RELEASE

    num]] [
    -``-label
    ] [
    -
    -line-buffered
    ] [
    -``-null
    ] [pattern] [file ...]

    $ grep -c FOO myfile

  • 与上面相同,但忽略大小写:

    $ grep -c -i FOO myfile

  • 在行首查找所有出现的模式 ‘.Pp’ :

    $ grep '^\.Pp' myfile

    撇号确保整个表达式由 grep 而不是用户的 shell 评估。 插入符号 ‘^’ 匹配行首的空字符串,而 ‘\’ 转义 ‘.’, 否则将匹配任何字符。

  • 查找文件中不包含单词 ‘foo’ 或 ‘bar’ 的所有行:

    $ grep -v -e 'foo' -e 'bar' myfile

  • 使用扩展正则表达式仔细阅读文件 ‘calendar’ 以查找 19、20 或 25:

    $ egrep '19|20|25' calendar

  • 显示匹配行和包含模式 ‘FIXME’ 的 ‘*.h’ 文件的名称。 从 /usr/src/sys/arm 目录递归搜索

    $ grep -H -R FIXME --include=*.h /usr/src/sys/arm/

  • 与上面相同,但仅显示匹配文件的名称:

    $ grep -l -R FIXME --include=*.h /usr/src/sys/arm/

  • 显示包含文本 ‘foo’ 的行。 输出的匹配部分是彩色的,每一行都以行号和匹配行的文件中的偏移量作为前缀。

    $ grep -b --colour -n foo myfile

  • 显示与从标准输入读取的扩展正则表达式模式匹配的行:

    $ echo -e 'Free\nBSD\nAll.*reserved' | grep -E -f - myfile

  • 显示 pciconf(8) 命令输出中与指定扩展正则表达式匹配的行以及三行前导上下文和一行尾随上下文:

    $ pciconf -lv | grep -B3 -A1 -E 'class.*=.*storage'

  • 抑制任何输出并使用退出状态显示适当的消息:

    $ grep -q foo myfile && echo File matches

  • 概要
    描述
    -A
    -a
    -B
    -b
    -C
    -c
    -D
    -d
    -E
    -e
    -F
    -f
    -G
    -H
    -h
    -I
    -i
    -L
    -l
    -m
    -n
    -O
    -o
    -p
    -q
    -R
    -S
    -s
    -U
    -u
    -V
    -v
    -w
    -x
    -y
    -z
    binary
    without-match
    text
    退出状态
    0
    1
    >1
    实例
    参见
    标准
    历史
    概要
    描述
    -a
    -C
    -f
    -k
    -M
    -m
    -O
    -S
    -s
    宏键
    -i
    宏键
    Nm
    Nd
    arch
    sec
    Sh
    Ss
    Xr
    Rs
    Fl
    Cm
    Ar
    Ic
    Ev
    Pa
    Lb
    In
    Ft
    Fn
    Fa
    Vt
    Va
    Dv
    Er
    Ev
    An
    Lk
    Mt
    Cd
    Ms
    Tn
    Em
    Sy
    Li
    St
    At
    Bx
    Bsx
    Nx
    Fx
    Ox
    Dx
    Fa
    Fn
    In
    Vt
    环境
    MANPAGER
    MANPATH
    PAGER
    文件
    退出状态
    实例
    参见
    标准
    历史
    作者
    [email protected]
    [email protected]
    a
    |
    c
    |
    s
    |
    t
    ] [
    -p
    pid] [
    -P
    provider [[predicate] action]] [
    -m
    [provider:] module [[predicate] action]] [
    -f
    [[provider:] module:] function [[predicate] action]] [
    -n
    [[[provider:] module:] function:] name [[predicate] action]] [
    -i
    probe-id [[predicate] action]]

    生成程序稳定性报告的选项

  • 修改 DTrace 跟踪和缓冲行为并启用其他 D 编译器功能的选项

  • hz
    之一作为后缀。 如果没有指定后缀,
    hz
    将用作单位。

    __sparcv9 (仅在编译 64 位程序时在 SPARC 系统上)

  • __i386 (仅在 x86 系统上编译 32 位程序时)

  • __amd64 (仅在 x86 系统上编译 64 位程序时)

  • __`uname -s`_`uname -r` (例如, ‘FreeBSD_9.2-RELEASE 。’

  • __SUNW_D=1

  • __SUNW_D_VERSION=0xMMmmmuuu

    其中 MM 是十六进制的主释放值, mmm 是十六进制的次释放值, uuu 是十六进制的微释放值。

  • 概要
    描述
    选项
    -32
    -64
    -a
    -A
    -b
    -c
    -C
    -D
    -e
    -f
    -F
    -G
    -h
    -H
    -i
    -I
    -l
    -L
    -m
    -n
    -o
    -p
    -P
    -q
    -s
    -S
    -U
    -v
    -V
    -w
    -x
    -X
    c
    s
    t
    -Z
    运算符
    文件
    退出状态
    历史
    参见

    edit.1

    ee(1)

    ee(1)

    ee(1)

    名称

    ee - 简单的编辑器

    ee [-e] [-i] [-h] [+#] [file ...] ree [-e] [-i] [-h] [+#] [file ...]

    描述 ee 是一个简单的面向屏幕的文本编辑器。 它始终处于文本插入模式,除非终端底部有提示,或者存在菜单(在终端中间的框中)。 命令 ree 与 ee, 相同,但仅限于编辑命名文件(不允许文件操作或 shell 转义)。

    具有类似用户友好品质但功能更多的编辑器可用,称为 aee 。

    为了使 ee 正常工作,必须设置环境变量 TERM 来指示正在使用的终端类型。 例如,对于 HP 700/92 终端, TERM 变量应设置为 "70092" 。 如果您需要更多信息,请咨询您的系统管理员。

    命令行提供以下选项:

    -e

    关闭制表符到空格的扩展。

    -i

    关闭终端顶部信息窗口的显示。

    -h

    关闭窗口和菜单边框的突出显示(提高某些终端的性能)。

    +#

    启动时将光标移动到 '#' 行。-

    要执行插入文本以外的任何操作,用户必须使用控制键( Control 键,由 "^"表示,与字母键一起按下,例如,^a)和键盘上可用的功能键(例如 Next Page、 Prev Page、 箭头键等)。

    由于并非所有终端都具有功能键,因此 ee 具有分配给控制键的基本光标移动功能以及键盘上更直观的键(如果可用)。 例如,要向上移动光标,用户可以使用向上箭头键或 ^u 。

    ^a 提示输入要插入的字符的十进制值。 ^b 移动到文本底部。 ^c 获取命令提示符。 ^d 向下移动光标。 ^e 提示输入要搜索的字符串。 ^f 取消删除最后一个删除的字符。 ^g 移动到行首。 ^h 退格。 ^i 制表符。 ^j 插入换行符。 ^k 删除光标所在的字符。 ^l 向左移动光标。 ^m 插入换行符。 ^n 移至下一页。 ^o 移动到行尾。 ^p 移至上一页。 ^r 向右移动光标。 ^t 移动到文本的顶部。 ^u 向上移动光标。 ^v 取消删除最后一个删除的单词。 ^w 删除从光标位置开始的单词。 ^x 搜索。 ^y 从光标位置删除到行尾。 ^z 取消删除最后删除的行。 ^[ (ESC) 弹出菜单。

    由于许多 shell 提供 Emacs 模式(用于光标移动和其他编辑操作),因此提供了一些可能对熟悉这些绑定的人更有用的绑定。 这些可通过 settings 菜单或初始化文件(见下文)访问。 映射如下:

    ^a 移动到行首。 ^b 后退 1 个字符。 ^c 命令提示符。 ^d 删除光标所在的字符。 ^e 行尾。 ^f 向前 1 个字符。 ^g 返回上一页。 ^h 退格。 ^i 制表符。 ^j 取消删除最后删除的字符。 ^k 删除行。 ^l 取消删除最后删除的行。 ^m 插入换行符。 ^n 移动到下一行。 ^o 提示输入要插入的字符的十进制值。 ^p 上一行。 ^r 恢复最后删除的单词。 ^t 移动到文本的顶部。 ^u 移动到文本的底部。 ^v 移至下一页。 ^w 删除从光标位置开始的单词。 ^y 提示输入要搜索的字符串。 ^z 下一个词。 ^[ (ESC) 弹出菜单。

    Next Page

    移至下一页。

    Prev Page

    移至上一页。

    Delete Char

    删除光标所在的字符。

    Delete Line

    从光标处删除到行尾。

    Insert line

    在光标位置插入换行符。

    Arrow keys

    沿指示的方向移动光标。

    某些操作需要的信息多于单次击键所能提供的信息。 对于最基本的操作,有一个菜单可以通过按 ESC 键获得。 通过获取命令提示符 (^c) 并键入以下命令之一,可以执行相同的操作以及更多操作。

    !cmd

    在 shell 中执行 cmd 。

    0-9

    移动到指示的行。

    case

    使搜索区分大小写。

    character

    显示光标处字符的 ascii 值。

    exit

    保存编辑的文本,然后离开编辑器。

    expand

    将制表符扩展到空格。

    file

    打印文件名。

    help

    显示帮助屏幕。

    line

    显示当前行号。

    nocase

    使搜索不区分大小写(默认)。

    noexpand

    按下 TAB 键时不要将制表符展开为空格。

    quit

    离开编辑器而不保存更改。

    read file

    读取命名 file 。

    write file

    将文本写入指定 file 。

    可以通过按 escape 键(或 ^[ 如果没有 escape 键)来获得弹出菜单。 在菜单中时,可以使用退出键离开菜单而不进行任何操作。 使用向上和向下箭头键,或 ^u 向上移动和 ^d 向下移动以移动到菜单中的所需项目,然后按 return 键执行指示的任务。

    每个菜单项的左侧是一个字母,如果在键盘上按下相应的字母,则选择该菜单项。

    ee 中的主菜单如下:

    leave editor

    如果进行了更改,用户将获得一个菜单,提示是否应保存更改。

    help

    显示一个帮助屏幕,其中包含所有键盘操作和命令。

    file operations

    弹出一个菜单,用于选择是否读取文件、写入文件或保存编辑器的当前内容,以及将编辑器的内容发送到打印命令(参见 从文件初始化 ee 部分)。

    redraw screen

    如果屏幕已损坏,则提供一种重新绘制屏幕的方法。

    settings

    显示操作模式的当前值和右边距。 当光标在特定项目上时按回车键,可以更改值。 要离开此菜单,请按 escape 键。 (请参阅下面的 Modes 。)

    search

    弹出一个菜单,用户可以在其中选择输入要搜索的字符串,或者搜索已经输入的字符串。

    miscellaneous

    弹出一个菜单,允许用户设置当前段落的格式、执行 shell 命令或检查编辑器中文本的拼写。

    段落由以下文本块为 ee 定义:

    • 文件开始或结束。

    • 没有字符或只有空格和/或制表符的行。

    • 以句点 ('.') 或右尖括号 ('>') 开头的行。

    可以通过两种方式格式化段落:通过选择 format paragraph 菜单项,或通过设置 ee 来自动格式化段落。 自动模式可以通过菜单设置,也可以通过初始化文件设置。

    ee 中的文本操作分为三种状态:自由格式、边距、自动格式化。

    "Free-form" 最适合用于编程之类的事情。 对行的长度没有限制,也不会进行格式化。

    "Margins" 允许用户输入文本而不必担心超出右边距(右边距可以在 settings 菜单中设置,默认为终端的右边距)。 这是允许 format paragraph 菜单项工作的模式。

    "Automatic formatting" 提供类似文字处理器的行为。 用户可以输入文本,而 ee 将确保每次用户在输入或删除文本后插入空格时,整个段落都适合终端的宽度。 为了进行自动格式化,还必须启用边距观察。

    是一个“无模式”编辑器(它一直处于文本插入模式),但它所做的一些事情还是有模式的。 这些包括:

    tab expansion

    制表符可以作为单个制表符插入,也可以替换为空格。

    case sensitivity

    搜索操作可以对字符是大写还是小写敏感,或者完全忽略大小写。

    margins observed

    线条可以在右边距被截断,也可以永远延伸。

    auto paragraph formatting

    在输入文本时,编辑器可以尝试使其在屏幕宽度内看起来相当不错。

    eightbit characters

    切换八位字符是显示为尖括号中的值(例如 "<220>")还是字符。

    info window

    可以显示或不显示显示可以执行的键盘操作的窗口。

    emacs keys

    控制键可以被赋予类似于 emacs 的绑定,也可以不被赋予。

    16 bit characters

    切换 16 位字符是作为一个 16 位数量还是两个 8 位数量处理。 这主要适用于中国大 5 代码集。

    您可以通过初始化文件(见下文)或菜单(见上文)设置这些模式。

    有两种方法可以从 ee 检查文本中的拼写。 一种是使用传统的 spell(1) 命令,另一种是使用可选的 ispell(1) 命令。

    一种是使用传统的 spell 命令,另一种是使用可选的 ispell 命令。 使用拼写,无法识别的单词将被放置在文件的顶部。 对于 ispell 选项,文件被写入磁盘,然后在文件上运行 ispell ,一旦 ispell 完成对文件的更改,文件就会读回。

    用户可以选择打印编辑器内容的菜单项。 ee 通过管道将编辑器中的文本传递给初始化命令 printcommand 指定的命令(请参阅下面的 从文件初始化 ee 部分)。默认是将内容发送到 "lp"。

    用户分配给 printcommand 的任何内容都必须从标准输入中获取输入。 有关详细信息,请咨询您的系统管理员。

    可以通过在 miscellaneous 菜单中选择 shell command 项,或通过在 command: 提示符下在要执行的命令前放置感叹号("!")从 ee 中执行 shell 命令。 此外,用户可以使用左尖括号 (">") 将编辑缓冲区的内容引导到 shell 操作(通过管道),然后使用 "!" 以及要执行的 shell 命令。 shell 操作的输出也可以通过在感叹号前使用右尖括号 ("<") 定向到编辑缓冲区。 这些甚至可以一起用于将输出发送到 shell 操作并将结果读回编辑器。 因此,如果编辑器包含要排序的单词列表,则可以通过在命令提示符下键入以下内容来对它们进行排序:

    ><!sort

    这会将编辑器的内容通过管道发送到 sort 实用程序,结果将被放置到当前光标位置的编辑缓冲区中。 用户必须删除旧信息。

    由于不同的用户有不同的偏好, ee 允许一些轻微的可配置性。 ee 的初始化文件有三个可能的位置:文件 /usr/share/misc/init.ee 、用户主目录中的文件 .init.ee 或当前目录中的文件 .init.ee 如果不同于主目录)。 这允许系统管理员在系统范围内为用户设置一些首选项(例如, print 命令),并且用户可以自定义特定目录的设置(例如用于通信的目录和用于编程的不同目录)。

    首先读取文件 usr/share/misc/init.ee ,然后是 $HOME/.init.ee ,然后是 .init.ee ,其中最近读取的文件指定的设置优先。

    在初始化文件中可以输入以下项目:

    case

    将搜索设置为区分大小写。

    nocase

    将搜索设置为不区分大小写(默认)。

    expand

    使 ee 将制表符扩展到空格(默认)。

    noexpand

    使 ee 将制表符作为单个字符插入。

    info

    终端顶部会显示一个小信息窗口(默认)。

    noinfo

    关闭信息窗口的显示。

    margins

    当光标超出用户在插入文本时设置的右边距时,使 ee 截断右边距处的行(默认)。

    nomargins

    允许线条超出右边距。

    autoformat

    导致 ee 在文本插入时自动尝试格式化当前段落。

    noautoformat

    关闭自动段落格式(默认)。

    printcommand

    允许设置打印命令(默认值: "lp")。

    rightmargin

    用户可以为右边距选择一个值(屏幕上的第一列为零)。

    highlight

    打开突出显示信息窗口和菜单的边框(默认)。

    nohighlight

    关闭信息窗口和菜单边框的突出显示。

    eightbit

    打开八位字符的显示。

    noeightbit

    关闭八位字符的显示(它们在尖括号内显示为十进制值,例如 "<220>")。

    16bit

    打开对 16 位字符的处理。

    no16bit

    关闭对 16 位字符的处理。

    emacs

    打开 emacs 键绑定。

    noemacs

    关闭 emacs 键绑定。

    在 settings 菜单中使用此条目时,用户可以选择将编辑器的当前配置(请参阅上面的 从文件初始化 ee )保存到当前目录或用户主目录中名为 .init.ee 的文件中。 如果名为 .init.ee 的文件已经存在,它将被重命名为 .init.ee.old 。

    本材料按“原样”提供。 对本材料不提供任何形式的保证,包括但不限于对适销性和特定用途适用性的默示保证。 Hewlett-Packard 和 Hugh Mahon 均不对此处包含的错误负责,也不对与提供、执行或使用本材料有关的附带或间接损害负责。 Hewlett-Packard 和 Hugh Mahon 均不对本软件或文档的使用或可靠性承担任何责任。 该软件和文档完全不受支持。 没有可用的支持合同。 Hewlett-Packard 未对任何程序或文档进行任何质量保证。 您可能会发现材料的质量不如支持的材料

    始终在编辑之前制作不易复制的文件副本。 尽早保存文件,并经常保存。

    ee 支持单字节字符代码集(八位干净),或中文 Big-5 代码集。 (其他多字节代码集也可能起作用,但 Big-5 起作用的原因是一个两字节字符在屏幕上也占据了两列。)

    对于较慢的系统,自动段落格式化操作可能太慢。

    /usr/share/misc/init.ee- $HOME/.init.ee- .init.ee

    ee 软件由 Hugh Mahon 开发。

    本软件和文档包含受版权保护的专有信息。 保留所有权利。

    版权所有 (c) 1990, 1991, 1992, 1993, 1995, 1996, 2001 Hugh Mahon.

    termcap(4), terminfo(4), environ(5), spell(1), ispell(1), lp(1), aee(1)

    概要
    描述
    选项
    控制键
    EMACS 键模式
    功能键
    命令
    菜单操作
    段落格式
    模式
    拼写检查
    打印编辑器的内容
    Shell 操作
    从文件初始化 ee
    保存编辑器配置
    注意事项
    国际代码集支持
    警告
    文件
    作者
    参见

    alloc.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    bg.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    bindkey.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称

    alias.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    c++.1

    CLANG(1)

    CLANG(1)

    Clang

    CLANG(1)

    名称

    clang - Clang C、C++ 和 Objective-C 编译器

    clang [options] filename ...

    clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:

    驱动

    clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。

    预处理

    此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。

    解析和语义分析

    此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).

    代码生成和优化

    此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。

    Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。

    汇编器

    此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。

    链接器

    此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。

    Clang 静态分析器

    静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。

    -E

    运行预处理器阶段。

    -fsyntax-only

    运行预处理器、解析器和类型检查阶段。

    -S

    运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。

    -c

    运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。

    no stage selection option

    如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。

    -x

    将后续输入文件视为具有类型语言。

    -std=

    指定要编译的语言标准。

    C 语言支持的值为:

    c89 c90 iso9899:1990

    ISO C 1990

    iso9899:199409

    ISO C 1990 修订版 1

    gnu89 gnu90

    带有 GNU 扩展的 ISO C 1990

    c99 iso9899:1999

    ISO C 1999

    gnu99

    具有 GNU 扩展的 ISO C 1999

    c11 iso9899:2011

    ISO C 2011

    gnu11

    带有 GNU 扩展的 ISO C 2011

    c17 iso9899:2017

    ISO C 2017

    gnu17

    具有 GNU 扩展的 ISO C 2017

    默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。

    C++ 语言支持的值为:

    c++98 c++03

    ISO C++ 1998 及修正

    gnu++98 gnu++03

    ISO C++ 1998 与修正和 GNU 扩展

    c++11

    ISO C++ 2011 修订版

    gnu++11

    带有修正和 GNU 扩展的 ISO C++ 2011

    c++14

    ISO C++ 2014 修订版

    gnu++14

    带有修正和 GNU 扩展的 ISO C++ 2014

    c++17

    ISO C++ 2017 修订版

    gnu++17

    带有修正和 GNU 扩展的 ISO C++ 2017

    c++2a

    ISO C++ 2020 工作草案

    gnu++2a

    具有 GNU 扩展的 ISO C++ 2020 工作草案

    默认的 C++ 语言标准是 gnu++14.

    OpenCL 语言支持的值为:

    cl1.0

    OpenCL 1.0

    cl1.1

    OpenCL 1.1

    cl1.2

    OpenCL 1.2

    cl2.0

    OpenCL 2.0

    默认的 OpenCL 语言标准是 cl1.0 。

    CUDA 语言支持的值为:

    cuda

    NVIDIA CUDA(tm)

    -stdlib=

    指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。

    -rtlib=

    指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。

    -ansi

    与 -std=c89 相同

    -ObjC, -ObjC++

    将源输入文件分别视为 Objective-C 和 Object-C++ 输入。

    -trigraphs

    启用三元组。

    -ffreestanding

    指示该文件应针对独立环境而非托管环境进行编译。

    -fno-builtin

    禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。

    -fmath-errno

    表示数学函数应被视为更新 errno 。

    -fpascal-strings

    使用 "\pfoo" 启用对 Pascal 样式字符串的支持。

    -fms-extensions

    启用对 Microsoft 扩展的支持。

    -fmsc-version=

    设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。

    -fborland-extensions

    启用对 Borland 扩展的支持。

    -fwritable-strings

    使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。

    -flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions

    允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:

    • none: 不允许向量之间的隐式转换

    • integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播

    • all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播

    如果未指定,则默认为 integer 。

    -fblocks

    启用 "Blocks" 语言功能。

    -fobjc-abi-version=version

    选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。

    -fobjc-nonfragile-abi-version=

    选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。

    -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi

    启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。

    Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。

    -arch

    指定要构建的架构。

    -mmacosx-version-min=

    为 macOS 构建时,请指定应用程序支持的最低版本。

    -miphoneos-version-min

    为 iPhone OS 构建时,请指定应用程序支持的最低版本。

    --print-supported-cpus

    打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。

    -mcpu=?, -mtune=?

    --print-supported-cpus 的别名

    -march=

    指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。

    -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4

    指定要使用的优化级别:

    -O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。

    -O1 介于 -O0 和 -O2 之间。

    -O2 中等优化级别,可实现大多数优化。

    -O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)

    -Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。

    -Os 与 -O2 类似,具有额外的优化以减少代码大小。

    -Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。

    -Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。

    -O 相当于 -O2 。

    -O4 及以上

    目前相当于 -O3

    -g, -gline-tables-only, -gmodules

    控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:

    -g 生成调试信息。

    -gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。

    -gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。

    在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。

    -fstandalone-debug -fno-standalone-debug

    Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。

    -fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。

    -fexceptions

    启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。

    -ftrapv

    生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。

    -fvisibility

    此标志设置默认可见性级别。

    -fcommon, -fno-common

    此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。

    -ftls-model=

    设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。

    -flto, -flto=full, -flto=thin, -emit-llvm

    生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。

    -flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。

    -###

    打印(但不运行)为此编译运行的命令。

    --help

    显示可用选项。

    -Qunused-arguments

    不要为未使用的驱动程序参数发出任何警告。

    -Wa,

    将 args 中逗号分隔的参数传递给汇编器。

    -Wl,

    将 args 中逗号分隔的参数传递给链接器。

    -Wp,

    将 args 中逗号分隔的参数传递给预处理器。

    -Xanalyzer

    将 arg 传递给静态分析器。

    -Xassembler

    将 arg 传递给汇编程序。

    -Xlinker

    将 arg 传递给链接器。

    -Xpreprocessor

    将 arg 传递给预处理器。

    -o

    将输出写入文件。

    -print-file-name=

    打印文件的完整库路径。

    -print-libgcc-file-name

    打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。

    -print-prog-name=

    打印名称的完整程序路径。

    -print-search-dirs

    打印用于查找库和程序的路径。

    -save-temps

    保存中间编译结果。

    -save-stats, -save-stats=cwd, -save-stats=obj

    将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。

    -integrated-as, -no-integrated-as

    用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。

    -time

    计时单个命令。

    -ftime-report

    打印每个编译阶段的时序摘要。

    -v

    显示命令以运行和使用详细输出。

    -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length

    这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。

    -D=

    将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -U

    将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -include

    将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -I

    将指定目录添加到包含文件的搜索路径。

    -F

    将指定目录添加到框架包含文件的搜索路径。

    -nostdinc

    不要在标准系统目录或编译器内置目录中搜索包含文件。

    -nostdlibinc

    不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。

    -nobuiltininc

    不要在 clang 的内置目录中搜索包含文件。

    TMPDIR, TEMP, TMP

    依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。

    CPATH

    如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。

    环境变量中的空组件将被忽略。

    C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH

    这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。

    MACOSX_DEPLOYMENT_TARGET

    如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。

    要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。

    as(1), ld(1)

    由 Clang / LLVM 团队维护 ()

    2007-2020, Clang 团队

    2020-06-26

    10

    end.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    done.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    eval.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    export.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    builtins.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    command.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    goto.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    cc.1

    CLANG(1)

    CLANG(1)

    Clang

    CLANG(1)

    名称

    clang - Clang C、C++ 和 Objective-C 编译器

    clang [options] filename ...

    clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:

    驱动

    clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。

    预处理

    此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。

    解析和语义分析

    此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).

    代码生成和优化

    此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。

    Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。

    汇编器

    此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。

    链接器

    此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。

    Clang 静态分析器

    静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。

    -E

    运行预处理器阶段。

    -fsyntax-only

    运行预处理器、解析器和类型检查阶段。

    -S

    运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。

    -c

    运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。

    no stage selection option

    如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。

    -x

    将后续输入文件视为具有类型语言。

    -std=

    指定要编译的语言标准。

    C 语言支持的值为:

    c89 c90 iso9899:1990

    ISO C 1990

    iso9899:199409

    ISO C 1990 修订版 1

    gnu89 gnu90

    带有 GNU 扩展的 ISO C 1990

    c99 iso9899:1999

    ISO C 1999

    gnu99

    具有 GNU 扩展的 ISO C 1999

    c11 iso9899:2011

    ISO C 2011

    gnu11

    带有 GNU 扩展的 ISO C 2011

    c17 iso9899:2017

    ISO C 2017

    gnu17

    具有 GNU 扩展的 ISO C 2017

    默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。

    C++ 语言支持的值为:

    c++98 c++03

    ISO C++ 1998 及修正

    gnu++98 gnu++03

    ISO C++ 1998 与修正和 GNU 扩展

    c++11

    ISO C++ 2011 修订版

    gnu++11

    带有修正和 GNU 扩展的 ISO C++ 2011

    c++14

    ISO C++ 2014 修订版

    gnu++14

    带有修正和 GNU 扩展的 ISO C++ 2014

    c++17

    ISO C++ 2017 修订版

    gnu++17

    带有修正和 GNU 扩展的 ISO C++ 2017

    c++2a

    ISO C++ 2020 工作草案

    gnu++2a

    具有 GNU 扩展的 ISO C++ 2020 工作草案

    默认的 C++ 语言标准是 gnu++14.

    OpenCL 语言支持的值为:

    cl1.0

    OpenCL 1.0

    cl1.1

    OpenCL 1.1

    cl1.2

    OpenCL 1.2

    cl2.0

    OpenCL 2.0

    默认的 OpenCL 语言标准是 cl1.0 。

    CUDA 语言支持的值为:

    cuda

    NVIDIA CUDA(tm)

    -stdlib=

    指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。

    -rtlib=

    指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。

    -ansi

    与 -std=c89 相同

    -ObjC, -ObjC++

    将源输入文件分别视为 Objective-C 和 Object-C++ 输入。

    -trigraphs

    启用三元组。

    -ffreestanding

    指示该文件应针对独立环境而非托管环境进行编译。

    -fno-builtin

    禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。

    -fmath-errno

    表示数学函数应被视为更新 errno 。

    -fpascal-strings

    使用 "\pfoo" 启用对 Pascal 样式字符串的支持。

    -fms-extensions

    启用对 Microsoft 扩展的支持。

    -fmsc-version=

    设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。

    -fborland-extensions

    启用对 Borland 扩展的支持。

    -fwritable-strings

    使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。

    -flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions

    允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:

    • none: 不允许向量之间的隐式转换

    • integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播

    • all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播

    如果未指定,则默认为 integer 。

    -fblocks

    启用 "Blocks" 语言功能。

    -fobjc-abi-version=version

    选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。

    -fobjc-nonfragile-abi-version=

    选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。

    -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi

    启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。

    Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。

    -arch

    指定要构建的架构。

    -mmacosx-version-min=

    为 macOS 构建时,请指定应用程序支持的最低版本。

    -miphoneos-version-min

    为 iPhone OS 构建时,请指定应用程序支持的最低版本。

    --print-supported-cpus

    打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。

    -mcpu=?, -mtune=?

    --print-supported-cpus 的别名

    -march=

    指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。

    -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4

    指定要使用的优化级别:

    -O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。

    -O1 介于 -O0 和 -O2 之间。

    -O2 中等优化级别,可实现大多数优化。

    -O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)

    -Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。

    -Os 与 -O2 类似,具有额外的优化以减少代码大小。

    -Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。

    -Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。

    -O 相当于 -O2 。

    -O4 及以上

    目前相当于 -O3

    -g, -gline-tables-only, -gmodules

    控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:

    -g 生成调试信息。

    -gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。

    -gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。

    在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。

    -fstandalone-debug -fno-standalone-debug

    Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。

    -fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。

    -fexceptions

    启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。

    -ftrapv

    生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。

    -fvisibility

    此标志设置默认可见性级别。

    -fcommon, -fno-common

    此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。

    -ftls-model=

    设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。

    -flto, -flto=full, -flto=thin, -emit-llvm

    生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。

    -flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。

    -###

    打印(但不运行)为此编译运行的命令。

    --help

    显示可用选项。

    -Qunused-arguments

    不要为未使用的驱动程序参数发出任何警告。

    -Wa,

    将 args 中逗号分隔的参数传递给汇编器。

    -Wl,

    将 args 中逗号分隔的参数传递给链接器。

    -Wp,

    将 args 中逗号分隔的参数传递给预处理器。

    -Xanalyzer

    将 arg 传递给静态分析器。

    -Xassembler

    将 arg 传递给汇编程序。

    -Xlinker

    将 arg 传递给链接器。

    -Xpreprocessor

    将 arg 传递给预处理器。

    -o

    将输出写入文件。

    -print-file-name=

    打印文件的完整库路径。

    -print-libgcc-file-name

    打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。

    -print-prog-name=

    打印名称的完整程序路径。

    -print-search-dirs

    打印用于查找库和程序的路径。

    -save-temps

    保存中间编译结果。

    -save-stats, -save-stats=cwd, -save-stats=obj

    将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。

    -integrated-as, -no-integrated-as

    用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。

    -time

    计时单个命令。

    -ftime-report

    打印每个编译阶段的时序摘要。

    -v

    显示命令以运行和使用详细输出。

    -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length

    这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。

    -D=

    将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -U

    将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -include

    将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -I

    将指定目录添加到包含文件的搜索路径。

    -F

    将指定目录添加到框架包含文件的搜索路径。

    -nostdinc

    不要在标准系统目录或编译器内置目录中搜索包含文件。

    -nostdlibinc

    不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。

    -nobuiltininc

    不要在 clang 的内置目录中搜索包含文件。

    TMPDIR, TEMP, TMP

    依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。

    CPATH

    如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。

    环境变量中的空组件将被忽略。

    C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH

    这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。

    MACOSX_DEPLOYMENT_TARGET

    如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。

    要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。

    as(1), ld(1)

    由 Clang / LLVM 团队维护 ()

    2007-2020, Clang 团队

    2020-06-26

    10

    clang++.1

    CLANG(1)

    CLANG(1)

    Clang

    CLANG(1)

    clang - Clang C、C++ 和 Objective-C 编译器

    clang-cpp.1

    CLANG(1)

    CLANG(1)

    Clang

    CLANG(1)

    clang - Clang C、C++ 和 Objective-C 编译器

    break.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    bind.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    endif.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    elif.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    filetest.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    getopts.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    find.1

    FIND(1)

    FIND(1)

    FreeBSD General Commands Manual

    FIND(1)

    find —

    for.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    continue.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    endsw.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    glob.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    complete.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。

    概要
    描述
    选项
    阶段 选择选项
    语言选择和模式选项
    目标选择选项
    代码生成选项
    驱动程序选项
    诊断选项
    预处理器选项
    环境
    缺陷
    参见
    作者
    http://clang.llvm.org
    版权
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。

    概要
    描述
    选项
    阶段 选择选项
    语言选择和模式选项
    目标选择选项
    代码生成选项
    驱动程序选项
    诊断选项
    预处理器选项
    环境
    缺陷
    参见
    作者
    http://clang.llvm.org
    版权
    概要

    clang [options] filename ...

    描述

    clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:

    驱动

    clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。

    预处理

    此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。

    解析和语义分析

    此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).

    代码生成和优化

    此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。

    Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。

    汇编器

    此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。

    链接器

    此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。

    Clang 静态分析器

    静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。

    选项

    阶段 选择选项

    -E

    运行预处理器阶段。

    -fsyntax-only

    运行预处理器、解析器和类型检查阶段。

    -S

    运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。

    -c

    运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。

    no stage selection option

    如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。

    语言选择和模式选项

    -x

    将后续输入文件视为具有类型语言。

    -std=

    指定要编译的语言标准。

    C 语言支持的值为:

    c89 c90 iso9899:1990

    ISO C 1990

    iso9899:199409

    ISO C 1990 修订版 1

    gnu89 gnu90

    带有 GNU 扩展的 ISO C 1990

    c99 iso9899:1999

    ISO C 1999

    gnu99

    具有 GNU 扩展的 ISO C 1999

    c11 iso9899:2011

    ISO C 2011

    gnu11

    带有 GNU 扩展的 ISO C 2011

    c17 iso9899:2017

    ISO C 2017

    gnu17

    具有 GNU 扩展的 ISO C 2017

    默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。

    C++ 语言支持的值为:

    c++98 c++03

    ISO C++ 1998 及修正

    gnu++98 gnu++03

    ISO C++ 1998 与修正和 GNU 扩展

    c++11

    ISO C++ 2011 修订版

    gnu++11

    带有修正和 GNU 扩展的 ISO C++ 2011

    c++14

    ISO C++ 2014 修订版

    gnu++14

    带有修正和 GNU 扩展的 ISO C++ 2014

    c++17

    ISO C++ 2017 修订版

    gnu++17

    带有修正和 GNU 扩展的 ISO C++ 2017

    c++2a

    ISO C++ 2020 工作草案

    gnu++2a

    具有 GNU 扩展的 ISO C++ 2020 工作草案

    默认的 C++ 语言标准是 gnu++14.

    OpenCL 语言支持的值为:

    cl1.0

    OpenCL 1.0

    cl1.1

    OpenCL 1.1

    cl1.2

    OpenCL 1.2

    cl2.0

    OpenCL 2.0

    默认的 OpenCL 语言标准是 cl1.0 。

    CUDA 语言支持的值为:

    cuda

    NVIDIA CUDA(tm)

    -stdlib=

    指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。

    -rtlib=

    指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。

    -ansi

    与 -std=c89 相同

    -ObjC, -ObjC++

    将源输入文件分别视为 Objective-C 和 Object-C++ 输入。

    -trigraphs

    启用三元组。

    -ffreestanding

    指示该文件应针对独立环境而非托管环境进行编译。

    -fno-builtin

    禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。

    -fmath-errno

    表示数学函数应被视为更新 errno 。

    -fpascal-strings

    使用 "\pfoo" 启用对 Pascal 样式字符串的支持。

    -fms-extensions

    启用对 Microsoft 扩展的支持。

    -fmsc-version=

    设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。

    -fborland-extensions

    启用对 Borland 扩展的支持。

    -fwritable-strings

    使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。

    -flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions

    允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:

    • none: 不允许向量之间的隐式转换

    • integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播

    • all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播

    如果未指定,则默认为 integer 。

    -fblocks

    启用 "Blocks" 语言功能。

    -fobjc-abi-version=version

    选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。

    -fobjc-nonfragile-abi-version=

    选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。

    -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi

    启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。

    目标选择选项

    Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。

    -arch

    指定要构建的架构。

    -mmacosx-version-min=

    为 macOS 构建时,请指定应用程序支持的最低版本。

    -miphoneos-version-min

    为 iPhone OS 构建时,请指定应用程序支持的最低版本。

    --print-supported-cpus

    打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。

    -mcpu=?, -mtune=?

    --print-supported-cpus 的别名

    -march=

    指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。

    代码生成选项

    -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4

    指定要使用的优化级别:

    -O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。

    -O1 介于 -O0 和 -O2 之间。

    -O2 中等优化级别,可实现大多数优化。

    -O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)

    -Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。

    -Os 与 -O2 类似,具有额外的优化以减少代码大小。

    -Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。

    -Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。

    -O 相当于 -O2 。

    -O4 及以上

    目前相当于 -O3

    -g, -gline-tables-only, -gmodules

    控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:

    -g 生成调试信息。

    -gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。

    -gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。

    在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。

    -fstandalone-debug -fno-standalone-debug

    Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。

    -fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。

    -fexceptions

    启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。

    -ftrapv

    生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。

    -fvisibility

    此标志设置默认可见性级别。

    -fcommon, -fno-common

    此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。

    -ftls-model=

    设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。

    -flto, -flto=full, -flto=thin, -emit-llvm

    生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。

    -flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。

    驱动程序选项

    -###

    打印(但不运行)为此编译运行的命令。

    --help

    显示可用选项。

    -Qunused-arguments

    不要为未使用的驱动程序参数发出任何警告。

    -Wa,

    将 args 中逗号分隔的参数传递给汇编器。

    -Wl,

    将 args 中逗号分隔的参数传递给链接器。

    -Wp,

    将 args 中逗号分隔的参数传递给预处理器。

    -Xanalyzer

    将 arg 传递给静态分析器。

    -Xassembler

    将 arg 传递给汇编程序。

    -Xlinker

    将 arg 传递给链接器。

    -Xpreprocessor

    将 arg 传递给预处理器。

    -o

    将输出写入文件。

    -print-file-name=

    打印文件的完整库路径。

    -print-libgcc-file-name

    打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。

    -print-prog-name=

    打印名称的完整程序路径。

    -print-search-dirs

    打印用于查找库和程序的路径。

    -save-temps

    保存中间编译结果。

    -save-stats, -save-stats=cwd, -save-stats=obj

    将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。

    -integrated-as, -no-integrated-as

    用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。

    -time

    计时单个命令。

    -ftime-report

    打印每个编译阶段的时序摘要。

    -v

    显示命令以运行和使用详细输出。

    诊断选项

    -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length

    这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。

    预处理器选项

    -D=

    将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -U

    将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -include

    将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -I

    将指定目录添加到包含文件的搜索路径。

    -F

    将指定目录添加到框架包含文件的搜索路径。

    -nostdinc

    不要在标准系统目录或编译器内置目录中搜索包含文件。

    -nostdlibinc

    不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。

    -nobuiltininc

    不要在 clang 的内置目录中搜索包含文件。

    环境

    TMPDIR, TEMP, TMP

    依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。

    CPATH

    如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。

    环境变量中的空组件将被忽略。

    C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH

    这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。

    MACOSX_DEPLOYMENT_TARGET

    如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。

    缺陷

    要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。

    参见

    as(1), ld(1)

    作者

    由 Clang / LLVM 团队维护 (http://clang.llvm.org)

    版权

    2007-2020, Clang 团队

    2020-06-26

    10

    名称
    概要

    clang [options] filename ...

    描述

    clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:

    驱动

    clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。

    预处理

    此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。

    解析和语义分析

    此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).

    代码生成和优化

    此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。

    Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。

    汇编器

    此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。

    链接器

    此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。

    Clang 静态分析器

    静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。

    选项

    阶段 选择选项

    -E

    运行预处理器阶段。

    -fsyntax-only

    运行预处理器、解析器和类型检查阶段。

    -S

    运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。

    -c

    运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。

    no stage selection option

    如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。

    语言选择和模式选项

    -x

    将后续输入文件视为具有类型语言。

    -std=

    指定要编译的语言标准。

    C 语言支持的值为:

    c89 c90 iso9899:1990

    ISO C 1990

    iso9899:199409

    ISO C 1990 修订版 1

    gnu89 gnu90

    带有 GNU 扩展的 ISO C 1990

    c99 iso9899:1999

    ISO C 1999

    gnu99

    具有 GNU 扩展的 ISO C 1999

    c11 iso9899:2011

    ISO C 2011

    gnu11

    带有 GNU 扩展的 ISO C 2011

    c17 iso9899:2017

    ISO C 2017

    gnu17

    具有 GNU 扩展的 ISO C 2017

    默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。

    C++ 语言支持的值为:

    c++98 c++03

    ISO C++ 1998 及修正

    gnu++98 gnu++03

    ISO C++ 1998 与修正和 GNU 扩展

    c++11

    ISO C++ 2011 修订版

    gnu++11

    带有修正和 GNU 扩展的 ISO C++ 2011

    c++14

    ISO C++ 2014 修订版

    gnu++14

    带有修正和 GNU 扩展的 ISO C++ 2014

    c++17

    ISO C++ 2017 修订版

    gnu++17

    带有修正和 GNU 扩展的 ISO C++ 2017

    c++2a

    ISO C++ 2020 工作草案

    gnu++2a

    具有 GNU 扩展的 ISO C++ 2020 工作草案

    默认的 C++ 语言标准是 gnu++14.

    OpenCL 语言支持的值为:

    cl1.0

    OpenCL 1.0

    cl1.1

    OpenCL 1.1

    cl1.2

    OpenCL 1.2

    cl2.0

    OpenCL 2.0

    默认的 OpenCL 语言标准是 cl1.0 。

    CUDA 语言支持的值为:

    cuda

    NVIDIA CUDA(tm)

    -stdlib=

    指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。

    -rtlib=

    指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。

    -ansi

    与 -std=c89 相同

    -ObjC, -ObjC++

    将源输入文件分别视为 Objective-C 和 Object-C++ 输入。

    -trigraphs

    启用三元组。

    -ffreestanding

    指示该文件应针对独立环境而非托管环境进行编译。

    -fno-builtin

    禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。

    -fmath-errno

    表示数学函数应被视为更新 errno 。

    -fpascal-strings

    使用 "\pfoo" 启用对 Pascal 样式字符串的支持。

    -fms-extensions

    启用对 Microsoft 扩展的支持。

    -fmsc-version=

    设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。

    -fborland-extensions

    启用对 Borland 扩展的支持。

    -fwritable-strings

    使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。

    -flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions

    允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:

    • none: 不允许向量之间的隐式转换

    • integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播

    • all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播

    如果未指定,则默认为 integer 。

    -fblocks

    启用 "Blocks" 语言功能。

    -fobjc-abi-version=version

    选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。

    -fobjc-nonfragile-abi-version=

    选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。

    -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi

    启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。

    目标选择选项

    Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。

    -arch

    指定要构建的架构。

    -mmacosx-version-min=

    为 macOS 构建时,请指定应用程序支持的最低版本。

    -miphoneos-version-min

    为 iPhone OS 构建时,请指定应用程序支持的最低版本。

    --print-supported-cpus

    打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。

    -mcpu=?, -mtune=?

    --print-supported-cpus 的别名

    -march=

    指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。

    代码生成选项

    -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4

    指定要使用的优化级别:

    -O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。

    -O1 介于 -O0 和 -O2 之间。

    -O2 中等优化级别,可实现大多数优化。

    -O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)

    -Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。

    -Os 与 -O2 类似,具有额外的优化以减少代码大小。

    -Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。

    -Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。

    -O 相当于 -O2 。

    -O4 及以上

    目前相当于 -O3

    -g, -gline-tables-only, -gmodules

    控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:

    -g 生成调试信息。

    -gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。

    -gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。

    在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。

    -fstandalone-debug -fno-standalone-debug

    Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。

    -fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。

    -fexceptions

    启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。

    -ftrapv

    生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。

    -fvisibility

    此标志设置默认可见性级别。

    -fcommon, -fno-common

    此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。

    -ftls-model=

    设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。

    -flto, -flto=full, -flto=thin, -emit-llvm

    生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。

    -flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。

    驱动程序选项

    -###

    打印(但不运行)为此编译运行的命令。

    --help

    显示可用选项。

    -Qunused-arguments

    不要为未使用的驱动程序参数发出任何警告。

    -Wa,

    将 args 中逗号分隔的参数传递给汇编器。

    -Wl,

    将 args 中逗号分隔的参数传递给链接器。

    -Wp,

    将 args 中逗号分隔的参数传递给预处理器。

    -Xanalyzer

    将 arg 传递给静态分析器。

    -Xassembler

    将 arg 传递给汇编程序。

    -Xlinker

    将 arg 传递给链接器。

    -Xpreprocessor

    将 arg 传递给预处理器。

    -o

    将输出写入文件。

    -print-file-name=

    打印文件的完整库路径。

    -print-libgcc-file-name

    打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。

    -print-prog-name=

    打印名称的完整程序路径。

    -print-search-dirs

    打印用于查找库和程序的路径。

    -save-temps

    保存中间编译结果。

    -save-stats, -save-stats=cwd, -save-stats=obj

    将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。

    -integrated-as, -no-integrated-as

    用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。

    -time

    计时单个命令。

    -ftime-report

    打印每个编译阶段的时序摘要。

    -v

    显示命令以运行和使用详细输出。

    诊断选项

    -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length

    这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。

    预处理器选项

    -D=

    将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -U

    将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -include

    将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -I

    将指定目录添加到包含文件的搜索路径。

    -F

    将指定目录添加到框架包含文件的搜索路径。

    -nostdinc

    不要在标准系统目录或编译器内置目录中搜索包含文件。

    -nostdlibinc

    不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。

    -nobuiltininc

    不要在 clang 的内置目录中搜索包含文件。

    环境

    TMPDIR, TEMP, TMP

    依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。

    CPATH

    如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。

    环境变量中的空组件将被忽略。

    C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH

    这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。

    MACOSX_DEPLOYMENT_TARGET

    如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。

    缺陷

    要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。

    参见

    as(1), ld(1)

    作者

    由 Clang / LLVM 团队维护 (http://clang.llvm.org)

    版权

    2007-2020, Clang 团队

    2020-06-26

    10

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    遍历文件层次结构

    概要

    find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

    综述

    find 实用程序递归地向下列出每个 path 的目录树,根据树中的每个文件评估一个 expression (由下面列出的 “primaries” 和 “operands” 组成) 。

    选项如下:

    -E

    将后跟 -regex 和 -iregex 主表达式的正则表达式解释为扩展(现代)正则表达式,而不是基本正则表达式 (BRE)。 re_format(7) 手册页完整地描述了这两种格式。

    -H

    导致为命令行上指定的每个符号链接返回的文件信息和文件类型(请参阅 stat(2) )是链接引用的文件的信息和文件类型,而不是链接本身。 如果引用的文件不存在,则文件信息和类型将用于链接本身。 所有不在命令行上的符号链接的文件信息都是链接本身的文件信息。

    -L

    导致为每个符号链接返回的文件信息和文件类型(请参阅 stat(2) )是链接引用的文件的信息和文件类型,而不是链接本身。 如果引用的文件不存在,则文件信息和类型将用于链接本身。

    此选项等效于已弃用的 -follow 主选项。

    -P

    导致为每个符号链接返回的文件信息和文件类型(参见 stat(2) )是链接本身的信息和文件类型。 这是默认设置。

    -X

    允许 find 与 xargs(1) 一起安全使用。 如果文件名包含 xargs(1) 使用的任何定界字符,则会在标准错误中显示诊断消息,并跳过该文件。 定界字符包括单引号 (“ ' ”) 和双引号 (“ " ”) 、反斜杠 (“\”) 、空格、制表符和换行符。

    但是,您可能希望将 -print0 主节点与 “xargs -0” 结合使用作为一种有效的替代方法。

    -d

    导致 find 执行深度优先遍历。

    此选项是 IEEE Std 1003.1-2001 (“POSIX.1”) 指定的 -depth primary 的 BSD 特定等效项。 有关详细信息,请参阅其在 PRIMARIES 下的描述。

    -s

    导致 find 按字典顺序(即每个目录中的字母顺序)遍历文件层次结构。 注意: ‘find -s’ 和 ‘find | sort’ 可能会给出不同的结果。

    -x

    防止 find 下降到设备号不同于下降开始的文件的设备号的目录中。

    此选项等效于已弃用的 -xdev 主选项。

    基元

    所有带数字参数的初选都允许数字前面有加号 (“+”) 或减号 (“-”) 。 前面的加号表示 “more than n”, ,前面的减号表示 “less than n” ,两者都不表示 “exactly n” 。

    -Bmin n

    如果文件的 inode 创建时间与开始 find 的时间之间的差异(向上舍入到下一整分钟)为 n 分钟,则为真。

    -Bnewer file

    与 -newerBm 相同。

    -Btime n[smhdw]

    如果未指定单位,则如果文件的 inode 创建时间与开始 find 时间之间的差异(向上舍入到下一个完整的 24 小时周期)为 n 24 小时周期,则此主节点评估为 true。

    如果指定了单位,则如果文件的 inode 创建时间与开始 find 的时间之间的差正好是 n 个单位,则此主节点的计算结果为 true。 有关支持的时间单位的信息,请参阅 -atime 主要描述。

    -acl

    可以与其他主文件结合使用来定位具有扩展 ACL 的文件。 有关详细信息,请参阅 acl(3) 。

    -amin [-|+]n

    如果文件上次访问时间和开始 find 时间之间的差异(向上舍入到下一个完整分钟)大于 n (+n) 、小于 n (-n) 或恰好在 n 分钟前,则为真。

    -anewer file

    与 -neweram 相同。

    -atime n[smhdw]

    如果未指定单位,则如果文件上次访问时间与开始 find 时间之间的差值(向上舍入到下一个完整的 24 小时周期)为 n 个 24 小时周期,则此主要计算结果为 true。

    如果指定了单位,则如果文件上次访问时间和开始 find 的时间之间的差正好是 n 个单位,则此主节点评估为真。 可能的时间单位如下:

    s

    秒

    m

    分钟(60 秒)

    h

    小时(60 分钟)

    d

    一天(24 小时)

    w

    周(7天)

    任意数量的单位可以组合在一个 -atime 参数中,例如, “-atime -1h30m” 。单位可能仅在与 + 或 - 修饰符一起使用时才有用。

    -cmin [-|+]n

    如果最后一次更改文件状态信息的时间与开始 find 的时间之间的差异(向上舍入到下一整分钟)大于 n (+n) 、小于 n (-n) 或恰好 n 分钟,则为真前。

    -cnewer file

    与 -newercm 相同。

    -ctime n[smhdw]

    如果未指定单位,则如果文件状态信息的最后更改时间与开始 find 的时间之间的差值(向上舍入到下一个完整的 24 小时周期)为 n 个 24 小时周期,则此主要计算结果为 true。

    如果指定了单位,则如果文件状态信息的最后一次更改时间与开始 find 的时间之间的差异正好是 n 个单位,则此主要计算结果为 true。 有关支持的时间单位的信息,请参阅 -atime 主要描述。

    -d

    不可移植的、特定于 BSD 的 depth 版本。 GNU find 在错误地模拟 FreeBSD find 时将其作为主要实现。

    -delete

    删除找到的文件与/或目录。总是返回真。这从当前工作目录执行,因为 find 沿着树递归。 它不会尝试删除相对于 “.” 的路径名中带有 “/” 字符的文件名。出于安全原因。 此选项隐含深度优先遍历处理。 如果目录不为空, -delete primary 将无法删除目录。以下符号链接与此选项不兼容。

    -depth

    永远正确;与不可移植的 -d 选项相同。导致 find 执行深度优先遍历,即以后序访问目录,并且目录中的所有条目将在目录本身之前执行。 默认情况下,按预定顺序 find 访问目录,即在其内容之前。 注意,默认 不是 广度优先遍历。

    当 find 与 cpio(1) 一起使用以处理包含在具有异常权限的目录中的文件时, -depth primary 会很有用。 它确保您在将文件放入目录时具有写权限,然后将目录的权限设置为最后一件事。

    -depth n

    如果文件相对于遍历起点的深度为 n ,则为真。

    -empty

    如果当前文件或目录为空,则为真。

    -exec utility [argument ...] ;

    如果名为 utility 的程序返回零值作为其退出状态,则为真。 可选 arguments 可以传递给实用程序。 表达式必须以分号 (“;”) 结束。 如果从 shell 调用 find- ,如果 shell 将其视为控制运算符,则可能需要引用分号。 如果字符串 “{}” 出现在实用程序名称或参数中的任何位置,则将其替换为当前文件的路径名。 Utility 将从执行 find 的目录中执行。 Utility 和 arguments 不受外壳模式和结构的进一步扩展。

    -exec utility [argument ...] {} +

    与 -exec 相同,但每次调用 utility 时, “{}” 被尽可能多的路径名替换。 此行为类似于 xargs(1) 的行为。主节点始终返回 true;如果至少一次 utility 调用返回非零退出状态, find 将返回非零退出状态。

    -execdir utility [argument ...] ;

    -execdir primary 与 -exec primary 相同,但 utility 将从保存当前文件的目录执行。 替换字符串 “{}” 的文件名不合格。

    -execdir utility [argument ...] {} +

    与 -execdir 相同,但每次调用 utility 时, “{}” 被尽可能多的路径名替换。 此行为类似于 xargs(1) 的行为。 主节点始终返回 true;如果至少一次 utility 调用返回非零退出状态, find 将返回非零退出状态。

    -flags [-|+]flags,notflags

    使用符号名称指定标志(请参阅 chflags(1) )。 带有 “no” 前缀的那些( “nodump”) 除外)被称为 notflags 。 flags 中的标志被检查为已设置,而 notflags 中的标志被检查为未设置。 请注意,这与 -perm 不同,后者仅允许用户指定设置的模式位。

    如果标志前面有一个破折号 (“-”) ,如果至少 flags 中的所有位和 notflags 中的任何位都未在文件的标志位中设置,则此主要计算结果为真。 如果 flags 前面有一个加号 (“+”) ,如果 flags 中的任何位在文件的标志位中被设置,或者 notflags 中的任何位在文件的标志位中没有被设置,则此主元计算为 true。 否则,如果 flags 中的位与文件的 flags 位完全匹配,并且没有一个 flags 位与 notflags 的位匹配,则此主要计算结果为 true。

    -fstype type

    如果文件包含在 type 类型的文件系统中,则为真。 lsvfs(1) 命令可用于找出系统上可用的文件系统类型。 此外,还有两种伪类型, “local” 和 “rdonly” 。 前者匹配任何物理安装在执行 find 的系统上的文件系统,后者匹配任何以只读方式安装的文件系统。

    -gid gname

    与 -group gname 相同,用于与 GNU find 兼容。 GNU find 施加了一个限制,即 gname 是数字,而 find 没有。

    -group gname

    如果文件属于组 gname ,则为真。 如果 gname 是数字并且没有这样的组名,则 gname 被视为组 ID。

    -ignore_readdir_race

    忽略错误,因为从目录读取名称后文件或目录被删除。 此选项不影响起点上发生的错误。

    -ilname pattern

    与 -lname 类似,但匹配不区分大小写。 这是一个 GNU 查找扩展。

    -iname pattern

    与 -name 类似,但匹配不区分大小写。

    -inum n

    如果文件的 inode 编号为 n ,则为真。

    -ipath pattern

    与 -path- 类似,但匹配不区分大小写。

    -iregex pattern

    与 -regex 类似,但匹配不区分大小写。

    -iwholename pattern

    与 -ipath 相同,为 GNU 找到兼容性。

    -links n

    如果文件有 n 个链接,则为真。

    -lname pattern

    与 -name 类似,但匹配的是符号链接的内容而不是文件名。 请注意,这仅在遵循符号链接时才匹配损坏的符号链接。 这是一个 GNU 查找扩展。

    -ls

    这个主要的总是评估为真。 当前文件的以下信息被写入标准输出:它的 inode 编号、512 字节块的大小、文件权限、硬链接数、所有者、组、字节大小、最后修改时间和路径名。 如果文件是块或字符特殊文件,将显示设备号而不是字节大小。 如果文件是符号链接,则链接到的文件的路径名将显示在 “->” 前面。 格式与 “ls -dgils” 生成的格式相同。

    -maxdepth n

    永远正确;在命令行参数下最多下降 n 个目录级别。 如果指定了任何 -maxdepth ,则它适用于整个表达式,即使它通常不会被计算。 “-maxdepth 0” 将整个搜索限制为命令行参数。

    -mindepth n

    永远正确;不要在低于 n 的级别上应用任何测试或操作。 如果指定了任何 -mindepth ,则它适用于整个表达式,即使它通常不会被计算。 “-mindepth 1” 处理除命令行参数之外的所有参数。

    -mmin [-|+]n

    如果文件上次修改时间和开始 find 时间之间的差异(向上舍入到下一整分钟)大于 n (+n) 、小于 n (-n) 或恰好在 n 分钟前,则为真。

    -mnewer file

    与 -newer 相同。

    -mount

    与 -xdev 相同,用于 GNU 查找兼容性。

    -mtime n[smhdw]

    如果未指定单位,则如果文件上次修改时间和开始 find 时间之间的差值(向上舍入到下一个完整的 24 小时周期)为 n 个 24 小时周期,则此主要计算结果为 true。

    如果指定了单位,则如果文件上次修改时间和开始 find 的时间之间的差正好是 n 个单位,则此主文件的计算结果为 true。 有关支持的时间单位的信息,请参阅 -atime 主要描述。

    -name pattern

    如果正在检查的路径名的最后一个组件与 pattern 匹配,则为真。 特殊的 shell 模式匹配字符 (“[ 、” “] 、” “*” 和 “?”) 可以用作 pattern 的一部分。 这些字符可以通过使用反斜杠 (“\”) 转义来显式匹配。

    -newer file

    如果当前文件的最后修改时间比 file 更新,则为真。

    -newerXY file

    如果当前文件的上次访问时间 (X=a) 、inode 创建时间 (X=B) 、更改时间 (X=c) 或修改时间 (X=m) 比上次访问时间 (Y=a) 、inode 创建时间 (Y=B) 、更改时间 (Y=c) 或 file 修改时间 (Y=m) 。 此外,如果 Y=t ,则 file 被解释为 cvs(1) 所理解形式的直接日期规范。 请注意, -newermm 等效于 -newer 。

    -nogroup

    如果文件属于未知组,则为真。

    -noignore_readdir_race

    关闭 -ignore_readdir_race 的效果。这是默认行为。

    -noleaf

    此选项用于 GNU 查找兼容性。 在 GNU find 中,它禁用了与 find 无关的优化,因此它被忽略了。

    -nouser

    如果文件属于未知用户,则为真。

    -ok utility [argument ...] ;

    -ok primary 与 -exec primary 相同,不同之处在于 find 通过向终端打印消息并读取响应来请求用户确认 utility 的执行。 如果响应不是肯定的( “POSIX” 语言环境中的 ‘y’ ), 则不执行命令并且 -ok 表达式的值为 false。

    -okdir utility [argument ...] ;

    -okdir 主节点与 -execdir 主节点相同,但与 -ok 主节点的描述相同。

    -path pattern

    如果正在检查的路径名与 pattern 匹配,则为真。 特殊的 shell 模式匹配字符 (“[ 、” “] 、” “*” 和 “?”) 可以用作 pattern 的一部分。 这些字符可以通过使用反斜杠 (“\”) 转义来显式匹配。 斜杠 (“/”) 被视为普通字符,不必显式匹配。

    -perm [-|+]mode

    mode 可以是符号(参见 chmod(1) )或八进制数。 如果 mode 是符号模式,则假定起始值为零,并且 mode 设置或清除权限,而不考虑进程的文件模式创建掩码。 如果 mode 是八进制,则只有文件模式位的位 07777 (S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) 参与比较。 如果 mode 前面有一个破折号 (“-”) ,那么如果 mode 中的至少所有位都在文件的模式位中设置,则此主要计算结果为真。 如果 mode 前面有一个加号 (“+”) ,如果 mode 中的任何位在文件的模式位中设置,则此主要计算结果为真。 否则,如果 mode 中的位与文件的模式位完全匹配,则此主要计算结果为真。 请注意,符号模式的第一个字符可能不是破折号 (“-”) 。

    -print

    这个主要的总是评估为真。 它将当前文件的路径名打印到标准输出。 如果没有指定 -exec 、 -ls 、 -print0 或 -ok ,则给定表达式应有效地替换为 ( 给定表达式 ) -print 。

    -print0

    这个主要的总是评估为真。 它将当前文件的路径名打印到标准输出,后跟一个 ASCII NUL 字符(字符代码 0)。

    -prune

    这个主要的总是评估为真。 它导致 find 不会下降到当前文件中。 请注意,如果指定了 -d 选项,则 -prune primary 无效。

    -quit

    导致 find 立即终止。

    -regex pattern

    如果文件的整个路径使用正则表达式匹配 pattern ,则为真。 要匹配名为 “./foo/xyzzy” 的文件,您可以使用正则表达式 “.*/[xyz]*” 或 “.*/foo/.*” 但不能使用 “xyzzy” 或 “/foo/” 。

    -samefile name

    如果文件是 name 的硬链接,则为真。 如果指定了命令选项 -L ,那么如果文件是符号链接并指向 name ,它也是如此。

    -size n[ckMGTP]

    如果文件的大小(以 512 字节块为单位,向上取整)为 n ,则为真。 如果 n 后跟 c ,则如果文件大小为 n 字节(字符),则主要为真。 类似地,如果 n 后跟一个比例指示符,则文件的大小与 n 进行比较,比例为:

    k

    千字节(1024 字节)

    M

    兆字节(1024 KB)

    G

    千兆字节(1024 兆字节)

    T

    太字节(1024 GB)

    P

    PB(1024 TB)

    -sparse

    如果当前文件是稀疏的,即根据其字节大小分配的块少于预期,则为真。 这也可能匹配已被文件系统压缩的文件。

    -type t

    如果文件属于指定类型,则为真。 可能的文件类型如下:

    b

    特殊块

    c

    特殊字符

    d

    目录

    f

    常规文件

    l

    符号链接

    p

    FIFO

    s

    套接字

    -uid uname

    与 -user uname 相同,用于与 GNU find 兼容。 GNU find 施加了一个限制,即 uname 是数字,而 find 不是。

    -user uname

    如果文件属于用户 uname ,则为真。 如果 uname 是数字并且没有这样的用户名,则 uname 被视为用户 ID。

    -wholename pattern

    与 -path 相同,为 GNU 找到兼容性。

    运算符

    可以使用以下运算符组合初选。 运算符按优先级降序排列。

    [(](#() expression )

    如果括号内的表达式计算结果为真,则计算结果为真。

    ! expression

    -not expression

    这是一元 NOT 运算符。 如果表达式为假,则计算结果为真。

    -false

    总是假的。

    -true

    永远是真的。

    expression -and expression

    expression expression

    -and 运算符是逻辑 AND 运算符。 由于两个表达式的并列暗示了它,因此不必指定它。 如果两个表达式都为真,则表达式的计算结果为真。 如果第一个表达式为假,则不计算第二个表达式。

    expression -or expression

    -or 运算符是逻辑 OR 运算符。 如果第一个或第二个表达式为真,则表达式的计算结果为真。 如果第一个表达式为真,则不计算第二个表达式。

    所有操作数和主数必须是单独的参数来 find 。 初选,自己带参数希望每个参数是一个单独的参数 find 。

    环境

    LANG 、 LC_ALL 、 LC_COLLATE 、 LC_CTYPE 、 LC_MESSAGES 和 LC_TIME 环境变量会影响 find 实用程序的执行,如 environ(7) 中所述。

    实例

    以下示例显示为给 shell:

    [find / \! -name "*.c" -print](#find_/e!_-name(dq*.c_(dq_-print)

    打印出名称不以 .c 结尾的所有文件的列表。

    find / -newer ttt -user wnj -print

    打印出用户 “wnj” 拥有的比文件 ttt 更新的所有文件的列表。

    find / \! \( -newer ttt -user wnj \) -print

    打印出所有不比 ttt 新且属于 “wnj” 的文件的列表。

    find / \( -newer ttt -or -user wnj \) -print

    打印出属于 “wnj” 或比 ttt 更新的所有文件的列表。

    find / -newerct '1 minute ago' -print

    打印出所有 inode 更改时间比当前时间减去一分钟的文件的列表。

    find / -type f -exec echo {} \;

    使用 echo(1) 命令打印出所有文件的列表。

    find -L /usr/ports/packages -type l -exec rm -- {} +

    删除 /usr/ports/packages 中所有损坏的符号链接。

    find /usr/src -name CVS -prune -o -depth +6 -print

    在工作目录 /usr/src 中查找至少七层深的文件和目录。

    find /usr/src -name CVS -prune -o -mindepth 7 -print

    不等同于前面的示例,因为 -prune 不会在七级以下进行评估。

    兼容性

    -follow 已弃用;应该使用 -L- 选项。 有关详细信息,请参阅下面的 标准 部分。

    参见

    chflags(1) 、 chmod(1) 、 cvs(1) 、 locate(1) 、 lsvfs(1) 、 whereis(1) 、 which(1) 、 xargs(1) 、 stat(2) 、 acl(3) 、 fts(3) 、 getgrent(3) 、 getpwent(3) 、 strmode(3) 、 re_format(7) 、 symlink(7)

    标准

    find 实用程序语法是 IEEE Std 1003.1-2001 (“POSIX.1”) 标准指定的语法的超集。

    除了 -H 和 -L 以及 -amin 、 -anewer 、 -cmin 、 -cnewer 、 -delete 、 -empty 、-fstype 、 -iname 、 -inum 、 -iregex 、 -ls 、 -maxdepth 、 -mindepth 、 -mmin 、 -path 、 -print0 、 -regex 、 -sparse 和所有与 -B* 诞生时间相关的初选都是对 IEEE Std 1003.1-2001 (“POSIX.1”) 的扩展。

    从历史上看, -d -、 -L 和 -x 选项是使用初级 -depth, -follow 和 -xdev 实现的。 这些初选总是被评估为真。 由于它们实际上是在遍历开始之前生效的全局变量,因此某些合法表达式可能会产生意想不到的结果。 一个例子是表达式 -print -o -depth 。 由于 -print 始终评估为 true,因此标准的评估顺序意味着永远不会评估 -depth 。 不是这种情况。

    运算符 -or 实现为 -o, 运算符 -and 实现为 -a 。

    -exec 和 -ok 主项的历史实现不会替换实用程序名称或实用程序参数中的字符串 “{}” (如果它前面或后面有非空白字符)。 无论它出现在实用程序名称或参数中的哪个位置,此版本都会替换它。

    -E 选项的灵感来自等效的 grep(1) 和 sed(1) 选项。

    历史

    find 命令出现在 Version 1 AT&T UNIX 中。

    缺陷

    find 使用的特殊字符也是许多 shell 程序的特殊字符。 特别是字符 “* 、” “[ 、” “] 、” “? 、” “( 、” “) 、” “! 、” “\” 和 “;” 可能必须从 shell 中逃脱。

    由于没有分隔选项和文件名或文件名和 expression 的分隔符,因此很难指定名为 -xdev 或 ! 的文件。 这些问题由 -f 选项和 getopt(3) “-``-” 结构处理。

    -delete primary 无法与导致文件系统树遍历选项更改的其他选项很好地交互。

    -mindepth 和 -maxdepth primaries 实际上是全局选项(如上文所述)。 它们可能应该被看起来像选项的选项所取代。

    April 18, 2020

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称

    cpp.1

    CLANG(1)

    CLANG(1)

    Clang

    CLANG(1)

    名称

    clang - Clang C、C++ 和 Objective-C 编译器

    clang [options] filename ...

    clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:

    驱动

    clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。

    预处理

    此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。

    解析和语义分析

    此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).

    代码生成和优化

    此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。

    Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。

    汇编器

    此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。

    链接器

    此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。

    Clang 静态分析器

    静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。

    -E

    运行预处理器阶段。

    -fsyntax-only

    运行预处理器、解析器和类型检查阶段。

    -S

    运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。

    -c

    运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。

    no stage selection option

    如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。

    -x

    将后续输入文件视为具有类型语言。

    -std=

    指定要编译的语言标准。

    C 语言支持的值为:

    c89 c90 iso9899:1990

    ISO C 1990

    iso9899:199409

    ISO C 1990 修订版 1

    gnu89 gnu90

    带有 GNU 扩展的 ISO C 1990

    c99 iso9899:1999

    ISO C 1999

    gnu99

    具有 GNU 扩展的 ISO C 1999

    c11 iso9899:2011

    ISO C 2011

    gnu11

    带有 GNU 扩展的 ISO C 2011

    c17 iso9899:2017

    ISO C 2017

    gnu17

    具有 GNU 扩展的 ISO C 2017

    默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。

    C++ 语言支持的值为:

    c++98 c++03

    ISO C++ 1998 及修正

    gnu++98 gnu++03

    ISO C++ 1998 与修正和 GNU 扩展

    c++11

    ISO C++ 2011 修订版

    gnu++11

    带有修正和 GNU 扩展的 ISO C++ 2011

    c++14

    ISO C++ 2014 修订版

    gnu++14

    带有修正和 GNU 扩展的 ISO C++ 2014

    c++17

    ISO C++ 2017 修订版

    gnu++17

    带有修正和 GNU 扩展的 ISO C++ 2017

    c++2a

    ISO C++ 2020 工作草案

    gnu++2a

    具有 GNU 扩展的 ISO C++ 2020 工作草案

    默认的 C++ 语言标准是 gnu++14.

    OpenCL 语言支持的值为:

    cl1.0

    OpenCL 1.0

    cl1.1

    OpenCL 1.1

    cl1.2

    OpenCL 1.2

    cl2.0

    OpenCL 2.0

    默认的 OpenCL 语言标准是 cl1.0 。

    CUDA 语言支持的值为:

    cuda

    NVIDIA CUDA(tm)

    -stdlib=

    指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。

    -rtlib=

    指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。

    -ansi

    与 -std=c89 相同

    -ObjC, -ObjC++

    将源输入文件分别视为 Objective-C 和 Object-C++ 输入。

    -trigraphs

    启用三元组。

    -ffreestanding

    指示该文件应针对独立环境而非托管环境进行编译。

    -fno-builtin

    禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。

    -fmath-errno

    表示数学函数应被视为更新 errno 。

    -fpascal-strings

    使用 "\pfoo" 启用对 Pascal 样式字符串的支持。

    -fms-extensions

    启用对 Microsoft 扩展的支持。

    -fmsc-version=

    设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。

    -fborland-extensions

    启用对 Borland 扩展的支持。

    -fwritable-strings

    使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。

    -flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions

    允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:

    • none: 不允许向量之间的隐式转换

    • integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播

    • all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播

    如果未指定,则默认为 integer 。

    -fblocks

    启用 "Blocks" 语言功能。

    -fobjc-abi-version=version

    选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。

    -fobjc-nonfragile-abi-version=

    选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。

    -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi

    启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。

    Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。

    -arch

    指定要构建的架构。

    -mmacosx-version-min=

    为 macOS 构建时,请指定应用程序支持的最低版本。

    -miphoneos-version-min

    为 iPhone OS 构建时,请指定应用程序支持的最低版本。

    --print-supported-cpus

    打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。

    -mcpu=?, -mtune=?

    --print-supported-cpus 的别名

    -march=

    指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。

    -O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4

    指定要使用的优化级别:

    -O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。

    -O1 介于 -O0 和 -O2 之间。

    -O2 中等优化级别,可实现大多数优化。

    -O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)

    -Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。

    -Os 与 -O2 类似,具有额外的优化以减少代码大小。

    -Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。

    -Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。

    -O 相当于 -O2 。

    -O4 及以上

    目前相当于 -O3

    -g, -gline-tables-only, -gmodules

    控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:

    -g 生成调试信息。

    -gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。

    -gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。

    在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。

    -fstandalone-debug -fno-standalone-debug

    Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。

    -fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。

    -fexceptions

    启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。

    -ftrapv

    生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。

    -fvisibility

    此标志设置默认可见性级别。

    -fcommon, -fno-common

    此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。

    -ftls-model=

    设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。

    -flto, -flto=full, -flto=thin, -emit-llvm

    生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。

    -flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。

    -###

    打印(但不运行)为此编译运行的命令。

    --help

    显示可用选项。

    -Qunused-arguments

    不要为未使用的驱动程序参数发出任何警告。

    -Wa,

    将 args 中逗号分隔的参数传递给汇编器。

    -Wl,

    将 args 中逗号分隔的参数传递给链接器。

    -Wp,

    将 args 中逗号分隔的参数传递给预处理器。

    -Xanalyzer

    将 arg 传递给静态分析器。

    -Xassembler

    将 arg 传递给汇编程序。

    -Xlinker

    将 arg 传递给链接器。

    -Xpreprocessor

    将 arg 传递给预处理器。

    -o

    将输出写入文件。

    -print-file-name=

    打印文件的完整库路径。

    -print-libgcc-file-name

    打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。

    -print-prog-name=

    打印名称的完整程序路径。

    -print-search-dirs

    打印用于查找库和程序的路径。

    -save-temps

    保存中间编译结果。

    -save-stats, -save-stats=cwd, -save-stats=obj

    将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。

    -integrated-as, -no-integrated-as

    用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。

    -time

    计时单个命令。

    -ftime-report

    打印每个编译阶段的时序摘要。

    -v

    显示命令以运行和使用详细输出。

    -fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length

    这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。

    -D=

    将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -U

    将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -include

    将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。

    -I

    将指定目录添加到包含文件的搜索路径。

    -F

    将指定目录添加到框架包含文件的搜索路径。

    -nostdinc

    不要在标准系统目录或编译器内置目录中搜索包含文件。

    -nostdlibinc

    不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。

    -nobuiltininc

    不要在 clang 的内置目录中搜索包含文件。

    TMPDIR, TEMP, TMP

    依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。

    CPATH

    如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。

    环境变量中的空组件将被忽略。

    C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH

    这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。

    MACOSX_DEPLOYMENT_TARGET

    如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。

    要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。

    as(1), ld(1)

    由 Clang / LLVM 团队维护 ()

    2007-2020, Clang 团队

    2020-06-26

    10

    default.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    dirs.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    fc.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    do.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    else.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    exit.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    builtin.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    概要
    描述
    选项
    阶段 选择选项
    语言选择和模式选项
    目标选择选项
    代码生成选项
    驱动程序选项
    诊断选项
    预处理器选项
    环境
    缺陷
    参见
    作者
    http://clang.llvm.org
    版权
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称

    bsdtar.1

    TAR(1)

    TAR(1)

    FreeBSD General Commands Manual

    TAR(1)

    名称

    tar —

    操作磁带档案

    tar [bundled-flags ⟨args⟩] [⟨file⟩ | ⟨pattern⟩ ...] tar {-c} [options] [files | directories] tar {-r | -u} -f archive-file [options] [files | directories] tar {-t | -x} [options] [patterns]

    tar 创建和操作流归档文件。 此实现可以从 tar, pax, cpio, zip, jar, ar, xar, rpm, 7-zip 和 ISO 9660 cdrom i映像中提取,并且可以创建 tar, pax, cpio, ar, zip, 7-zip 和 shar 档案.

    第一个概要表格显示了一个 “bundled” 选项词。 提供此用法是为了与历史实现兼容。 有关详细信息,请参阅下面的兼容性。

    其他概要形式显示了首选用法。 tar 的第一个选项是以下列表中的模式指示符:

    创建包含指定项目的新存档。 长选项形式是 -``-create 。

    与 -c 类似,但新条目会附加到存档中。 请注意,这仅适用于存储在常规文件中的未压缩存档。 -f 选项是必需的。 长选项形式是 -``-append 。

    将存档内容列出到标准输出。 长选项形式是 -``-list 。

    与 -r 类似,但仅当新条目的修改日期比存档中的相应条目新时才会添加新条目。 请注意,这仅适用于存储在常规文件中的未压缩存档。 -f 选项是必需的。 长格式是 -``-update 。

    从存档中提取到磁盘。 如果同名文件在存档中多次出现,则将提取每个副本,之后的副本会覆盖(替换)之前的副本。 长选项形式是 -``-extract 。

    在 -c -、 -r 或 -u 模式下,每个指定的文件或目录都按命令行上指定的顺序添加到存档中。 默认情况下,每个目录的内容也会被归档。

    在提取或列表模式下,在打开存档之前读取和解析整个命令行。 命令行上的路径名或模式指示应处理存档中的哪些项目。 模式是 tcsh(1) 中记录的 shell 样式的通配模式。

    除非另有特别说明,否则选项适用于所有操作模式。

    archive

    (仅限 c 和 r 模式)打开指定的存档,其中的条目将附加到当前存档。 举个简单的例子,

    `tar` `-c` `-f` - newfile `@`original.tar

    将新存档写入标准输出,其中包含文件 newfile 和 original.tar 中的所有条目。 相比之下,

    `tar` `-c` `-f` - newfile original.tar

    创建一个只有两个条目的新存档。相似地,

    `tar` `-czf` - `-` `-format` `pax` `@`-

    从标准输入读取存档(其格式将自动确定)并将其转换为标准输出上 gzip 压缩的 pax 格式存档。 这样, tar 可用于将档案从一种格式转换为另一种格式。

    , -``-auto-compress

    (仅限 c 模式)使用存档后缀来决定一组格式和压缩。举个简单的例子,

    `tar` `-a` `-cf` archive.tgz source.c source.h

    创建一个具有受限 pax 格式和 gzip 压缩的新存档,

    `tar` `-a` `-cf` archive.tar.bz2.uu source.c source.h

    创建一个具有受限 pax 格式和 bzip2 压缩和 uuencode 压缩的新存档,

    `tar` `-a` `-cf` archive.zip source.c source.h

    创建一个 zip 格式的新存档,

    `tar` `-a` `-jcf` archive.tgz source.c source.h

    忽略 “-j” 选项,并创建一个具有受限 pax 格式和 gzip 压缩的新存档,

    `tar` `-a` `-jcf` archive.xxx source.c source.h

    如果它是未知后缀或没有后缀,则创建一个具有受限 pax 格式和 bzip2 压缩的新存档。

    -``-acls

    (仅限 c、r、u、x 模式)存档或提取 POSIX.1e 或 NFSv4 ACL。 这与 -``-no-acls 和 c、r 和 u 模式(Mac OS X 除外)或 tar- 以 root 身份在 x 模式下运行时的默认行为相反。 在 Mac OS X 上,此选项将扩展 ACL 转换为 NFSv4 ACL。 要存储扩展 ACL,首选 -``-mac-metadata 选项。

    , -``-read-full-blocks

    忽略与其他 tar(1) 实现的兼容性。

    blocksize, -``-block-size blocksize

    指定磁带驱动器 I/O 的块大小(以 512 字节记录为单位)。 通常,只有在读取或写入磁带驱动器时才需要此参数,并且通常不需要,因为 20 条记录(10240 字节)的默认块大小非常常见。

    directory, -``-cd directory, -``-directory directory

    在 c 和 r 模式下,这会在添加以下文件之前更改目录。 在 x 模式下,在打开存档之后但在从存档中提取条目之前更改目录。

    -``-chroot

    (仅限 x 模式)在处理任何 -C 选项之后和提取任何文件之前, chroot() 到当前目录。

    -``-clear-nochange-fflags

    (仅限 x 模式)在删除文件系统对象以替换它们之前,清除可能阻止删除的特定于平台的文件属性或文件标志。

    -``-exclude pattern

    不要处理与指定模式匹配的文件或目录。 请注意,排除优先于命令行上指定的模式或文件名。

    -``-exclude-vcs

    不要处理版本控制系统 ‘Arch’, ‘Bazaar’, ‘CVS’, ‘Darcs’, ‘Mercurial’, ‘RCS’, ‘SCCS’, ‘SVN’ 和 ‘git’ 内部使用的文件或目录。

    -``-fflags

    (仅限 c、r、u、x 模式)存档或提取特定于平台的文件属性或文件标志。 这与 -``-no-fflags 和 c、r 和 u 模式下的默认行为相反,或者如果 tar 以 root 身份在 x 模式下运行。

    -``-format format

    (仅限 c、r、u 模式)对创建的存档使用指定的格式。 支持的格式包括 “cpio”, “pax”, “shar” 和 “ustar” 。 也可能支持其他格式;有关当前支持的格式的更多信息,请参阅 libarchive-formats(5) 在 r 和 u 模式下,扩展现有存档时,此处指定的格式必须与磁盘上现有存档的格式兼容。

    file, -``-file file

    从指定文件读取存档或将存档写入指定文件。文件名可以是 - 用于标准输入或标准输出。 默认值因系统而异;在 FreeBSD 上,默认为 /dev/sa0; 在 Linux 上,默认值为 /dev/st0 。

    -``-gid id

    使用提供的组 ID 号。 提取时,这会覆盖存档中的组 ID;存档中的组名将被忽略。 创建时,这会覆盖从磁盘读取的组 ID;如果 -``-gname 也没有指定,组名将被设置为匹配组 id。

    -``-gname name

    使用提供的组名。 提取时,这会覆盖存档中的组名;如果系统上不存在提供的组名,则将使用组 ID(来自存档或 - -gid 选项)。 创建时,这将设置将存储在存档中的组名;该名称将不会根据系统组数据库进行验证。

    (仅限 c 和 r 模式)将遵循命令行中命名的符号链接;链接的目标将被归档,而不是链接本身。

    (仅限 c 和 r 模式) -L 的同义词。

    的同义词。

    -``-help

    显示用法。

    -``-hfsCompression

    (仅限 x 模式)Mac OS X 特定(v10.6 或更高版本)。使用 HFS+ 压缩压缩提取的常规文件。

    -``-ignore-zeros

    -``-options read_concatenated_archives 的别名,用于与 GNU tar 兼容。

    -``-include pattern

    仅处理与指定模式匹配的文件或目录。 请注意,使用 -``-exclude 指定的排除优先于包含。 如果没有明确指定包含,则默认处理所有条目。 -``-include 选项在过滤档案时特别有用。 例如,命令

    `tar` `-c` `-f` new.tar `-``-include='*foo*'` `@`old.tgz

    创建一个新存档 new.tar ,其中仅包含 old.tgz 中包含字符串 ‘foo’ 的条目。

    , -``-xz

    (仅限 c 模式)使用 xz(1) 压缩生成的存档。在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 XZ 压缩。

    , -``-bzip, - -bzip2, - -bunzip2

    (仅限 c 模式)使用 bzip2(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 bzip2 压缩。

    , -``-keep-old-files

    (仅限 x 模式)不要覆盖现有文件。 特别是,如果一个文件在档案中出现多次,以后的副本不会覆盖以前的副本。

    -``-keep-newer-files

    (仅限 x 模式)不要覆盖比正在提取的存档中出现的版本新的现有文件。

    , -``-dereference

    (仅限 c 和 r 模式)将遵循所有符号链接。 通常,符号链接是这样存档的。 使用此选项,链接的目标将被存档。

    , -``-check-links

    (仅限 c 和 r 模式)除非每个文件的所有链接都已归档,否则会发出警告消息。

    -``-lrzip

    (仅限 c 模式)使用 lrzip(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 lrzip 压缩。

    -``-lz4

    (仅限 c 模式)在写入之前使用与 lz4 兼容的压缩来压缩存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 lz4 压缩。

    -``-zstd

    (仅限 c 模式)在写入之前使用与 zstd 兼容的压缩来压缩存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 zstd 压缩。

    -``-lzma

    (仅限 c 模式)使用原始 LZMA 算法压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 不鼓励使用此选项,而应使用 -``-xz 创建新档案。 请注意,此 tar 实现在读取档案时会自动识别 LZMA 压缩。

    -``-lzop

    (仅限 c 模式)使用 lzop(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 LZO 压缩。

    , -``-modification-time

    (仅限 x 模式)不要提取修改时间。 默认情况下,修改时间设置为存档中存储的时间。

    -``-mac-metadata

    (仅限 c、r、u 和 x 模式)特定于 Mac OS X。使用 AppleDouble 格式的 copyfile(3) 归档或提取扩展 ACL 和扩展文件属性。 这与 -``-no-mac-metadata 正好相反。 以及 c、r 和 u 模式下的默认行为,或者如果 tar 以 root 身份在 x 模式下运行。

    , -``-norecurse, -``-no-recursion

    不要对目录的内容进行递归操作。

    -``-newer date

    (仅限 c、r、u 模式)仅包括比指定日期新的文件和目录。 这将比较 ctime 条目。

    -``-newer-mtime date

    (仅限 c、r、u 模式)与 -``-newer 类似,但它比较 mtime 条目而不是 ctime 条目。

    -``-newer-than file

    (仅限 c、r、u 模式)仅包含比指定文件新的文件和目录。 这将比较 ctime 条目。

    -``-newer-mtime-than file

    (仅限 c、r、u 模式)与 -``-newer-than 类似,只是它比较 mtime 条目而不是 ctime 条目。

    -``-nodump

    (仅限 c 和 r 模式)通过跳过此文件来尊重 nodump 文件标志。

    -``-nopreserveHFSCompression

    (仅限 x 模式)Mac OS X 特定(v10.6 或更高版本)。 不要压缩在归档之前使用 HFS+ 压缩压缩的提取的常规文件。 默认情况下,使用 HFS+ 压缩再次压缩常规文件。

    -``-null

    (与 -I 或 -T 一起使用)文件名或模式由空字符分隔,而不是由换行符分隔。 这通常用于读取 find(1) 的 -print0 选项输出的文件名。

    -``-no-acls

    (仅限 c、r、u、x 模式)不要归档或提取 POSIX.1e 或 NFSv4 ACL。 如果 tar 在 x 模式下以非 root 用户身份运行(在 Mac OS X 上作为 c、r、u 和 x 模式下的任何用户),这与 -``-acls 和默认行为相反。

    -``-no-fflags

    (仅限 c、r、u、x 模式)不要归档或提取文件属性或文件标志。 如果 tar 在 x 模式下以非 root 身份运行,这与 -``-fflags 和默认行为相反。

    -``-no-mac-metadata

    (仅限 x 模式)特定于 Mac OS X。 不要使用 AppleDouble 格式的 copyfile(3) 归档或提取 ACL 和扩展文件属性。 这与 -``-mac-metadata 正好相反。 如果 tar 在 x 模式下以非 root 身份运行,则默认行为。

    -``-no-safe-writes

    (仅限 x 模式)不要创建临时文件并使用 rename(2) 替换原始文件。 这与 -``-safe-writes 正好相反。

    -``-no-same-owner

    如果 tar 以非 root 身份运行,这与 -``-same-owner 和默认行为相反。

    -``-no-same-permissions

    (仅限 x 模式)不要提取完整权限(SGID、SUID、粘滞位、文件属性或文件标志、扩展文件属性和 ACL)。 如果 tar 以非 root 身份运行,这与 -p 和默认行为相反。

    -``-no-xattrs

    (仅限 c、r、u、x 模式)不要归档或提取扩展文件属性。 如果 tar 在 x 模式下以非 root 身份运行,这与 -``-xattrs 和默认行为相反。

    -``-numeric-owner

    这相当于 -``-uname “” -``-gname “。” 提取时,它会导致存档中的用户和组名被忽略,而使用数字用户和组 ID。 创建时,它会导致用户名和组名不存储在存档中。

    , -``-to-stdout

    (仅限 x、t 模式)在提取 (-x) 模式下,文件将被写入标准输出,而不是被提取到磁盘。 在列表 (-t) 模式下,文件列表将被写入标准错误,而不是通常的标准输出。

    (x 模式) 使用运行程序的用户和用户组,而不是存档中指定的用户和组。 请注意,除非指定了 -p 并且程序正在由 root 用户运行,否则这没有任何意义。 在这种情况下,存档中的文件模式和标志将被恢复,但存档中的 ACL 或所有者信息将被丢弃。

    (c, r, u 模式) -``-format ustar 的同义词

    -``-older date

    (仅限 c、r、u 模式)仅包括早于指定日期的文件和目录。 这将比较 ctime 条目。

    -``-older-mtime date

    (仅限 c、r、u 模式)与 -``-older 类似,不同之处在于它比较 mtime 条目而不是 ctime 条目。

    -``-older-than file

    (仅限 c、r、u 模式)仅包含比指定文件更早的文件和目录。 这将比较 ctime 条目。

    -``-older-mtime-than file

    (仅限 c、r、u 模式)与 -``-older-than 类似,不同之处在于它比较 mtime 条目而不是 ctime 条目。

    -``-one-file-system

    (c、r 和 u 模式)不要交叉安装点。

    -``-options options

    为特定模块选择可选行为。 参数是包含逗号分隔的关键字和值的文本字符串。 这些被传递给处理特定格式的模块以控制这些格式的行为方式。 每个选项具有以下形式之一:

    key=value

    该键将在每个支持它的模块中设置为指定的值。 不支持此键的模块将忽略它。

    key

    该密钥将在支持它的每个模块中启用。 这相当于 key=1 。

    !key

    该密钥将在支持它的每个模块中被禁用。

    module:key=value, module:key, module:!key

    和上面一样,但是对应的键和值将只提供给名称与 module 匹配的模块。

    创建和追加模式支持的模块和键的完整列表在 archive_write_set_options(3)- 中,对于提取和列表模式在 archive_read_set_options(3) 中。

    支持的选项示例:

    支持 Joliet 扩展。 这是默认启用的,使用 !joliet 或 iso9660:!joliet 禁用。

    支持 Rock Ridge 扩展。 这是默认启用的,使用 !rockridge 或 iso9660:!rockridge 禁用。

    一个从 1 到 9 的十进制整数,指定 gzip 压缩级别。

    存储时间戳。 这是默认启用的,使用 !timestamp 或 gzip:!timestamp 禁用。

    =type

    使用 type 作为压缩方法。 支持的值为 bzip2、gzip、lzo(超快)和 zpaq(最佳,极慢)。

    一个从 1 到 9 的十进制整数,指定 lrzip 压缩级别。

    一个从 1 到 9 的十进制整数,指定 lzop 压缩级别。

    启用流校验和。这是默认情况下,使用 lz4:!stream-checksum 禁用。

    启用块校验和(默认禁用)。

    一个从 4 到 7 的十进制整数,指定 lz4 压缩块大小(默认设置为 7)。

    使用被压缩块的前一个块作为压缩字典来提高压缩率。

    指定 zstd 压缩级别的十进制整数。 支持的值取决于库版本,常用值从 1 到 22。

    一个从 1 到 9 的十进制整数,指定 lzop 压缩级别。

    一个从 0 到 9 的十进制整数,指定 xz 压缩级别。

    keyword

    mtree writer 模块允许您指定将在输出中包含哪些 mtree 关键字。 支持的关键字包括: cksum, device, flags, gid, gname, indent, link, md5, mode, nlink, rmd160, sha1, sha256, sha384

    启用所有上述关键字。 您还可以使用 mtree:!all 禁用所有关键字。

    在输出中启用 /set 行的生成。

    通过缩进选项和拆分行以适应 80 列来生成人类可读的输出。

    =type

    使用 type 作为压缩方法。 支持的值是 store(未压缩)和 deflate(gzip 算法)。

    使用传统的 zip 加密启用加密。

    =type

    使用 type 作为加密类型。 支持的值为 zipcrypt(传统 zip 加密)、aes128(WinZip AES-128 加密)和 aes256(WinZip AES-256 加密)。

    忽略存档中的零块,当多个 tar 存档连接在一起时会发生这种情况。 如果没有此选项,则只会读取第一个串联存档的内容。 此选项与 GNU tar 的 -i -、 -``-ignore-zeros 选项相当。

    如果任何模块都不支持提供的选项,则这是一个致命错误。

    , -``-absolute-paths

    默认情况下,绝对路径名(以 / 字符开头的路径名)在创建档案和从中提取档案时都会删除前导斜杠。 此外, tar 将拒绝提取路径名包含 .. 或其目标目录将被符号链接更改的归档条目。 此选项会抑制这些行为。

    , -``-insecure, -``-preserve-permissions

    (仅限 x 模式)保留文件权限。 尝试恢复从存档中提取的每个项目的完整权限,包括文件模式、文件属性或文件标志、扩展文件属性和 ACL(如果可用)。 这与 -``-no-same-permissions 相反,如果 tar 以 root 身份运行,则为默认值。 还可以通过指定 -``-no-acls, -``-no-fflags, -``-no-mac-metadata 或 -``-no-xattrs 来部分覆盖它。

    -``-passphrase passphrase

    passphrase 用于提取或创建加密存档。 目前,zip 是唯一支持加密的支持格式。 除非您意识到使用此选项有多么不安全,否则不应使用此选项。

    -``-posix

    (仅限 c、r、u 模式) -``-format pax 的同义词

    , -``-fast-read

    (仅限 x 和 t 模式)仅提取或列出与每个模式或文件名操作数匹配的第一个存档条目。 匹配每个指定的模式或文件名后立即退出。 默认情况下,存档总是被读取到最后,因为可以有多个具有相同名称的条目,并且按照惯例,后面的条目会覆盖前面的条目。 此选项作为性能优化提供。

    (仅限 x 模式)将文件提取为稀疏文件。 对于磁盘上的每个块,首先检查它是否只包含 NULL 字节,否则寻找它。 这类似于 dd 的 conv=sparse 选项。

    pattern

    根据 pattern 修改文件或存档成员名称。 该模式的格式为 /old/new/[ghHprRsS] 其中 old 是基本正则表达式, new 是匹配部分的替换字符串,可选的尾随字母修改处理替换的方式。 如果 old 不匹配,则跳过该模式。 在 new 中,~ 被替换为匹配,\1 到 \9 与相应捕获组的内容。 可选的尾随 g 指定匹配应该在匹配的部分之后继续,并在第一个不匹配的模式处停止。 可选的尾随 s 指定该模式适用于符号链接的值。 可选的尾随 p 指定在成功替换后原始路径名和新路径名应打印到标准错误。 可选的尾随 H、R 或 S 字符分别抑制硬链接目标、常规文件名或符号链接目标的替换。 可选的尾随 h、r 或 s 字符分别启用硬链接目标、常规文件名或符号链接目标的替换。默认值为 hrs ,它将替换应用于所有名称。 特别是,从来没有必要指定 h、r 或 s。

    -``-safe-writes

    (仅限 x 模式)以原子方式提取文件。 默认情况下, tar 取消与提取文件同名的原始文件(如果存在)的链接,然后立即以相同的名称创建它并写入它。 在短时间内,尝试访问该文件的应用程序可能找不到它,或者看到不完整的结果。 如果启用了 -``-safe-writes , tar 首先创建一个唯一的临时文件,然后将新内容写入临时文件,最后使用 rename(2) 以原子方式将临时文件重命名为其最终名称。 这保证了访问文件的应用程序将始终看到旧内容或新内容。

    -``-same-owner

    (仅限 x 模式)提取所有者和组 ID。 这与 -``-no-same-owner 和 tar 以 root 身份运行时的默认行为相反。

    -``-strip-components count

    删除指定数量的前导路径元素。 元素较少的路径名将被静默跳过。 请注意,在检查包含/排除模式之后但在安全检查之前编辑路径名。

    filename, -``-files-from filename

    在 x 或 t 模式下, tar 将读取要从 filename 中提取的名称列表。 在 c 模式下, tar 将从 filename 中读取要归档的名称。 单独一行上的特殊名称 “-C” 将导致当前目录更改为下一行指定的目录。 除非指定了 -``-null ,否则名称由换行符终止。 请注意, -``-null 还会禁用对包含 “-C” 的行的特殊处理。 注意:如果您使用 find(1) 生成文件列表,您可能还想使用 -n 。

    -``-totals

    (仅限 c、r、u 模式)归档所有文件后,将摘要打印到 stderr。

    , -``-unlink, - -unlink-first

    (仅限 x 模式)在创建文件之前取消链接文件。 如果大多数文件已经存在,这可能是一个较小的性能优化,但如果大多数文件不存在,则可能会使事情变慢。 此标志还会导致 tar- 删除干预目录符号链接,而不是报告错误。 有关更多详细信息,请参阅下面的安全部分。

    -``-uid id

    使用提供的用户 ID 号并忽略存档中的用户名。 在创建时,如果没有同时指定 -``-uname ,则用户名将设置为与用户 ID 匹配。

    -``-uname name

    使用提供的用户名。 提取时,这会覆盖存档中的用户名;如果系统上不存在提供的用户名,它将被忽略,而使用用户 ID(来自存档或 - -uid 选项)。 创建时,这将设置将存储在存档中的用户名;该名称未针对系统用户数据库进行验证。

    -``-use-compress-program program

    通过 program 管道输入(在 x 或 t 模式下)或输出(在 c 模式下),而不是使用内置的压缩支持。

    , -``-verbose

    产生详细的输出。 在创建和提取模式下, tar 将列出从存档读取或写入存档的每个文件名。 在列表模式下, tar 将产生类似于 ls(1) 的输出。 额外的 -v 选项还将在创建和提取模式下提供类似 ls 的详细信息。

    -``-version

    打印 tar 和 libarchive, 的版本,然后退出。

    , -``-confirmation, -``-interactive

    要求对每项操作进行确认。

    filename, -``-exclude-from filename

    从指定文件中读取排除模式列表。 有关排除处理的更多信息,请参见 -``-exclude 。

    -``-xattrs

    (仅限 c、r、u、x 模式)存档或提取扩展文件属性。 这与 -``-no-xattrs 和 c、r 和 u 模式下的默认行为相反,或者如果 tar 以 root 身份在 x 模式下运行。

    (仅限 c 模式)使用 bzip2(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 bzip2 压缩。

    , -``-compress, -``-uncompress

    (仅限 c 模式)使用 compress(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别压缩压缩。

    , -``-gunzip, - -gzip

    (仅限 c 模式)使用 gzip(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 gzip 压缩。

    以下环境变量会影响 tar 的执行:

    格式阅读器和压缩阅读器的默认选项。 -``-options 选项会覆盖此选项。

    格式编写器和压缩编写器的默认选项。 -``-options 选项会覆盖此选项。

    要使用的语言环境。 有关详细信息,请参阅 environ(7) 。

    默认设备。 -f 选项会覆盖它。 有关详细信息,请参阅上面的 -f 选项的说明。

    显示日期时使用的时区。 有关详细信息,请参阅 environ(7) 。

    The tar utility exits 0 on success, and >0 if an error occurs.

    下面创建一个名为 file.tar.gz 的新存档,其中包含两个文件 source.c 和 source.h:

    `tar` `-czf` file.tar.gz source.c source.h

    要查看此存档的详细目录:

    `tar` `-tvf` file.tar.gz

    要从默认磁带驱动器上的存档中提取所有条目:

    `tar` `-x`

    要检查 ISO 9660 cdrom 映像的内容:

    `tar` `-tf` image.iso

    要移动文件层次结构,请调用 tar 作为

    `tar` `-cf` - `-C` srcdir . | `tar` `-xpf` - `-C` destdir

    或更传统的

    cd srcdir ; `tar` `-cf` - . | (cd destdir ; `tar` `-xpf` -)

    在创建模式下,要归档的文件和目录的列表还可以包括 -Cfoo/baz 形式的目录更改指令和 @archive-file 形式的归档包含。例如,命令行

    `tar` `-c` `-f` new.tar foo1 `@`old.tgz `-C`/tmp foo2

    将创建一个新的存档 new.tar 。 tar 将从当前目录读取文件 foo1 并将其添加到输出存档中。 然后它将从 old.tgz 中读取每个条目并将这些条目添加到输出存档中。 最后,它将切换到 /tmp 目录并将 foo2- 添加到输出存档中。

    mtree(5) 格式的输入文件可用于创建具有与磁盘上现有数据不同的任意所有权、权限或名称的输出存档:

    $ cat input.mtree #mtree usr/bin uid=0 gid=0 mode=0755 type=dir usr/bin/ls uid=0 gid=0 mode=0755 type=file content=myls $ tar -cvf output.tar @input.mtree

    -``-newer 和 -``-newer-mtime 开关接受各种常见的日期和时间规范,包括 “12 Mar 2005 7:14:29pm”, “2005-03-12 19:14”, “5 minutes ago” 和 “19:14 PST May 1” 。

    -``-options 参数可用于控制归档生成或读取的各种细节。 例如,您可以生成仅包含 type, time 和 uid 关键字的 mtree 输出:

    `tar` `-cf` file.tar `-``-format=mtree` `-``-options='!all,type,time,uid'` dir

    或者您可以设置 gzip 或 xz 压缩使用的压缩级别:

    `tar` `-czf` file.tar `-``-options='compression-level=9'`.

    有关更多详细信息,请参阅 archive_read(3) 和 archive_write(3) 中描述的 archive_read_set_options() 和 archive_write_set_options() API 调用的说明。

    支持捆绑参数格式以与历史实现兼容。 它由一个初始单词(没有前导 - 字符)组成,其中每个字符表示一个选项。 参数作为单独的词跟随。 参数的顺序必须与捆绑命令字中相应字符的顺序相匹配。例如,

    `tar` `tbf 32` file.tar

    指定三个标志 t 、 b 和 f 。 b 和 f 标志都需要参数,因此命令行上必须有两个附加项。 32 是 b 标志的参数, file.tar 是 f 标志的参数。

    模式选项 c、r、t、u 和 x 以及选项 b、f、l、m、o、v 和 w 符合 SUSv2。

    为了获得最大的可移植性,调用 tar 的脚本应使用上述捆绑参数格式,应将自身限制为 c 、 t 和 x 模式以及 b 、 f 、 m 、 v 和 w 选项。

    提供了额外的长选项以提高与其他 tar 实现的兼容性。

    某些安全问题对于许多归档程序都很常见,包括 tar 。 特别是,精心制作的存档可以请求将文件 tar 解压缩到目标目录之外的位置。 这可能会导致不知情的用户覆盖他们不打算覆盖的文件。 如果超级用户正在提取存档,则系统上的任何文件都可能被覆盖。 这可以通过三种方式发生。 尽管 tar 具有针对每一个的保护机制,但精明的用户应该意识到其中的含义:

    • 存档条目可以有绝对路径名。 默认情况下, tar 在恢复文件名之前会从文件名中删除前导 / 字符以防止出现此问题。

    • 存档条目可以具有包含 .. 组件的路径名。 默认情况下, tar 不会提取路径名中包含 .. 组件的文件。 存档条目可以利用符号链接将文件恢复到其他目录。

    • 存档可以将符号链接恢复到另一个目录,然后使用该链接将文件恢复到该目录。 为了防止这种情况, tar 检查每个提取的路径中的符号链接。 如果最终路径元素是符号链接,它将被删除并替换为存档条目。 如果指定了 -U

    为了保护自己,您应该警惕来自不受信任来源的任何档案。 您应该检查存档的内容

    `tar` `-tf` filename

    提取前。 您应该使用 -k 选项来确保 tar 不会覆盖任何现有文件或使用 -U 选项来删除任何预先存在的文件。 在以超级用户权限运行时,您通常不应提取档案。 请注意, tar 的 -P 选项会禁用上述安全检查,并允许您在提取存档的同时保留任何绝对路径名、 .. 组件或指向其他目录的符号链接。

    bzip2(1), compress(1), cpio(1), gzip(1), mt(1), pax(1), shar(1), xz(1), libarchive(3), libarchive-formats(5), tar(5)

    tar 命令没有当前的 POSIX 标准;它出现在 ISO/IEC 9945-1:1996 (“POSIX.1”) 中,但从 IEEE Std 1003.1-2001 (“POSIX.1”) 中删除。 此实现支持的选项是通过调查许多现有的 tar 实现以及 tar 的旧 POSIX 规范和 pax 的当前 POSIX 规范来开发的。

    IEEE Std 1003.1-2001 (“POSIX.1”) 为 pax 命令定义了ustar 和 pax 交换文件格式。

    tar 命令出现在 1979 年 1 月发布的第七版 Unix 中。 还有许多其他实现,其中许多扩展了文件格式。 John Gilmore 的 pdtar 公共域实现(大约在 1987 年 11 月)非常有影响力,并形成了 GNU tar 的基础。 从 FreeBSD 1.0 开始,GNU tar 作为标准系统 tar 包含在 FreeBSD 中。

    这是基于 libarchive(3) 库的完整重新实现。 它于 2005 年 5 月首次与 FreeBSD 5.4 一起发布。

    该程序遵循 ISO/IEC 9945-1:1996 (“POSIX.1”) 对 -l 选项的定义。 请注意,1.15 版之前的 GNU tar 将 -l 视为 -``-one-file-system 选项的同义词。

    -C dir 选项可能与历史实现不同。

    所有存档输出都写入大小正确的块中,即使输出正在被压缩。 最后一个输出块是否填充到完整的块大小取决于格式和输出设备。 对于 tar 和 cpio 格式,如果输出正在写入标准输出或字符或块设备(如磁带驱动器),则将最后一个输出块填充到完整的块大小。 如果将输出写入常规文件,则不会填充最后一个块。 许多压缩器,包括 gzip(1) 和 bzip2(1) ,在解压缩由 tar 创建的档案时会抱怨空填充,尽管它们仍然可以正确解压。

    压缩和解压是在内部实现的,所以生成的压缩输出之间可能存在微不足道的差异

    `tar` `-czf` - file

    以及由

    `tar` `-cf` - file | `gzip`

    默认应该是读取和写入归档到标准 I/O 路径,但传统(和 POSIX)另有规定。

    r 和 u 模式要求存档未压缩并位于磁盘上的常规文件中。 可以使用带有 @archive-file 扩展名的 c 模式修改其他存档。

    要归档名为 @foo 或 -foo 的文件,您必须分别将其指定为 ./@foo 或 ./-foo 。

    在创建模式下,前导 ./ 总是被删除。 除非指定了 -P 选项,否则会去除前导 / 。

    在创建和提取时需要更好地支持文件选择。

    尚不支持多卷存档。

    使用 @- 约定在不同的存档格式(例如 tar 和 cpio)之间进行转换可能会导致硬链接信息丢失。 (这是不同归档格式存储硬链接信息的方式不兼容的结果。)

    January 31, 2020

    FreeBSD 13.1-RELEASE

    chdir.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    ,
    sha512
    ,
    size
    ,
    time
    ,
    uid
    ,
    uname 。
    默认等价于: “device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname 。”
    ,任何中间符号链接也将被无条件删除。 如果既没有指定
    -U
    也没有指定
    -P
    ,
    tar
    将拒绝提取条目。
    概要
    描述
    -c
    -r
    -t
    -u
    -x
    选项
    @
    -a
    -B
    -b
    -C
    -f
    -H
    -h
    -I
    -T
    -J
    -j
    -k
    -L
    -l
    -m
    -n
    -O
    -o
    -o
    iso9660:joliet
    iso9660:rockridge
    gzip:compression-level
    gzip:timestamp
    lrzip:compression
    lrzip:compression-level
    lz4:compression-level
    lz4:stream-checksum
    lz4:block-checksum
    lz4:block-size
    lz4:block-dependence
    zstd:compression-level
    lzop:compression-level
    xz:compression-level
    mtree:
    mtree:all
    mtree:use-set
    mtree:indent
    zip:compression
    zip:encryption
    zip:encryption
    read_concatenated_archives
    -P
    -p
    -q
    -S
    -s
    -T
    -U
    -v
    -w
    -X
    -y
    -Z
    -z
    环境
    TAR_READER_OPTIONS
    TAR_WRITER_OPTIONS
    LANG
    TAPE
    TZ
    退出状态
    实例
    兼容性
    安全
    参见
    标准
    历史
    缺陷
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称

    echotc.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。

    breaksw.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    fg.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    内置, !,

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    %
    ,
    .
    ,
    :
    ,
    @
    ,
    [
    ,
    {
    ,
    }
    ,
    alias
    ,
    alloc
    ,
    bg
    ,
    bind
    ,
    bindkey
    ,
    break
    ,
    breaksw
    ,
    builtins
    ,
    case
    ,
    cd
    ,
    chdir
    ,
    command
    ,
    complete
    ,
    continue
    ,
    default
    ,
    dirs
    ,
    do
    ,
    done
    ,
    echo
    ,
    echotc
    ,
    elif
    ,
    else
    ,
    end
    ,
    endif
    ,
    endsw
    ,
    esac
    ,
    eval
    ,
    exec
    ,
    exit
    ,
    export
    ,
    false
    ,
    fc
    ,
    fg
    ,
    filetest
    ,
    fi
    ,
    for
    ,
    foreach
    ,
    getopts
    ,
    glob
    ,
    goto
    ,
    hash
    ,
    hashstat
    ,
    history
    ,
    hup
    ,
    if
    ,
    jobid
    ,
    jobs
    ,
    kill
    ,
    limit
    ,
    local
    ,
    log
    ,
    login
    ,
    logout
    ,
    ls-F
    ,
    nice
    ,
    nohup
    ,
    notify
    ,
    onintr
    ,
    popd
    ,
    printenv
    ,
    printf
    ,
    pushd
    ,
    pwd
    ,
    read
    ,
    readonly
    ,
    rehash
    ,
    repeat
    ,
    return
    ,
    sched
    ,
    set
    ,
    setenv
    ,
    settc
    ,
    setty
    ,
    setvar
    ,
    shift
    ,
    source
    ,
    stop
    ,
    suspend
    ,
    switch
    ,
    telltc
    ,
    test
    ,
    then
    ,
    time
    ,
    times
    ,
    trap
    ,
    true
    ,
    type
    ,
    ulimit
    ,
    umask
    ,
    unalias
    ,
    uncomplete
    ,
    unhash
    ,
    unlimit
    ,
    unset
    ,
    unsetenv
    ,
    until
    ,
    wait
    ,
    where
    ,
    which
    ,
    while
    —

    shell 内置命令

    概要

    请参阅相应 shell 手册页中的内置命令描述。

    描述

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    !

    No

    No

    Yes

    %

    No

    Yes

    No

    .

    No

    No

    Yes

    :

    No

    Yes

    Yes

    @

    No

    Yes

    No

    [

    Yes

    No

    Yes

    {

    No

    No

    Yes

    }

    No

    No

    Yes

    alias

    No**

    Yes

    Yes

    alloc

    No

    Yes

    No

    bg

    No**

    Yes

    Yes

    bind

    No

    No

    Yes

    bindkey

    No

    Yes

    No

    break

    No

    Yes

    Yes

    breaksw

    No

    Yes

    No

    builtin

    No

    No

    Yes

    builtins

    No

    Yes

    No

    case

    No

    Yes

    Yes

    cd

    No**

    Yes

    Yes

    chdir

    No

    Yes

    Yes

    command

    No**

    No

    Yes

    complete

    No

    Yes

    No

    continue

    No

    Yes

    Yes

    default

    No

    Yes

    No

    dirs

    No

    Yes

    No

    do

    No

    No

    Yes

    done

    No

    No

    Yes

    echo

    Yes

    Yes

    Yes

    echotc

    No

    Yes

    No

    elif

    No

    No

    Yes

    else

    No

    Yes

    Yes

    end

    No

    Yes

    No

    endif

    No

    Yes

    No

    endsw

    No

    Yes

    No

    esac

    No

    No

    Yes

    eval

    No

    Yes

    Yes

    exec

    No

    Yes

    Yes

    exit

    No

    Yes

    Yes

    export

    No

    No

    Yes

    false

    Yes

    No

    Yes

    fc

    No**

    No

    Yes

    fg

    No**

    Yes

    Yes

    filetest

    No

    Yes

    No

    fi

    No

    No

    Yes

    for

    No

    No

    Yes

    foreach

    No

    Yes

    No

    getopts

    No**

    No

    Yes

    glob

    No

    Yes

    No

    goto

    No

    Yes

    No

    hash

    No**

    No

    Yes

    hashstat

    No

    Yes

    No

    history

    No

    Yes

    No

    hup

    No

    Yes

    No

    if

    No

    Yes

    Yes

    jobid

    No

    No

    Yes

    jobs

    No**

    Yes

    Yes

    kill

    Yes

    Yes

    Yes

    limit

    No

    Yes

    No

    local

    No

    No

    Yes

    log

    No

    Yes

    No

    login

    Yes

    Yes

    No

    logout

    No

    Yes

    No

    ls-F

    No

    Yes

    No

    nice

    Yes

    Yes

    No

    nohup

    Yes

    Yes

    No

    notify

    No

    Yes

    No

    onintr

    No

    Yes

    No

    popd

    No

    Yes

    No

    printenv

    Yes

    Yes

    No

    printf

    Yes

    No

    Yes

    pushd

    No

    Yes

    No

    pwd

    Yes

    No

    Yes

    read

    No**

    No

    Yes

    readonly

    No

    No

    Yes

    rehash

    No

    Yes

    No

    repeat

    No

    Yes

    No

    return

    No

    No

    Yes

    sched

    No

    Yes

    No

    set

    No

    Yes

    Yes

    setenv

    No

    Yes

    No

    settc

    No

    Yes

    No

    setty

    No

    Yes

    No

    setvar

    No

    No

    Yes

    shift

    No

    Yes

    Yes

    source

    No

    Yes

    No

    stop

    No

    Yes

    No

    suspend

    No

    Yes

    No

    switch

    No

    Yes

    No

    telltc

    No

    Yes

    No

    test

    Yes

    No

    Yes

    then

    No

    No

    Yes

    time

    Yes

    Yes

    No

    times

    No

    No

    Yes

    trap

    No

    No

    Yes

    true

    Yes

    No

    Yes

    type

    No**

    No

    Yes

    ulimit

    No**

    No

    Yes

    umask

    No**

    Yes

    Yes

    unalias

    No**

    Yes

    Yes

    uncomplete

    No

    Yes

    No

    unhash

    No

    Yes

    No

    unlimit

    No

    Yes

    No

    unset

    No

    Yes

    Yes

    unsetenv

    No

    Yes

    No

    until

    No

    No

    Yes

    wait

    No**

    Yes

    Yes

    where

    No

    Yes

    No

    which

    Yes

    Yes

    No

    while

    No

    Yes

    Yes

    参见

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    历史

    内置 手册页首次出现在 FreeBSD 3.4 中。

    作者

    本手册页由 Sheldon Hearn 编写 <[email protected] 。>

    December 21, 2010

    FreeBSD 13.1-RELEASE

    名称

    esac.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    exec.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    case.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。
    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。

    fi.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。

    foreach.1

    BUILTIN(1)

    BUILTIN(1)

    FreeBSD General Commands Manual

    BUILTIN(1)

    名称

    内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —

    shell 内置命令

    请参阅相应 shell 手册页中的内置命令描述。

    Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。

    如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。

    虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。

    此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。

    在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。

    Command

    External

    csh(1)

    sh(1)

    No

    No

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No**

    Yes

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    Yes

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No**

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No**

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No

    Yes

    No**

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    Yes

    No

    Yes

    No

    No

    Yes

    Yes

    Yes

    No

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No**

    No

    Yes

    No**

    No

    Yes

    No**

    Yes

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    No

    No

    Yes

    Yes

    No

    Yes

    No

    No

    No

    Yes

    No**

    Yes

    Yes

    No

    Yes

    No

    Yes

    Yes

    No

    No

    Yes

    Yes

    csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)

    内置 手册页首次出现在 FreeBSD 3.4 中。

    本手册页由 Sheldon Hearn 编写 < >

    December 21, 2010

    FreeBSD 13.1-RELEASE

    概要
    描述
    !
    %
    .
    :
    @
    [
    {
    }
    alias
    alloc
    bg
    bind
    bindkey
    break
    breaksw
    builtin
    builtins
    case
    cd
    chdir
    command
    complete
    continue
    default
    dirs
    do
    done
    echo
    echotc
    elif
    else
    end
    endif
    endsw
    esac
    eval
    exec
    exit
    export
    false
    fc
    fg
    filetest
    fi
    for
    foreach
    getopts
    glob
    goto
    hash
    hashstat
    history
    hup
    if
    jobid
    jobs
    kill
    limit
    local
    log
    login
    logout
    ls-F
    nice
    nohup
    notify
    onintr
    popd
    printenv
    printf
    pushd
    pwd
    read
    readonly
    rehash
    repeat
    return
    sched
    set
    setenv
    settc
    setty
    setvar
    shift
    source
    stop
    suspend
    switch
    telltc
    test
    then
    time
    times
    trap
    true
    type
    ulimit
    umask
    unalias
    uncomplete
    unhash
    unlimit
    unset
    unsetenv
    until
    wait
    where
    which
    while
    参见
    历史
    作者
    [email protected]
    。

    dialog.1

    DIALOG(1)

    DIALOG(1)

    FreeBSD General Commands Manual

    DIALOG(1)

    名称

    dialog - 显示来自 shell 脚本的对话框

    dialog --clear- dialog --create-rc file- dialog --print-maxsize- dialog common-options box-options

    Dialog 是一个程序,可让您使用 shell 脚本中的对话框提出各种问题或显示消息。实现了这些类型的对话框(尽管并非所有都必须编译成 dialog):

    buildlist, calendar, checklist, dselect, editbox, form, fselect, gauge, infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, msgbox (message), passwordbox, passwordform, pause, prgbox, programbox, progressbox, radiolist, rangebox, tailbox, tailboxbg, textbox, timebox, treeview 和 yesno (yes/no)。

    您可以将多个对话框放入脚本中:

    • 使用 "--and-widget" 标记强制 dialog 进入下一个对话框,除非您已按 ESC 取消,或者

    • 只需为下一个对话框添加标记,形成一个链。当 Dialog 的返回码不为零时,对话框停止链接,例如,Cancel 或 No(请参阅 DIAGNOSTICS)。

    一些小部件,例如清单,会将文本写入对话框的输出。通常这是标准错误,但有一些选项可以改变它: "--output-fd"、 "--stderr" 和 "--stdout"。 如果按下取消按钮(或 ESC),则不会写入任何文本;在这种情况下, dialog 会立即退出。

    所有选项都以 "--" 开头(两个 ASCII 连字符,为了那些使用具有混乱语言环境支持的系统的人的利益)。

    "--" 本身用作转义,即命令行上的下一个标记不被视为选项。

    dialog --title -- --Not an option

    "--args" 选项告诉 dialog 列出标准错误的命令行参数。这在使用 "--" 和 "--file" 调试复杂脚本时很有用,因为命令行可能会随着它们的扩展而被重写。

    "--file" 选项告诉对 dialog 从命名为它的值的文件中读取参数。

    dialog --file parameterfile

    不在双引号内的空格将被丢弃(使用反斜杠引用单个字符)。结果被插入命令行,替换 "--file" 及其选项值。命令行的解释从那时开始。如果 parameterfile 以 "&" 开头, dialog 将以下文本解释为文件描述符编号而不是文件名。

    大多数小部件接受 height 和 width 参数,可用于自动调整小部件的大小以适应多行消息 prompt 值:

    • 如果参数为负, dialog 使用屏幕的大小。

    • 如果参数为零,则 dialog 使用小部件的最小尺寸来显示 prompt 和数据。

    • 否则, dialog 使用小部件的给定大小。

    大多数常用选项在处理每个小部件之前都会被重置。

    --ascii-lines

    与其在框周围绘制图形线,不如在同一位置绘制 ASCII "+" 和 "-" i。参见 "--no-lines"。

    --aspect ratio

    这使您可以在使用自动调整大小时对框尺寸进行一些控制(将高度和宽度指定为 0)。它代表宽度/高度。默认值为 9,这意味着每 1 行高 9 个字符宽。

    --backtitle backtitle

    指定要在屏幕顶部的背景上显示的 backtitle 。

    --begin y x

    指定对话框左上角在屏幕上的位置。

    --cancel-label string

    覆盖用于 “Cancel” 按钮的标签。

    --clear

    清除小部件屏幕,仅保留 screen_color 背景。当您将小部件与 "--and-widget" 结合使用时,可以使用它来擦除屏幕上前一个小部件的内容,这样就不会在下一个小部件的内容下看到它。将此理解为 "--keep-window" 的补充。要比较效果,请使用这些:

    所有三个小部件都可见,层叠效果,按 1、2、3 排序:

    dialog \ --begin 2 2 --yesno "" 0 0 \ --and-widget --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0

    只有最后一个小部件是可见的:

    dialog \ --clear --begin 2 2 --yesno "" 0 0 \ --and-widget --clear --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0

    所有三个小部件都可见,楼梯效果,顺序 3、2、1:

    dialog \ --keep-window --begin 2 2 --yesno "" 0 0 \ --and-widget --keep-window --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0

    第一个和第三个小部件可见,楼梯效果,顺序 3,1:

    dialog \ --keep-window --begin 2 2 --yesno "" 0 0 \ --and-widget --clear --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0

    请注意,如果您想在对话框程序退出后恢复原始控制台颜色并将光标返回原处,请使用 clear (1) 命令。

    --colors

    通过以下字符解释对话框文本中嵌入的 "\Z" 序列,它告诉 dialog 设置颜色或视频属性:

    • 0 到 7 是 curses 中使用的 ANSI 颜色编号:分别为黑色、红色、绿色、黄色、蓝色、洋红色、青色和白色。

    • 粗体由“b”设置,由“B”重置。

    • 反向由'r'设置,由'R'重置。

    • 下划线由'u'设置,由'U'重置。

    --column-separator string

    告诉 dialog 在出现给定字符串时拆分单选框/复选框和菜单的数据,并将拆分的数据对齐到列中。

    --cr-wrap

    将对话框文本中嵌入的换行符解释为屏幕上的换行符。否则, dialog 只会在需要适合文本框的地方换行。

    即使您可以使用它来控制换行符, Dialog 仍然会换行任何对于框的宽度来说太长的行。如果没有 cr-wrap,您的文本布局可能会被格式化为在脚本的源代码中看起来不错,而不会影响它在对话框中的外观。

    cr-wrap 功能在以下条件下实施:

    • 字符串包含 “\n” 并且未使用 --no-nl-expand 选项,或者

    • 使用 --trim 选项。

    有关详细信息,请参阅 Whitespace 选项。

    --create-rc file

    当 dialog 支持运行时配置时,这可用于将示例配置文件转储到 file 指定的文件中。

    --date-format format

    如果主机提供 strftime, 则此选项允许您为 --calendar 小部件指定打印日期的格式。一天中的时间(小时、分钟、秒)是当前本地时间。

    --defaultno

    将 yes/no 框的默认值设为 No 。 同样,将提供 “OK” 和 “Cancel” 的小部件的默认按钮设为 Cancel。 如果给定了 "--nocancel" 或 "--visit-items" ,这些选项将覆盖此选项,使默认按钮始终为 “Yes” (内部与 “OK” 相同)。

    --default-button string

    在小部件中设置默认(预选)按钮。通过预先选择一个按钮,脚本使用户可以简单地按 Enter 以通过最少的交互来继续对话框。

    选项的值是按钮的名称: ok, yes, cancel, no, help 或 extra。

    通常每个小部件中的第一个按钮是默认按钮。显示的第一个按钮由小部件与 "--nook" 和 "--nocancel " 选项一起确定。如果未给出此选项,则没有分配默认按钮。

    --default-item string

    在清单、表单或菜单框中设置默认项目。通常,框中的第一项是默认值。

    --exit-label string

    覆盖用于 “EXIT” 按钮的标签。

    --extra-button

    在 “OK” 和 “Cancel” 按钮之间显示一个额外的按钮。

    --extra-label string

    覆盖用于 “Extra” 按钮的标签。注意:对于输入菜单小部件,默认为 “Rename”。

    --help

    将帮助消息打印到标准输出并退出。如果没有给出选项,或者给出了无法识别的选项,也会打印帮助消息。

    --help-button

    在 “OK” 和 “Cancel” 按钮之后显示帮助按钮,例如,在清单、单选列表和菜单框以及其他具有 “OK” 按钮的小部件中,无论是否使用 “Cancel” 按钮。

    退出时,返回状态将指示已按下帮助按钮。 Dialog 还会在令牌 “HELP” 之后向其输出写入一条消息:

    • 如果还给出了 "--item-help" ,则将写入项目帮助文本。

    • 否则,将写入项目的标签(第一个字段)。

    您可以使用 --help-tags 选项和/或设置 DIALOG_ITEM_HELP 环境变量来修改这些消息和退出状态。

    --help-label string

    覆盖用于 “Help” 按钮的标签。

    --help-status

    如果选择了帮助按钮,则在项目帮助 “HELP” 信息之后写入清单、单选列表或表单信息。这可用于在处理帮助请求后重建检查表的状态。

    --help-tags

    修改退出时为 --help-button 编写的消息,使它们始终只是项目的标签。这不会影响退出状态代码。

    --hfile filename

    当用户按下 F1 时,使用文本框显示给定的文件。

    --hline string

    显示在小部件底部居中的给定字符串。

    --ignore

    忽略 dialog 无法识别的选项。无论如何都会忽略一些众所周知的,例如 "--icon" ,但这是与其他实现兼容的更好选择。

    --input-fd fd

    从给定的文件描述符中读取键盘输入。大多数 dialog 脚本从标准输入读取,但仪表小部件读取管道(始终是标准输入)。当 dialog 尝试重新打开终端时,某些配置无法正常工作。如果您的脚本必须在该类型的环境中工作,请使用此选项(适当地处理文件描述符)。

    --insecure

    通过为每个字符回显星号,使密码小部件更友好但更不安全。

    --iso-week

    根据 ISO-8601 设置 "--calendar" 选项中显示的周数的起始点,从第一周开始编号,包括一月的星期四。

    --item-help

    解释清单、单选清单和菜单框的标签数据,为当前选定的项目添加一个显示在屏幕底部的列。

    --keep-tite

    当使用 ncurses 构建时, dialog 通常会检查它是否在 xterm 中运行,并且在这种情况下会尝试抑制使其切换到备用屏幕的初始化字符串。在多次运行 dialog 的脚本中,在正常屏幕和备用屏幕之间切换会在视觉上分散注意力。使用此选项允许 dialog 使用这些初始化字符串。

    --keep-window

    通常,当 dialog 执行通过 "--and-widget" 连接的几个 tailboxbg 小部件时,它会通过在旧小部件上绘画来清除屏幕上的旧小部件。使用此选项来禁止重新绘制。

    在退出时, dialog 会重新绘制所有标记为 "--keep-window" 的小部件,即使它们不是 tailboxbg 小部件。这会导致它们以相反的顺序重新绘制。有关示例,请参见 "--clear" 选项的讨论。

    --last-key

    在退出时,报告用户输入的最后一个键。这是 curses 键码,而不是符号或文字字符。脚本可以使用它来区分绑定到同一操作的两个键。

    --max-input size

    将输入字符串限制为给定大小。如果未指定,则限制为 2048。

    --no-cancel

    --nocancel

    在清单、输入框和菜单框模式下抑制 “Cancel” 按钮。如果用户按下 ESC 键取消退出,脚本仍然可以测试。

    --no-collapse

    通常, dialog 将制表符转换为空格,并将多个空格减少为单个空格,用于显示在消息框等中的文本。使用此选项可禁用该功能。请注意, dialog 仍将换行文本,这取决于 "--cr-wrap" 和 "--trim" 选项。

    The no-collapse 功能的实施取决于以下条件:

    • 字符串包含 “\n” 并且未使用 --no-nl-expand 选项,或者

    • 不使用 --trim 选项。

    有关详细信息,请参阅 Whitespace 选项。

    --no-items

    一些小部件 (checklist, inputmenu, radiolist, menu) 显示一个包含两列( “tag” 和 “item”, 即 “description”)的列表。此选项告诉 dialog 读取较短的行,省略列表的 “item” 部分。这有时很有用,例如,如果标签提供了足够的信息。

    另请参阅 --no-tags 。如果两个选项都给出,则忽略此选项。

    --no-kill

    告诉 dialog 将 tailboxbg 框放在后台,将其进程 ID 打印到 dialog 的输出。SIGHUP 对后台进程禁用。

    --no-label string

    覆盖用于 “No” 按钮的标签。

    --no-lines

    与其在盒子周围画线,不如在同一个地方画空间。另见 "--ascii-lines" 。

    --no-mouse

    不要启用鼠标。

    --no-nl-expand

    不要将 message/prompt 文本的 "\n" 子字符串转换为文字换行符。

    仅当字符串包含 “\n” 时才使用 no-nl-expand 功能,以便有一些东西可以转换。

    有关详细信息,请参阅 Whitespace 选项。

    --no-ok

    --nook

    在清单、输入框和菜单框模式下抑制 “OK” 按钮。脚本仍然可以测试用户是否按下 “Enter” 键来接受数据。

    --no-shadow

    抑制将在每个对话框的右侧和底部绘制的阴影。

    --no-tags

    一些小部件(清单、输入菜单、单选列表、菜单)显示一个包含两列(“ “tag” 和 “description”)的列表。该标签对脚本很有用,但可能对用户没有帮助。 --no-tags 选项(来自 Xdialog)可用于抑制显示中的标签列。与 --no-items 选项不同,这不会影响从脚本中读取的数据。

    Xdialog 不显示类似的构建列表和树视图小部件的标签列; dialog 也是如此。

    通常, dialog 允许您通过将单个字符与标记的第一个字符匹配来快速移动到显示列表中的条目。 当给出 --no-tags 选项时, dialog 与描述的第一个字符匹配。 在任何一种情况下,可匹配的字符都会突出显示。

    --ok-label string

    覆盖用于 “OK” 按钮的标签。

    --output-fd fd

    直接输出到给定的文件描述符。 大多数 dialog 本都会写入标准错误,但也可能会在那里写入错误消息,具体取决于您的脚本。

    --separator string

    --output-separator string

    指定一个字符串,它将 dialog 输出上的输出与清单分开,而不是换行符(用于 --separate-output )或空格。 这适用于通常使用换行符的其他小部件,例如表单和编辑框。

    --print-maxsize

    将对话框的最大尺寸(即屏幕尺寸)打印到 dialog 的输出。 这可以单独使用,没有其他选项。

    --print-size

    初始化对话框时,将每个对话框的大小打印到 dialog 的输出。

    --print-text-only string [ height [ width ] ]

    打印字符串,因为它将被包装在 dialog 输出的消息框中。

    因为可选的 height 和 width 默认为零,如果省略它们, dialog 会根据屏幕尺寸自动调整大小。

    --print-text-size string [ height [ width ] ]

    将字符串的大小打印到 dialog 的输出中,就像它包装在消息框中一样

    height width

    因为可选的 height 和 width 参数默认为零,如果省略它们, dialog 会根据屏幕尺寸自动调整大小。

    --print-version

    将 dialog 的版本打印到 dialog 的输出。 这可以单独使用,没有其他选项。 它不会导致 dialog 自行退出。

    --quoted

    通常 dialog 引用检查表返回的字符串以及项目帮助文本。 使用此选项引用所有字符串结果。

    --reorder

    默认情况下,构建列表小部件对输出(右)列表使用与输入(左)相同的顺序。 使用此选项告诉 dialog 使用用户将选择添加到输出列表的顺序。

    --scrollbar

    对于拥有一组可滚动数据的小部件,在其右边距上绘制一个滚动条。 这不会响应鼠标。

    --separate-output

    对于某些小部件(buildlist、checklist、treeview),一次输出一行,不带引号。这有利于另一个程序的解析。

    --separate-widget string

    指定一个字符串,它将对话框的输出与每个小部件分开。这用于简化解析具有多个小部件的对话框的结果。如果未给出此选项,则默认分隔符字符串是制表符。

    --shadow

    在每个对话框的右侧和底部绘制阴影。

    --single-quoted

    根据需要使用单引号(如果不需要,则不要使用引号)作为清单和项目帮助文本的输出。如果未设置此选项,则 dialog 在每个项目周围使用双引号。 在任何一种情况下, dialog 都会添加反斜杠以使输出在 shell 脚本中有用。

    --size-err

    在尝试使用之前检查对话框的结果大小,如果结果大小大于屏幕,则打印结果大小。(此选项已过时,因为检查了所有新窗口调用)。

    --sleep secs

    处理对话框后休眠(延迟)给定的秒数。

    --stderr

    直接输出到标准错误。这是默认设置,因为 curses 通常会将屏幕更新写入标准输出。

    --stdout

    直接输出到标准输出。提供此选项是为了与 Xdialog 兼容,但不建议在可移植脚本中使用它,因为 curses 通常会将其屏幕更新写入标准输出。如果您使用此选项, dialog 会尝试重新打开终端,以便它可以写入显示器。 根据平台和您的环境,这可能会失败。

    --tab-correct

    将每个制表符转换为一个或多个空格(对于 textbox 小部件;否则转换为单个空格)。 否则,选项卡将根据 curses 库的解释呈现。 --no-collapse 选项禁用选项卡扩展。

    --tab-len n

    如果给出 "--tab-correct" 选项,则指定制表符占用的空格数。 默认值为 8。此选项仅对 textbox 小部件有效。

    --time-format format

    如果主机提供 strftime, 则此选项允许您指定为 --timebox 小部件打印的时间格式。 在这种情况下,日、月、年值是针对当前本地时间的。

    --timeout secs

    如果在给定的秒数内没有用户响应,则超时(退出并显示错误代码)。 忽略零秒超时。

    "--pause" 小部件忽略此选项。如果后台 "--tailboxbg" 选项用于设置多个并发小部件,它也会被覆盖。

    --title title

    指定要在对话框顶部显示的 title 字符串。

    --trace filename

    将命令行参数、击键和其他信息记录到给定文件中。 如果 dialog 读取配置文件,它也会被记录下来。记录到 gauge 小部件的管道输入。使用 control/T 记录当前对话窗口的图片。

    dialog 程序专门处理一些命令行参数,并在处理它们时将它们从参数列表中删除。例如,如果第一个选项是 --trace, 则在 dialog 初始化显示之前对其进行处理(并删除)。

    --week-start day

    设置一周的开始日期,在 "--calendar" 选项中使用。 day 参数可以是

    • 一个数字(0 到 6,周日到周六,使用 POSIX)或

    • 特殊值 “locale” 这适用于使用 glibc 的系统,为 locale 命令提供扩展,即 first_weekday 值)。

    • 与 calendar 小部件中显示的星期几的缩写之一匹配的字符串,例如, “Mo” 表示 “Monday”。

    --trim

    消除前导空格,修剪文字换行符和消息文本中的重复空格。

    trim 功能在以下条件下实施:

    • 字符串不包含 “\n” 或

    • 使用 --no-nl-expand 选项。

    有关详细信息,请参阅 Whitespace 选项。

    另请参阅 "--cr-wrap" 和 "--no-collapse" 选项。

    --version

    将 dialog 的版本打印到标准输出,然后退出。另见 "--print-version"。

    --visit-items

    修改 checklist、radiolist、menubox 和 inputmenu 的 tab-traversal 以包含项目列表作为状态之一。这作为视觉辅助很有用,即光标位置可以帮助某些用户。

    给出此选项时,光标最初放置在列表上。缩写(标签的第一个字母)适用于列表项。如果您选择按钮行,则缩写适用于按钮。

    --yes-label string

    覆盖用于 “Yes” 按钮的标签。

    所有对话框都至少有三个参数:

    text

    方框的标题或内容。

    height

    对话框的高度。

    width

    对话框的宽度。

    其他参数取决于盒子类型。

    --buildlist text height width list-height [ tag item status ] ...

    buildlist 对话框并排显示两个列表。左侧的列表显示未选择的项目。右侧的列表显示所选项目。选择或取消选择项目时,它们会在列表之间移动。

    使用回车或 “OK” 按钮接受所选窗口中的当前值并退出。 使用所选窗口中显示的顺序写入结果。

    每个条目的初始开/关状态由 status 指定。

    该对话框的行为类似于 menu ,使用 --visit-items 来控制是否允许光标直接访问列表。

    • 如果 --visit-items 没有给出,tab-traversal 使用两种状态(OK/Cancel)。

    • 如果给出 --visit-items ,则tab-traversal 使用四种状态(左/右/确定/取消)。

    无论是否给出 --visit-items ,都可以使用默认的 "^" (左列)和 "$" (右列)键在两个列表之间移动突出显示。

    退出时,打开的那些条目的 tag 字符串列表将打印在 dialog 的输出中。

    如果未给出 "--separate-output" 选项,则将根据需要引用字符串,以使脚本可以简单地分隔它们。默认情况下,这使用双引号。请参阅修改引用行为的 "--single-quoted" 选项。

    --calendar text height width day month year

    calendar 框在可单独调节的窗口中显示月、日和年。如果日、月或年的值缺失或为负,则使用当前日期的对应值。您可以使用左箭头、上箭头、右箭头和下箭头来增加或减少其中的任何一个。使用 vi 风格的 h、j、k 和 l 来移动一个月中的天数数组。使用 tab 或 backtab 在窗口之间移动。如果年份为零,则使用当前日期作为初始值。

    退出时,日期以日/月/年的形式打印。 可以使用 --date-format 选项覆盖格式。

    --checklist text height width list-height [ tag item status ] ...

    checklist 框类似于 menu 框。有多个条目以菜单的形式呈现。另一个区别是您可以通过将其 status 设置为 on 来指示当前选择了哪个条目。用户可以打开或关闭每个条目,而不是从条目中选择一个条目。每个条目的初始开/关状态由 status 指定。

    退出时,打开的那些条目的 tag 字符串列表将打印在 dialog 的输出中。

    如果未给出 "--separate-output" 选项,则将根据需要引用字符串,以使脚本可以简单地分隔它们。默认情况下,这使用双引号。 请参阅修改引用行为的 "--single-quoted" 选项。

    --dselect filepath height width

    目录选择对话框显示一个文本输入窗口,您可以在其中键入一个目录,在该窗口上方还有一个带有目录名称的窗口。

    这里的 filepath 可以是一个文件路径,在这种情况下,目录窗口将显示路径的内容,而文本输入窗口将包含预选的目录。

    使用制表键或箭头键在窗口之间移动。在目录窗口中,使用向上/向下箭头键滚动当前选择。使用空格键将当前选择复制到文本输入窗口中。

    键入任何可打印字符会将焦点切换到文本输入窗口,输入该字符并将目录窗口滚动到最接近的匹配项。

    使用回车或 “OK” 按钮接受文本输入窗口中的当前值并退出。

    退出时,文本输入窗口的内容被写入 dialog 的输出。

    --editbox filepath height width

    编辑框对话框显示文件的副本。您可以使用 backspace、 delete 和光标键对其进行编辑,以纠正打字错误。它还可以识别 pageup/pagedown。与 --inputbox 不同,您必须按 Tab 键选择 “OK” 或 “Cancel” 按钮才能关闭对话框。在框中按 “Enter” 键将拆分相应的行。

    退出时,编辑窗口的内容被写入 dialog 的输出。

    --form text height width formheight [ label y x item y x flen ilen ] ...

    form 对话框显示由标签和字段组成的表单,这些标签和字段通过脚本中给定的坐标定位在可滚动窗口上。字段长度 flen 和输入长度 ilen 表示字段可以有多长。前者定义了为选定字段显示的长度,而后者定义了在该字段中输入的数据的允许长度。

    • 如果 flen 为零,则不能更改相应的字段。字段的内容决定了显示的长度。

    • 如果 flen 为负数,则对应的字段不能改变,取 flen 的负值作为显示长度。

    • 如果 ilen 为零,则设置为 flen。

    使用向上/向下箭头(或 control/N、control/P)在字段之间移动。使用选项卡在窗口之间移动。

    退出时,表单字段的内容被写入 dialog 的输出,每个字段由换行符分隔。 用于填充不可编辑字段( flen 为零或负数)的文本不会被写出。

    --fselect filepath height width

    The fselect (文件选择)对话框显示一个文本输入窗口,您可以在其中键入文件名(或目录),在这两个窗口上方有目录名和文件名。

    这里的 filepath 可以是一个文件路径,在这种情况下,文件和目录窗口将显示路径的内容,而文本输入窗口将包含预选的文件名。

    使用制表键或箭头键在窗口之间移动。在目录或文件名窗口中,使用向上/向下箭头键滚动当前选择。使用空格键将当前选择复制到文本输入窗口中。

    键入任何可打印字符会将焦点切换到文本输入窗口,输入该字符并将目录和文件名窗口滚动到最接近的匹配。

    键入空格字符会强制 dialog 完成当前名称(直到可能与多个条目匹配)。

    使用回车或 “OK” 按钮接受文本输入窗口中的当前值并退出。

    退出时,文本输入窗口的内容被写入 dialog 的输出。

    --gauge text height width [percent]

    gauge 框在框的底部显示一个仪表。仪表显示百分比。从标准输入读取新的百分比,每行一个整数。仪表会更新以反映每个新的百分比。如果标准输入读取字符串 “XXX” ,那么后面的第一行作为一个整数百分比,然后到另一个 “XXX” 的后续行用于新的提示。当标准输入达到 EOF 时,仪表退出。

    percent 值表示仪表中显示的初始百分比。如果未指定,则为零。

    退出时,不会将任何文本写 dialog 的输出。 小部件不接受任何输入,因此退出状态始终为 OK。

    --infobox text height width

    info 框基本上是一个 message 框。 但是,在这种情况下, dialog 将在向用户显示消息后立即退出。 dialog 退出时屏幕不会被清除,因此消息将一直保留在屏幕上,直到稍后调用 shell 脚本将其清除。当您想要通知用户正在进行的某些操作可能需要一些时间才能完成时,这很有用。

    退出时,不会将任何文本写入 dialog 的输出。返回 OK 退出状态。

    --inputbox text height width [init]

    当您要提出要求用户输入字符串作为答案的问题时, input 很有用。 如果提供了 init,则它用于初始化输入字符串。 输入字符串时,可以使用 backspace、 delete 和光标键来纠正输入错误。如果输入字符串的长度超出了对话框可以容纳的长度,则输入字段将被滚动。

    退出时,输入字符串将打印在 dialog 的输出中。

    --inputmenu text height width menu-height [ tag item ] ...

    inputmenu 框与普通 menu 框非常相似。它们之间只有几个区别:

    条目不会自动居中,而是会进行左调整。

    一个额外的按钮(称为 Rename) 暗示在按下时重命名当前项目。

    可以通过按 Rename 按钮来重命名当前条目。然后 dialog 将在 dialog 的输出中写入以下内容。

    RENAMED

    --menu text height width menu-height [ tag item ] ...

    顾名思义, menu 框就是一个对话框,可以用来以菜单的形式呈现一个选项列表供用户选择。 选项按给定顺序显示。每个菜单条目由一个 tag 字符串和一个 item 字符串组成。 该 tag 为条目提供了一个名称,以将其与菜单中的其他条目区分开来。该 item 是该条目所代表的选项的简短描述。 用户可以通过按光标键、 tag 的第一个字母作为热键或数字键 1 到 9 在菜单条目之间移动。 菜单中一次显示 menu-height 条目,但如果条目多于该条目,菜单将滚动。

    退出时,所选菜单条目的 tag 将打印在 dialog 的输出中。 如果给出 "--help-button" 选项,如果用户选择帮助按钮,将打印相应的帮助文本。

    --mixedform text height width formheight [ label y x item y x flen ilen itype ] ...

    mixedform 对话框显示一个由标签和字段组成的表单,很像 --form 对话框。它的不同之处在于在每个字段的描述中添加了一个字段类型参数。类型中的每个位表示字段的一个属性:

    1

    隐藏,例如密码字段。

    2

    只读,例如标签。

    --mixedgauge text height width percent [ tag1 item1 ] ...

    mixedgauge 框在框的底部显示一个仪表。仪表显示百分比。

    它还在框的顶部显示 tag- 和 item-值的列表。 有关标签值,请参见 dialog(3) 。

    text 显示为列表和仪表之间的标题。 percent 值表示仪表中显示的初始百分比。

    没有像 --gauge 那样从标准输入读取数据。

    退出时,不会将任何文本写入 dialog 的输出。小部件不接受任何输入,因此退出状态始终为 OK。

    --msgbox text height width

    message 框与 yes/no 框非常相似。 message 框和 yes/no 框之间的唯一区别是 message 框只有一个 OK 按钮。 您可以使用此对话框显示您喜欢的任何消息。阅读完消息后,用户可以按 ENTER 键,这样 dialog 就会退出,调用的 shell 脚本可以继续运行。

    如果消息对于空间来说太大, dialog 可能允许您滚动它,前提是底层的 curses 实现足够强大。在这种情况下,百分比显示在小部件的底部。

    退出时,不会将任何文本写入 dialog 的输出。仅提供 “OK” 按钮用于输入,但可能返回ESC退出状态。

    --pause text height width seconds

    pause 框在框的底部显示一个仪表。仪表指示距离暂停结束还剩多少秒。当达到超时或用户按下 OK 按钮(状态 OK)或用户按下 CANCEL 按钮或 Esc 键时,暂停退出。

    --passwordbox text height width [init]

    password 框类似于输入框,只是不显示用户输入的文本。这在提示输入密码或其他敏感信息时很有用。请注意,如果在 “init” 中传递了任何内容,它将在系统的进程表中对临时窥探者可见。此外,为用户提供他们看不到的默认密码也会让用户感到非常困惑。由于这些原因,强烈建议不要使用 “init” 。 如果您不关心密码,请参阅 "--insecure" 。

    退出时,输入字符串将打印在对话框的输出中。

    --passwordform text height width formheight [ label y x item y x flen ilen ] ...

    这与 --form 相同,只是所有文本字段都被视为 password 小部件而不是 inputbox 小部件。

    --prgbox text command height width

    --prgbox command height width

    prgbox 与 programbox 框非常相似。

    此对话框用于显示指定为 prgbox 参数的命令的输出。

    命令完成后,用户可以按 ENTER 键,这样 dialog 就会退出,调用的 shell 脚本可以继续运行。

    如果给出三个参数,它会在标题下显示文本,从滚动文件的内容中划定。如果仅给出两个参数,则省略此文本。

    --programbox text height width

    --programbox height width

    programbox 框与 progressbox 框非常相似。 program 框和 progress 框的唯一区别是 program 框显示一个 OK 按钮(但仅在命令完成后)。

    此对话框用于显示命令的管道输出。命令完成后,用户可以按 ENTER 键,这样 dialog 就会退出,调用的 shell 脚本可以继续运行。

    如果给出三个参数,它会在标题下显示文本,从滚动文件的内容中划定。 如果仅给出两个参数,则省略此文本。

    --progressbox text height width

    --progressbox height width

    progressbox 框类似于 tailbox 框,不同之处在于

    a) 而不是显示文件的内容,它显示命令的管道输出和

    b) 到达文件末尾时将退出(没有 “OK” 按钮)。

    如果给出三个参数,它会在标题下显示文本,从滚动文件的内容中划定。如果仅给出两个参数,则省略此文本。

    --radiolist text height width list-height [ tag item status ] ...

    radiolist 框类似于 menu 框。 唯一的区别是您可以通过将其 status 设置为 on 来指示当前选择了哪个条目。

    退出时,所选项目的标签将写入 dialog 的输出。

    --tailbox file height width

    在对话框中显示文件中的文本,如 "tail -f" 命令。使用 vi 风格的“h”和“l”或箭头键向左/向右滚动。'0' 重置滚动。

    退出时,不会将任何文本写入 dialog 的输出。 仅提供 “OK” 按钮用于输入,但可能返回ESC退出状态。

    --rangebox text height width min-value max-value default-value

    允许用户从一系列值中进行选择,例如,使用滑块。该对话框将当前值显示为条形(如仪表对话框)。制表符或箭头键在按钮和值之间移动光标。当光标位于该值上时,您可以通过以下方式对其进行编辑:

    左/右光标移动以选择要修改的数字

    +/-

    将数字递增/递减一位的字符

    0 到 9

    将数字设置为给定值

    在所有光标位置也可以识别一些键:

    home/end

    将值设置为其最大值或最小值

    pageup/pagedown

    增加值,使滑块移动一列

    --tailboxbg file height width

    在对话框中显示文件中的文本作为后台任务,如 "tail -f &" 命令。使用 vi 风格的“h”和“l”或箭头键向左/向右滚动。'0' 重置滚动。

    Dialog 如果屏幕上同时存在其他小部件 (--and-widget) ,则 Dialog 会特别处理后台任务。 直到这些小部件关闭(例如, “OK”), dialog 将在同一进程中执行所有 tailboxbg 小部件,轮询更新。 您可以使用选项卡在屏幕上的小部件之间遍历,并单独关闭它们,例如,按 ENTER 。 关闭非 tailboxbg 小部件后, dialog 会将自身的副本分叉到后台,如果给出 "--no-kill" 选项,则打印其进程ID。

    退出时,不会将任何文本写入 dialog 的输出。仅提供 “EXIT” 按钮用于输入,但可能返回ESC退出状态。

    注意:旧版本的 dialog 立即分叉并尝试单独更新屏幕。除了不利于性能之外,它是行不通的。一些较旧的脚本可能无法与轮询方案一起正常工作。

    --textbox file height width

    text 框允许您在对话框中显示文本文件的内容。它就像一个简单的文本文件查看器。用户可以使用大多数键盘上可用的光标、向上翻页、向下翻页和 HOME/END 键在文件中移动。如果行太长而无法显示在框中,可以使用 LEFT/RIGHT 键水平滚动文本区域。您也可以使用 vi 风格的键 h、j、k 和 l 代替光标键,并使用 B 或 N 代替上翻页和下翻页键。使用 vi 风格的 “k” 和 “j” 或箭头键向上/向下滚动。 使用 vi 风格的 “h” 和 “l” 或箭头键向左/向右滚动。

    退出时,不会将任何文本写入 dialog 的输出。 仅提供 “EXIT” 按钮用于输入,但可能返回ESC退出状态。

    --timebox text height [width hour minute second]

    将显示一个对话框,允许您选择小时、分钟和秒。如果小时、分钟或秒的值缺失或为负,则使用当前日期的对应值。您可以使用左箭头、上箭头、右箭头和下箭头增加或减少其中的任何一个。使用 tab 或 backtab 在窗口之间移动。

    退出时,结果以小时:分钟:秒的形式打印。可以使用 --time-format 选项覆盖格式。

    --treeview text height width list-height [ tag item status depth ] ...

    显示组织为树的数据。每组数据包含一个标签、要为项目显示的文本、其状态 (“on” 或 “off”) 以及项目在树中的深度。

    只能选择一项(如 radiolist)。 不显示标签。

    退出时,所选项目的标签将写入 dialog 的输出。

    --yesno text height width

    将显示大小 height 行按 width 列的 yes/no 对话框。 text 指定的字符串显示在对话框内。如果这个字符串太长而不能放在一行中,它会在适当的地方自动分成多行。 text 字符串还可以包含子字符串 "" 或换行符 `' 以显式控制换行。 此对话框对于询问需要用户回答是或否的问题很有用。该对话框有一个 Yes 按钮和一个 No 按钮,用户可以通过按 TAB 键在其中切换。

    退出时,不会将任何文本写入 dialog 的输出。除了 “Yes” 和 “No” 退出代码(参见诊断)之外,还可能返回 ESC 退出状态。

    用于 “Yes” 和 “No” 的代码与用于 “OK” 和 “Cancel” 的代码相匹配,内部没有区别。

    --beep

    这用于告诉原始 cdialog 当 tailboxbg 小部件的单独进程重新绘制屏幕时它应该发出哔声。

    --beep-after

    在用户通过按下其中一个按钮完成小部件后发出哔声。

    这些选项可用于在对话框读取脚本时转换空格(空格、制表符、换行符):

    --cr-wrap, --no-collapse, --no-nl-expand, and --trim

    选项不是独立的:

    • Dialog 检查脚本是否包含至少一个 “\n” 并且(除非设置了 --no-nl-expand )将忽略 --no-collapse 和 --trim 选项。

    • 在检查 “\n” 和 --no-nl-expand 选项后, dialog 处理 --trim 选项。

    如果 --trim 选项生效,则对话框忽略 dialog ignores --no-collapse 。 它将制表符、空格(和换行符,除非设置了 -cr-wrap )的序列更改为单个空格。

    •

    如果 “\n” 或 --trim 情况都不适用, dialog 会检查 --no-collapse 以决定是否将制表符和空格的序列减少到单个空格。

    在这种情况下, dialog 会忽略 -cr-wrap 并且不会修改换行符。

    考虑到这些依赖关系,下表总结了各种选项组合的行为。 该表假定当未设置 --no-nl-expand 选项时脚本至少包含一个 “\n” 。

    cr-

    no-

    no-

    trim

    Result

    wrap

    collapse

    nl-expand

    no

    no

    no

    no

    将制表符转换为空格。将换行符转换为空格。将 “\n” 转换为换行符。

    no

    no

    no

    yes

    将制表符转换为空格。将换行符转换为空格。将 “\n” 转换为换行符。

    no

    no

    yes

    no

    将制表符转换为空格。不要将换行符转换为空格。将多空间转换为单空间。按字面意思显示 “\n” 。

    no

    no

    yes

    yes

    将制表符转换为空格。将多空间转换为单空间。将换行符转换为空格。按字面意思显示 “\n” 。

    no

    yes

    no

    no

    将换行符转换为空格。将 “\n” 转换为换行符。

    no

    yes

    no

    yes

    将换行符转换为空格。将 “\n” 转换为换行符。

    no

    yes

    yes

    no

    不要将换行符转换为空格。不要减少多个空白。按字面意思显示 “\n” 。

    no

    yes

    yes

    yes

    将多个空格转换为单个空格。将换行符转换为空格。按字面意思显示 “\n” 。

    yes

    no

    no

    no

    将制表符转换为空格。换行。将 “\n” 转换为换行符。

    yes

    no

    no

    yes

    将制表符转换为空格。换行。将 “\n” 转换为换行符。

    yes

    no

    yes

    no

    将制表符转换为空格。不要将换行符转换为空格。将多空间转换为单空间。按字面意思显示 “\n” 。

    yes

    no

    yes

    yes

    将制表符转换为空格。将多空间转换为单空间。换行。按字面意思显示 “\n” 。

    yes

    yes

    no

    no

    换行换行。将 “\n” 转换为换行符。

    yes

    yes

    no

    yes

    换行符换行。将 “\n” 转换为换行符。

    yes

    yes

    yes

    no

    不要将换行符转换为空格。不要减少多个空白。按字面意思显示 “\n” 。

    yes

    yes

    yes

    yes

    将多个空格转换为单个空格。换行。按字面意思显示 “\n” 。

    通过键入以下内容创建示例配置文件:

    dialog --create-rc file

    开始时, dialog 确定要使用的设置,如下所示:

    a)

    如果设置了环境变量 DIALOGRC ,它的值决定了配置文件的名称。

    b)

    如果没有找到 (a) 中的文件,则使用文件 $HOME/.dialogrc 作为配置文件。

    c)

    如果没有找到 (b) 中的文件,请尝试使用在编译时确定的 GLOBALRC 文件,即 /etc/dialogrc。

    d)

    如果 (c) 中的文件未找到,则使用默认编译。

    编辑示例配置文件并将其复制到 dialog 可以找到的某个位置,如上面的步骤 2 所述。

    您可以通过添加到配置文件来覆盖或添加到 dialog 中的键绑定。 Dialog 的 bindkey 命令将单个键映射到其内部编码。

    bindkey widget curses_key dialog_key

    widget 名称可以是 "*" (所有小部件)或特定小部件,例如 textbox 。 特定的小部件绑定会覆盖 "*" 绑定。 用户定义的绑定会覆盖内置绑定。

    curses_key 可以是从 curses.h 派生的任何名称,例如 “HELP” 中的 “KEY_HELP”。 Dialog 还可以识别 ANSI 控制字符,例如 "^A", "^?", 以及 C1 控件,例如 "A" 和 "?"。 最后,它允许使用反斜杠转义任何单个字符。

    Dialog 的内部键码名称对应于 dlg_keys.h 中的 DLG_KEYS_ENUM 类型,例如 “DLGK_HELP” 中的 “HELP” 。

    一些小部件(例如表单框)有一个可以编辑字段的区域。这些在小部件的子窗口中进行管理,并且可能具有与主小部件不同的键绑定,因为子窗口使用不同的名称注册。

    小部件

    窗口名称

    子窗口名称

    calendar

    calendar

    checklist

    checklist

    editbox

    editbox

    editbox2

    form

    formbox

    formfield

    fselect

    fselect

    fselect2

    inputbox

    inputbox

    inputbox2

    menu

    menubox

    menu

    msgbox

    msgbox

    pause

    pause

    progressbox

    progressbox

    radiolist

    radiolist

    tailbox

    tailbox

    textbox

    textbox

    searchbox

    timebox

    timebox

    yesno

    yesno

    一些小部件实际上是其他小部件,使用内部设置来修改行为。那些使用与实际小部件相同的小部件名称:

    Widget

    Actual Widget

    dselect

    fselect

    infobox

    msgbox

    inputmenu

    menu

    mixedform

    form

    passwordbox

    inputbox

    passwordform

    form

    prgbox

    progressbox

    programbox

    progressbox

    tailboxbg

    tailbox

    本手册页没有列出每个小部件的键绑定,因为可以通过运行 dialog 获得详细信息。 如果您设置了 --trace 选项, dialog 会在注册时为每个小部件写入键绑定信息。

    通常, dialog 使用不同的键在按钮和对话框的编辑部分之间导航,而不是在编辑部分中导航。也就是说,标签(和后退标签)遍历按钮(或按钮和编辑部分之间),而箭头键遍历编辑部分内的字段。选项卡也被认为是在小部件之间遍历的一种特殊情况,例如,当使用多个 tailboxbg 小部件时。

    一些用户可能希望使用相同的键在编辑部分中遍历与在按钮之间遍历。 通过在 dlgk_keys.h 中为 “form” (左/右/下一个/上一个)添加一个特殊组,表单小部件被编写为支持这种键的重新定义。这是一个示例绑定,演示了如何执行此操作:

    bindkey formfield TAB form_NEXT bindkey formbox TAB form_NEXT bindkey formfield BTAB form_prev bindkey formbox BTAB form_prev

    由于潜在的大量字段要遍历,这种类型的重新定义在其他小部件(例如日历)中不会有用。

    DIALOGOPTS

    定义此变量以将任何常用选项应用于每个小部件。大多数常用选项在处理每个小部件之前都会被重置。如果您在此环境变量中设置选项,它们将在重置后应用于 dialog 的状态。 与 "--file" 选项一样,双引号和反斜杠被解释。

    "--file" 选项不被视为常用选项(因此您不能将其嵌入此环境变量中)。

    DIALOGRC

    如果要指定要使用的配置文件的名称,请定义此变量。

    DIALOG_CANCEL

    DIALOG_ERROR

    DIALOG_ESC

    DIALOG_EXTRA

    DIALOG_HELP

    DIALOG_ITEM_HELP

    DIALOG_OK

    定义这些变量中的任何一个以更改退出代码 Cancel (1), error (-1), ESC (255), Extra (3), Help (2), Help with --item-help (2), 或 OK (0)。 通常 shell 脚本无法区分 -1 和 255 。

    DIALOG_TTY

    将此变量设置为 “1” 以提供与旧版本 dialog 的兼容性,该版本假定如果脚本重定向标准输出,则给出 "--stdout" 选项。

    $HOME/.dialogrc

    默认配置文件

    dialog 源包含几个示例,说明如何使用不同的框选项以及它们的外观。 只需查看源的目录 samples/ 即可。

    退出状态会被环境变量覆盖。可以覆盖它们的默认值和相应的环境变量是:

    0

    如果按下 YES 或 OK 按钮 (DIALOG_OK)。

    1

    如果按下 No 或 Cancel 按钮 (DIALOG_CANCEL)。

    2

    如果按下 Help 按钮 (DIALOG_HELP),- 除了下面关于 DIALOG_ITEM_HELP 的说明。

    3

    如果按下 Extra 按钮 (DIALOG_EXTRA)。

    4

    如果按下 Help 按钮,并设置了- --item-help 选项- 并且 DIALOG_ITEM_HELP 环境变量设置为 4。

    虽然可以使用环境变量覆盖任何退出代码,但这种特殊情况是在 2004 年引入的,以简化兼容性。 Dialog 在内部使用 DIALOG_ITEM_HELP(4),但除非还设置了环境变量,否则它会在退出时将其更改为 DIALOG_HELP(2)。

    -1

    如果 dialog 内部发生错误 (DIALOG_ERROR) 或 dialog 因按下 ESC 键 (DIALOG_ESC) 而退出。

    Dialog 适用于 X/Open 诅咒。但是,一些实现存在不足:

    • HPUX 诅咒(可能还有其他诅咒)无法为 newterm 功能正确打开终端。 通过阻止光标键和类似的转义序列被识别,这会干扰 dialog 的 --input-fd 选项。

    • NetBSD 5.1 curses 对宽字符的支持不完全。 dialog 将生成,但并非所有示例都正确显示。

    您可能想要编写与其他 dialog “clones” 一起运行的脚本。

    首先,要考虑 “original” dialog 程序(版本 0.3 到 0.9)。 它有一些拼写错误(或不一致)的选项。 dialog 程序将那些不推荐使用的选项映射到首选选项。它们包括:

    选项

    处理

    --beep-after

    ignored

    --guage

    mapped to --gauge

    这是一个 X 应用程序,而不是一个终端程序。稍加注意,就可以编写与 Xdialog 和 dialog 一起使用的有用脚本。

    dialog 程序会忽略 Xdialog 识别的这些选项:

    选项

    处理

    --allow-close

    ignored

    --auto-placement

    ignored

    --fixed-font

    ignored

    --icon

    ignored

    --keep-colors

    ignored

    --no-close

    ignored

    --no-cr-wrap

    ignored

    --screen-center

    ignored

    --separator

    mapped to --separate-output

    --smooth

    ignored

    --under-mouse

    ignored

    --wmclass

    ignored

    Xdialog 的手册页有一节讨论它与 dialog 的兼容性。手册页中未显示一些差异。例如,html 文档状态

    注意:以前的 Xdialog 版本使用 "\n" (换行符)作为清单小部件的结果分隔符;这已在 Xdialog v1.5.0 中更改为 "/" 以使其与 (c)dialog 兼容。 在您使用 Xdialog 清单的旧脚本中,您必须在 --separate-output 之一之前添加 --checklist 选项。

    Dialog 没有使用不同的分隔符;差异可能是由于对某些脚本的混淆。

    然后是 whiptail 。 出于实际目的,它由 Debian 维护(其上游开发人员完成的工作很少)。 它的文档(README.whiptail)声称

    Whittail(1) 是 dialog(1), 的轻量级替代品,为 shell 脚本提供对话框。 它建立在 newt 窗口库而不是 ncurses 库,允许它在嵌入式环境中更小,例如安装程序,救援盘等 Whiptail 被设计为与对话兼容,但是功能较少:一些对话框没有实现,例如 如tailbox、timebox、calendarbox等。

    比较实际大小(Debian 测试,2007/1/10): whiptail、 newt、 popt and slang 库的总大小为 757 KB。 dialog 的可比数字(计算 ncurses)为 520 KB。无视第一段。

    第二段具有误导性,因为 whiptail 也不适用于 dialog 的常见选项,例如 gauge 框。 与 1990 年代中期最初的 dialog 0.4 程序相比, whiptail 与 dialog 的兼容性较差。

    whiptail 的手册页借鉴了 dialog 的功能,例如,但奇怪的是仅引用了 0.4(1994)以下的 dialog 版本作为来源。也就是说,它的手册页指的是从较新版本的 dialog 中借用的功能,例如,

    • --gauge (从 0.5 开始)

    • --passwordbox (来自 Debian 1999 年的更改),

    • --default-item (来自 dialog 2000/02/22),

    有点幽默的是,有人可能会注意到使用 "--" 作为转义符的 popt 功能(未在其联机帮助页中记录)在 dialog 的联机帮助页中记录了大约一年,然后才在 whiptail 的联机帮助页中被提及。 whiptail 的联机帮助页错误地将其归因于 getopt 并且无论如何都不准确)。

    Debian 使用 whiptail 作为官方 dialog 变体。

    dialog 程序会忽略或映射这些被 whiptail 识别的选项:

    选项

    处理

    --cancel-button

    映射到 --cancel-label

    --fb

    忽略

    --fullbutton

    忽略

    --no-button

    映射到 --no-label

    --nocancel

    映射到 --no-cancel

    --noitem

    映射到 --no-items

    --notags

    映射到 --no-tags

    --ok-button

    映射到 --ok-label

    --scrolltext

    映射到 --scrollbar

    --topleft

    映射到 --begin 0 0

    --yes-button

    映射到 --yes-label

    存在命令行选项未解决的视觉差异:

    • 窗口内的 dialog 中心列表。 whiptail 通常将列表放在左边距。

    • whiptail 使用尖括号 ("<" 和 ">") 来标记按钮。 dialog 框使用方括号。

    • whiptail 用竖线标记了字幕的限制。 dialog 不标记限制。

    也许。

    Thomas E. Dickey (0.9b 及更高版本的更新)

    Kiran Cherupally – 混合形式和混合仪表小部件。

    Tobias C. Rittweiler

    Valery Reznic – 表单和进度框小部件。

    Yura Kalinichenko 将仪表小部件改编为 “pause”。

    这是 dialog 0.9a 早期版本的重写(除非需要提供兼容性),其中列出了作者:

    • Savio Lam – 0.3 版, “dialog”

    • Stuart Herbert – 0.4 版补丁

    • Marc Ewing – 仪表小部件。

    • Pasquale De Marco “Pako” – 0.9a 版, “cdialog”

    $Date: 2018/06/19 00:26:13 $

    bc.1

    BC(1)

    BC(1)

    General Commands Manual

    BC(1)

    bc - 任意精度十进制算术语言和计算器

    gate-ftp.1

    FTP(1)

    FTP(1)

    FreeBSD General Commands Manual

    FTP(1)

    ftp —

    设置是累积的,例如, "\Zb\Z1" 使以下文本变为粗体(可能是明亮的)红色。

  • 使用 "\Zn" 恢复正常设置。

  • --output-fd
    (来自
    dialog
    2002/08/14)。
    whiptail 尝试使用向上/向下箭头标记滚动条的顶部/底部单元格。 当它无法做到这一点时,它会用滚动条的背景颜色填充这些单元格并让用户感到困惑。 dialog 使用整个滚动条空间,从而获得更好的分辨率。
    概要
    描述
    选项
    常用选项
    对话框选项
    过时选项
    空白选项
    运行时配置
    关键绑定
    小部件名称
    内置绑定
    实例
    环境
    文件
    实例
    诊断
    可移植性
    兼容性
    原始对话框
    Xdialog
    Whiptail
    缺陷
    作者
    贡献者
    概要

    bc [-ghilPqsvVw] [--global-stacks] [--help] [--interactive] [--mathlib] [--no-prompt] [--quiet] [--standard] [--warn] [--version] [-e expr] [--expression=expr...] [-f file...] [--file=file...] [file...]

    描述

    bc(1) 是 POSIX 于 1991 年首次标准化的语言的交互式处理器。(当前标准在 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html)。) 该语言提供无限精度的十进制算术,并且有点类似于 C,但存在差异。此类差异将在本文档中注明。

    在解析和处理选项之后, bc(1) 读取命令行上给出的任何文件并在从 stdin 读取之前执行它们。

    bc(1) 是 任何 bc(1)的直接替代品,包括(尤其是)GNU bc(1)。除了其他实现之外,它还具有许多扩展和额外功能。

    选项

    以下是 bc(1) 接受的选项。

    -g, --global-stacks

    将全局变量 ibase、 obase、 scale 和 seed 转换为堆栈。

    这样做的效果是,在每次函数调用时,所有四个当前值的副本都被压入堆栈,并在每个函数返回时弹出。这意味着函数可以分配给任何和所有全局变量,而不必担心更改会影响其他函数。因此,假设一个名为 output(x,b) 的函数,简单地输出以 b 为基数的 x ,可以这样写:

    define void output(x, b) { obase=b x }

    而不是这样:

    define void output(x, b) { auto c c=obase obase=b x obase=c }

    这使得编写函数变得更加容易。

    (注意: 函数 output(x,b) 存在于扩展数学库中。参见 库 部分。)

    但是,由于使用此标志意味着函数无法全局设置 ibase、 obase、 scale 或 seed ,因此这样做的函数将无法再工作。有两个可能的用例,每个都有一个解决方案。

    首先,如果在启动时调用函数将 bc(1) 转换为数字转换器,则可以用各种 shell 别名替换该功能。例如:

    alias d2o="bc -e ibase=A -e obase=8" alias h2b="bc -e ibase=G -e obase=2"

    其次,如果一个函数的目的是为任何其他目的全局设置 ibase、 obase、 scale 或 seed ,则可以将其拆分为一到四个函数(基于它设置的全局变量的数量),并且每个函数都可以返回全局所需的值。

    对于设置 seed 的函数,分配给 seed 的值不会传播到父函数。这意味着他们看到的伪随机数序列将与任何父函数看到的伪随机数序列不同。仅在设置 seed 后才会出现这种情况。

    如果一个函数希望不影响其父函数的伪随机数序列,但希望使用相同的 seed ,则可以使用以下行:

    seed = seed

    如果每次运行 bc(1) 都需要此选项的行为,则用户可以确保定义 BC_ENV_ARGS 并包含此选项(有关详细信息,请参阅 环境变量 部分)。

    如果使用 -s、 -w 或任何等效项,则忽略此选项。

    这是一个 不可移植的扩展。

    -h, --help

    打印使用消息并退出。

    -i, --interactive

    强制交互模式。(请参阅 交互模式 部分。)

    这是一个 不可移植的扩展。

    -l, --mathlib

    将 scale (参见 语法 部分)设置为 20 ,并在运行任何代码(包括命令行上指定的任何表达式或文件)之前加载包含的数学库和扩展的数学库。

    要了解库中的内容,请参阅 库 部分。

    -P, --no-prompt

    在 TTY 模式下禁用提示。(提示仅在 TTY 模式下启用。请参阅 TTY MODE 部分)这主要适用于那些不想要提示或不习惯在 bc(1) 中使用提示的用户。大多数用户希望将此选项放在 BC_ENV_ARGS (请参阅 环境变量 部分)。

    这是一个 不可移植的扩展。

    -q, --quiet

    此选项是为了与 GNU bc(1) (https://www.gnu.org/software/bc/) 兼容;这是一个空操作。如果没有这个选项, GNU bc(1) 会打印一个版权标题。如果提供一个或多个 -v、 -V 或 --version 选项,则此 bc(1) 仅打印版权标头。

    这是一个 不可移植的扩展。

    -s, --standard

    准确处理标准定义的语言 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) ,如果使用任何扩展,则会出错。

    这是一个 不可移植的扩展。

    -v, -V, --version

    打印版本信息(版权标题)并退出。

    这是一个 不可移植的扩展。

    -w, --warn

    像 -s 和 --standard 一样,除了为非标准扩展打印警告(而不是错误)并且继续正常执行。

    这是一个 不可移植的扩展。

    -e expr, --expression=expr

    对 expr 求值。 如果给出多个表达式,则按顺序计算它们。如果还给出文件(见下文),则表达式和文件将按照给定的顺序进行求值。这意味着如果在表达式之前给出文件,则首先读入并对该文件求值。

    如果此选项在命令行中给出(即不在 BC_ENV_ARGS 中,请参阅 环境变量 部分),则在处理完所有表达式和文件后, bc(1) 将退出,除非 - (stdin) 作为参数给出 -f 或 --file 至少一次,无论是在命令行还是在 BC_ENV_ARGS 中。但是,如果在给出 -f- 或等效项之后给出任何其他 -e、 --expression、 -f 或 --file 参数, bc(1) 将给出致命错误并退出。

    这是一个 不可移植的扩展。

    -f file, --file=file

    读取 file 并逐行评估它,就好像它是通过 stdin 。取的一样。如果还给出表达式(见上文),则按照给定的顺序计算表达式。

    如果此选项在命令行中给出(即不在 BC_ENV_ARGS 中,请参阅 ENVIRONMENT VARIABLES 部分),则在处理完所有表达式和文件后, bc(1) 将退出,除非 - (stdin) 作为参数给出至少一次到 -f 或 --file 。但是,如果在给出 -f- 或等效项之后给出任何其他 -e、 --expression、 -f 或 --file 参数, bc(1) 将给出致命错误并退出。

    这是一个 不可移植的扩展。

    所有长选项都是 不可移植的扩展。

    标准输出

    任何非错误输出都会写入 stdout 。此外,如果启用历史记录(参见 历史 部分)和提示(参见 TTY 模式 部分),则两者都将输出到 stdout。

    注意: 与其他bc(1)实现不同,如果bc(1)不能写入 stdout ,它将发出致命错误(参见 退出状态 部分),因此如果 stdout 关闭,如 bc >&- ,它将退出并报错。这样做是为了使 bc(1) 可以在 stdout 重定向到文件时报告问题。

    如果有脚本依赖于其他 bc(1) 实现的行为,建议更改这些脚本以将 stdout 重定向到 /dev/null。

    标准错误

    任何错误输出都会写入 stderr。

    注意: 与其他 bc(1) 实现不同,如果 bc(1) 无法写入 stderr ,它将发出致命错误(请参阅 退出状态 部分),因此如果 stderr 已关闭,如 bc 2>&- 它将退出并报错。这样做是为了在将 stderr 重定向到文件时 bc(1) 可以退出并显示错误代码。

    如果有脚本依赖于其他 bc(1) 实现的行为,建议更改这些脚本以将 stderr 重定向到 /dev/null。

    语法

    bc(1) 程序的语法大多类似于 C,但有一些区别。此 bc(1) 遵循 POSIX 标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) ,这是 bc(1) 接受的语言的更全面的资源。本节旨在总结和列出该标准的所有扩展。

    在下面的部分中,E 表示表达式, S 表示语句, I 表示标识符。

    标识符 (I) 以小写字母开头,后跟任意数量的小写字母 (a-z)、数字 (0-9) 和下划线 (_) (最多 BC_NAME_MAX-1) 。 正则表达式是 [a-z][a-z0-9_]*。 具有多个字符(字母)的标识符是 不可移植的扩展。

    ibase 是一个决定如何解释常数的全局变量。 它是 “input” 基数,或用于解释输入数字的数字基数。 ibase 最初是 10。 如果命令行上没有给出 -s (--standard) 和 -w (--warn) 标志,则 ibase 的最大允许值为 36。 否则为 16。 ibase 的最小允许值为 2。 可以在 bc(1) 程序中使用 maxibase() 内置函数查询 ibase 的最大允许值。

    obase 是一个全局变量,决定如何输出结果。 它是 “output” 基数,或用于输出数字的基数。 obase 最初是 10。 obase 最大允许值为 BC_BASE_MAX ,可以在 bc(1) 程序中使用 maxobase() 内置函数进行查询。 obase 的最小允许值为 0。 如果 obase 为 0 ,则以科学计数法输出值,如果 obase 为 1 ,则以工程计数法输出值。 否则,以指定的基数输出值。

    以科学和工程符号输出是 不可移植的扩展。

    表达式的 scale 是小数点右边的表达式结果中的位数,而 scale 是一个全局变量,它设置任何运算的精度,但有例外。 scale 最初为 0。 scale 不能为负。 scale 的最大允许值为 BC_SCALE_MAX ,可以在 bc(1) 程序中使用 maxscale() 内置函数查询。

    bc(1) 既有 global 变量, local 变量。 所有 local 变量都是函数的局部变量;它们由参数或在函数的 auto 列表引入(参见 函数 部分)。 如果访问的变量不是参数或在 auto 列表中,则假定它是 global 的。 如果父函数具有子函数认为 global 变量的 local 变量版本,则子函数中该 global 变量的值是父函数中变量的值,而不是实际_global_ 变量的值。

    以上所有内容也适用于数组。

    如果语句是一个表达式(即任何指定的表达式或操作数),则会打印该语句的值,除非最低优先级操作符是赋值运算符 and ,表达式用括号括起来。

    last 打印的值也分配给特殊变量。 单个点 (.) 也可以用作 last 的同义词。 这些是 不可移植的扩展。

    分号或换行符都可以分隔语句。

    注释

    有两种评论:

    块注释包含在 /* 和 */ 中。

    行注释从 # 开始,直到(不包括)下一个换行符。 这是一个 不可移植的扩展。

    命名表达式

    以下是 bc(1) 中的命名表达式:

    变量: I

    数组元素: I[E]

    ibase

    obase

    scale

    seed

    last 或一个点 (.)

    数字 6 和 7 是 不可移植的扩展。

    seed 的含义取决于当前的伪随机数生成器,但除了新的主要版本外,保证不会改变。

    该值的 scale 和符号可能很重要。

    如果将先前使用的 seed 值分配给 seed 并再次使用,则保证伪随机数生成器产生与先前使用 seed 值时相同的伪随机数序列。

    如果立即再次查询 seed ,则不能保证返回分配给 seed 的确切值。 但是,如果 seed 确实 返回不同的值,则当分配给 seed 时,这两个值都保证产生相同的伪随机数序列。 这意味着分配给 seed 的某些值 不会 产生唯一的伪随机数序列。 使用 rand() 和 irand(E) 操作数后, seed 的值将发生变化(请参阅下面的 运算符 小节),除非传递给 irand(E) 的参数为 0、 1 或负数。

    可以分配给 seed 的值的长度(有效小数位数)或 scale 没有限制。

    变量和数组不干扰;用户可以将数组命名为与变量相同的名称。 这也适用于函数(参见 函数 部分),因此用户可以拥有一个变量、数组和函数,它们都具有相同的名称,并且它们不会相互影响,无论是否在函数内部。

    命名表达式需要作为 递增/递减 运算符的操作数和 赋值 运算符的左侧(请参阅 运算符 小节)。

    运算符

    以下是 bc(1) 中的有效操作数:

    数字(请参阅下面的 数字 小节)。

    数组索引 (I[E]).

    (E): E 的值(用于改变优先级)。

    sqrt(E): E 的平方根。 E 必须是非负数。

    length(E): E 中有效小数位数。

    length(I[]): 数组 I 的元素个数。 这是一个 不可移植的扩展。

    scale(E): E 的 scale 。

    abs(E): E 的绝对值。 这是一个 不可移植的扩展。

    I(), I(E), I(E, E) 等等,其中 I 是非 空 函数的标识符(请参阅 函数 部分的 空函数 小节)。 E 参数也可以是 I[] 形式的数组,如果函数定义中的相应参数是数组引用,它将自动转换为数组引用(参见 函数 部分的 数组引用 小节)。

    read(): 从 stdin 读取一行并将其用作表达式。 该表达式的结果是 read() 操作数的结果。 这是一个 不可移植的扩展。

    maxibase(): 允许的最大 ibase 。 这是一个 不可移植的扩展。

    maxobase(): 允许的最大 obase 。 这是一个 不可移植的扩展。

    maxscale(): 允许的最大 scale 。 这是一个 不可移植的扩展。

    rand(): 介于 0 (含)和 BC_RAND_MAX (含)之间的伪随机整数。 使用这个操作数会改变 seed 的值。 这是一个 不可移植的扩展。

    irand(E): 介于 0 (包括)和 E (不包括)值之间的伪随机整数。 如果 E 为负数或非整数(E’ 的 scale 不为 0 ),则会引发错误,并且 bc(1) 会重置(请参阅 重置 部分),而 seed 保持不变。 如果 E 大于 BC_RAND_MAX ,则通过生成几个伪随机整数、将它们乘以 BC_RAND_MAX+1 的适当幂并将它们相加来实现上界。 因此,可以使用此操作数生成的整数大小是无限的。 使用这个操作数会改变 seed 的值,除非 E 的值是 0 或 1 。 在这种情况下,将返回 0 ,并且 不会 更改 seed 。 这是一个 不可移植的扩展。

    maxrand(): rand() 返回的最大整数。 这是一个 不可移植的扩展。

    rand() 和 irand(E) 生成的整数保证尽可能无偏,但受伪随机数生成器的限制。

    注意: 使用 rand() 和 irand(E) 的伪随机数生成器返回的值 不是 加密安全的。这是使用种子伪随机数生成器的结果。 但是,它们 保证 可以使用相同的种子值重现。 这意味着来自 bc(1) 的伪随机数只应该在可重复的伪随机数流是 必要 的情况下使用。 在任何其他情况下,请使用非种子伪随机数生成器。

    数字

    数字是由数字、大写字母和最多 1 个句点组成的字符串。 数字最多可以有 BC_NUM_MAX 个数字。大写字母等于 9 + 它们在字母表中的位置(即 A 等于 10 或 9+1)。 如果数字或字母与 ibase 的当前值无关,则将它们设置为 ibase 中最高有效数字的值。

    无论 ibase 的值如何,单字符数字(即单独的 A )采用它们是有效数字时的值。 这意味着单独的 A 总是等于十进制的 10 ,单独的 Z 总是等于十进制的 35 。

    此外,bc(1) 接受科学计数法的数字。 它们的格式为 e 。 指数( e 之后的部分)必须是整数。 例如 1.89237e9 ,它等于 1892370000 。 也允许负指数,因此 4.2890e-3 等于 0.0042890。

    如果分别给出 -s 或 -w 命令行选项(或等效项),则使用科学记数法是错误或警告。

    警告: 科学计数法中的数字和指数均根据当前 ibase 进行解释,但无论当前 ibase 如何,该数字仍乘以 10^exponent 。 例如,如果 ibase 为 16 ,并且 bc(1) 被赋予数字字符串 FFeA ,则生成的十进制数将为 2550000000000 ,如果 bc(1) 被赋予数字字符串 10e-4 ,则生成的十进制数将为 0.0016 。

    接受输入作为科学记数法是 不可移植的扩展.

    运算符

    可以使用以下算术和逻辑运算符。它们按优先级降序排列。同一组中的运算符具有相同的优先级

    ++ --

    类型:前缀和后缀

    结合性:无

    说明: 递增、 递减

    - !

    类型:前缀

    结合性:无

    说明: 否定、 布尔非

    $

    类型:后缀

    结合性:无

    说明: 截断

    @

    类型:二进制

    结合性:右

    说明: 设置精度

    ^

    类型:二进制

    结合性:右

    说明: 幂

    * / %

    类型:二进制

    结合性: 左

    说明: 乘法、 除法、 取模

    + -

    类型:二进制

    结合性: 左

    说明: 加法, 减法

    << >>

    类型:二进制

    结合性: 左

    说明: 左移, 右移

    = <<= >>= += -= *= /= %= ^= @=

    类型:二进制

    结合性: 右

    说明: 赋值

    == <= >= != < >

    类型:二进制

    结合性: 左

    说明: 关系

    &&

    类型:二进制

    结合性: 左

    说明: 布尔值和

    ||

    类型:二进制

    结合性: 左

    说明: 布尔值或

    下面将更详细地描述运算符。

    ++ --

    前缀和后缀 递增 和 递减 运算符的行为与它们在 C 中的行为完全相同。它们需要一个命名表达式(参见 命名表达式 小节)作为操作数。

    这些运算符的前缀版本更有效;尽可能使用它们。

    -

    如果用户尝试对任何值为 0 的表达式 求反 ,则否定运算符返回 0 。否则,返回其符号求反的表达式副本。

    !

    如果表达式为 0 ,则 布尔非 运算符返回 1 ,否则返回 0 。

    这是一个 不可移植的扩展。

    $

    截断 运算符返回给定表达式的副本,其中删除所有 scale 。

    这是一个 不可移植的扩展。

    @

    set precision 运算符接受两个表达式并返回第一个表达式的副本,其 scale 等于第二个表达式的值。 这可能意味着返回的数字没有变化(如果第一个表达式的 scale 与第二个表达式的值匹配)、扩展(如果小于)或截断(如果大于)。

    第二个表达式必须是整数(无 scale )且非负数。

    这是一个 不可移植的扩展。

    ^

    幂 运算符(不是 C 中的 exclusive or 运算符)采用两个表达式并将第一个表达式提升到第二个值的幂。 结果的 scale 等于 scale 。

    第二个表达式必须是整数(无 scale ),如果为负数,则第一个值必须非零。

    *

    乘法 运算符接受两个表达式,将它们相乘,然后返回乘积。 如果 a 是第一个表达式的 scale , b 是第二个表达式的 scale ,则结果的 scale 等于 min(a+b,max(scale,a,b)) 其中 min() 和 max() 返回的值。

    /

    除法 运算符接受两个表达式,将它们相除,然后返回商。 结果的 scale 应为 scale 值。

    第二个表达式必须非零。

    %

    取模 运算符采用两个表达式 a 和 b ,并通过以下方式对它们进行评估:1) 将 a/b 计算为当前 scale , 2) 使用步骤 1 的结果计算 a-(a/b)*b 到 scale max(scale+scale(b),scale(a)).

    第二个表达式必须非零。

    +

    加法 运算符接受两个表达式 a 和 b ,并返回总和,其 scale 等于 a 和 b 的 scale 最大值。

    -

    减法 运算符接受两个表达式 a 和 b ,并返回差值,其 scale 等于 a 和 b 的 scale 最大值。

    <<

    左移 运算符接受两个表达式 a 和 b ,并返回 a 值的副本,其小数点向右移动 b 位。

    第二个表达式必须是整数(无 scale )且非负数。

    这是一个 不可移植的扩展。

    >>

    右移 运算符接受两个表达式 a 和 b,并返回 a 值的副本,其小数点向左移动 b 位。

    第二个表达式必须是整数(无 scale )且非负数。

    这是一个 不可移植的扩展。

    = <<= >>= += -= *= /= %= ^= @=

    赋值 运算符接受两个表达式 a 和 b 其中 a 是命名表达式(请参阅 命名表达式 小节)。

    对于 = ,复制 b 并将结果分配给 a 。 对于所有其他, a 和 b 作为操作数应用于相应的算术运算符,并将结果分配给 a 。

    对应于作为扩展的运算符的 赋值 运算符本身就是 不可移植的扩展 。

    == <= >= != < >

    关系 运算符比较两个表达式 a 和 b ,如果关系成立,根据 C 语言语义,结果为 1 ,否则为 0 。

    请注意,与 C 不同,这些运算符的优先级低于 赋值 运算符,这意味着 a=b>c 被解释为 (a=b)>c 。

    此外,与标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) 要求不同,这些运算符可以出现在可以使用任何其他表达式的任何地方。 这是一个 不可移植的扩展。

    &&

    布尔 and 运算符接受两个表达式,如果两个表达式都不为零,则返回1 ,否则返回 0 。

    这 不是 短路运算符。

    这是一个 不可移植的扩展。

    ||

    布尔 or 运算符接受两个表达式,如果其中一个表达式不为零,则返回 1 ,否则返回 0 。

    这 不是 短路运算符。

    这是一个 不可移植的扩展。

    声明

    以下项目是声明:

    E

    { S ; ... ; S }

    if ( E ) S

    if ( E ) S else S

    while ( E ) S

    for ( E ; E ; E ) S

    一个空的声明

    break

    continue

    quit

    halt

    limits

    一串字符,用双引号括起来

    print E , ... , E

    I(), I(E), I(E, E) 等等,其中 I 是 void 函数的标识符(请参阅 函数 部分的 空函数 小节)。 E 参数也可以是 I[] 形式的数组,如果函数定义中的相应参数是数组引用,它将自动转换为数组引用(参见 函数 部分的 数组引用 小节)。

    数字 4、 9、 11、 12、 14 和 15 是 不可移植的扩展。

    此外,作为 不可移植的扩展 ,可以省略 for 循环头中的任何或所有表达式。 如果省略条件(第二个表达式),则假定为常数 1 。

    break 语句使循环停止迭代并在循环后立即恢复执行。 这仅在循环中允许。

    continue 语句使循环迭代提前停止并返回到循环的开头,包括测试循环条件。 这仅在循环中允许。 这仅在循环中允许。

    if else 语句的作用与 C 中的相同。

    quit 语句会导致 bc(1) 退出,即使它位于不会执行的分支上(它是编译时命令)。

    如果执行 halt 语句,则 bc(1) 将退出。 ((与如果它位于未执行的 if 语句的分支上的 quit 不同,bc(1) 不会退出。)

    limits 语句打印此 bc(1) 所受的限制。 这就像 quit 语句,因为它是一个编译时命令。

    表达式本身被评估和打印,然后是换行符。

    科学记数法和工程记数法都可用于打印表达式的结果。 科学记数法通过将 0 分配给 obase 来激活,而工程记数法通过将 1 分配给 obase 来激活。 要停用它们,只需为 obase 分配一个不同的值。

    如果使用 -s 或 -w 命令行选项(或等效项)运行 bc(1),则会禁用科学记数法和工程记数法。

    以科学记数法和/或工程记数法打印数字是一种 不可移植的扩展。

    打印声明

    print 语句中的 “expressions” 也可以是字符串。 如果是,则有专门解释的反斜杠转义序列。 这些序列是什么,以及它们导致打印的内容如下所示:

    \a

    \a

    \b

    \b

    \\

    \

    \e

    \

    \f

    \f

    \q

    "

    反斜杠后面的任何其他字符都会导致反斜杠和字符按原样打印。

    打印语句中的任何非字符串表达式都应分配给 last ,就像打印的任何其他表达式一样。

    求值顺序

    一个语句中的所有表达式都是从左到右计算的,除非为了维护操作顺序。 这意味着,例如,假设 i 等于 0 ,在表达式中

    a[i++] = i++

    a 的第一个(或第 0 个)元素设置为 1 ,并且 i 在表达式末尾等于 2 。

    这包括函数参数。 因此,假设 i 等于 0 ,这意味着在表达式中

    x(i++, i++)

    传递给 x() 的第一个参数是 0 ,第二个参数是 1 ,而在函数开始执行之前 i 等于 2 。

    函数

    函数定义如下:

    define I(I,...,I){ auto I,...,I S;...;S return(E) }

    参数列表或 auto 列表中的任何 I 都可以替换为 I[] 以使参数或 auto 成为数组,并且参数列表中的任何 I 都可以替换为 *I[] 以使参数成为数组引用。 采用数组引用的函数的调用者不应在调用中加上星号;它们必须像普通数组参数一样只用 I[] 调用,并且会自动转换为引用。

    作为 不可移植的扩展, define 语句的左大括号可能出现在下一行。

    作为 不可移植的扩展, return 语句也可以是以下形式之一:

    return

    return ( )

    return E

    前两个,或者不指定 return 语句,等效于 return (0), ,除非该函数是一个 void 函数(请参阅下面的 空函数 小节)。

    空函数

    函数也可以是 空 函数,定义如下:

    define void I(I,...,I){ auto I,...,I S;...;S return }

    它们只能用作独立的表达式,这样的表达式将单独打印,除了在打印语句中。

    void 函数只能使用上面列出的前两个返回语句。 他们也可以完全省略 return 语句。

    “void” 一词不被视为关键字;仍然可以有名为 void 的变量、数组和函数。 “void” 这个词只在 define 关键字之后被特别对待。

    这是一个 不可移植的扩展。

    数组引用

    对于参数列表中的任意一个数组,如果该数组以形式声明

    *I[]

    这是一个 参考。 当函数返回时,函数中数组的任何更改都会反映到传入的数组中。

    除此之外,所有函数参数都是按值传递的。

    这是一个 不可移植的扩展。

    库

    以下所有函数,包括扩展数学库中的函数(请参阅下面的 扩展库 小节),在给出 -l 或 --mathlib 命令行标志时可用,除了在给出 -s 选项、 -w 选项或等效选项的情况下,扩展数学库在不可用。

    标准库

    标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) 为数学库定义了以下函数:

    s(x)

    返回 x 的正弦值,假定为弧度。

    这是一个超越函数(参见下面的 超越函数 小节)。

    c(x)

    返回 x 的余弦,假定为弧度。

    这是一个超越函数(参见下面的 超越函数 小节)。

    a(x)

    返回 x 的反正切,以弧度为单位。

    这是一个超越函数(参见下面的 超越函数 小节)。

    l(x)

    返回 x 的自然对数。

    这是一个超越函数(参见下面的 超越函数 小节)。

    e(x)

    返回数学常数 e 的 x 次方。

    这是一个超越函数(参见下面的 超越函数 小节)。

    j(x, n)

    返回 x 的贝塞尔整数阶 n (截断)。

    这是一个超越函数(参见下面的 超越函数 小节)。

    扩展库

    给出 -s/--standard 或 -w/--warn 选项时 不会 加载扩展库,因为它们不是标准定义的库的一部分 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html)。

    这是一个 不可移植的扩展。

    p(x, y)

    计算 x 的 y 次方,即使 y 不是整数,并将结果返回到当前 scale 。

    如果 y 为负且 x 为 0 ,则为错误。

    这是一个超越函数(参见下面的 超越函数 小节)。

    r(x, p)

    根据舍入模式返回 x 舍入到 p 小数位,从 0 舍入一半 (https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)。

    ceil(x, p)

    根据舍入模式从 x 舍入返回 p 舍入到 0 位小数 (https://en.wikipedia.org/wiki/Rounding#Rounding_away_from_zero)。

    f(x)

    返回 x 的截断绝对值的阶乘。

    perm(n, k)

    如果 n ,则返回 k 的截断绝对值的 k <= n 的截断绝对值的排列。 如果不是,则返回 0 。

    comb(n, k)

    如果 k <= n ,则返回 k 的截断绝对值的 n 截断绝对值的组合。 如果不是,则返回 0 。

    l2(x)

    返回 x 的以 2 为底的对数。

    这是一个超越函数(参见下面的 超越函数 小节)。

    l10(x)

    返回 x 的以 10 为底的对数。

    这是一个超越函数(参见下面的 超越函数 小节)。

    log(x, b)

    返回 x 的以 b 为底的对数。

    这是一个超越函数(参见下面的 超越函数 小节)。

    cbrt(x)

    返回 x 的立方根。

    root(x, n)

    计算 n、 r 的截断值,并将 x 的第 r 根返回到当前 scale 。

    如果 r 为 0 或负数,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。 如果 r 为偶数且 x 为负数,它还会引发错误并导致 bc(1) 重置。

    pi(p)

    将 pi 返回到 p 个小数位。

    这是一个超越函数(参见下面的 超越函数 小节)。

    t(x)

    返回 x 的正切,假定为弧度。

    这是一个超越函数(参见下面的 超越函数 小节)。

    a2(y, x)

    返回 y/x 的反正切,以弧度为单位。 如果 y 和 x 都等于 0 ,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。 否则,如果 x 大于 0 ,则返回 a(y/x)。 如果 x 小于 0 ,并且 y 大于或等于 0 ,则返回 a(y/x)+pi 。 如果 x 小于 0 ,并且 y 小于 0, ,则返回 a(y/x)-pi 。 如果 x 等于 0 ,并且 y 大于 0, 则返回 pi/2 。 如果 x 等于 0 ,并且 y 小于 0,则返回 -pi/2。

    此函数与许多编程语言中的 atan2() 函数相同。

    这是一个超越函数(参见下面的 超越函数 小节)。

    sin(x)

    返回 x 的正弦值,假定为弧度。

    这是 s(x) 的别名。

    这是一个超越函数(参见下面的 超越函数 小节)。

    cos(x)

    返回 x 的余弦,假定为弧度。

    这是 c(x) 的别名。

    这是一个超越函数(参见下面的 超越函数 小节)。

    tan(x)

    返回 x 的正切,假定为弧度。

    如果 x 等于 1 或 -1 ,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。

    这是 t(x) 的别名。

    这是一个超越函数(参见下面的 超越函数 小节)。

    atan(x)

    返回 x 的反正切,以弧度为单位。

    这是 a(x) 的别名。

    这是一个超越函数(参见下面的 超越函数 小节)。

    atan2(y, x)

    返回 y/x 的反正切,以弧度为单位。如果 y 和 x 都等于 0 ,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。 否则,如果 x 大于 0 ,则返回 a(y/x) 。 如果 x 小于 0 ,并且 y 大于或等于 0 ,则返回 a(y/x)+pi 。 如果 x 小于 0 ,并且 y 小于 0 ,则返回 a(y/x)-pi 。 如果 x 等于 0 ,并且 y 大于 0 , 则返回 pi/2 。 如果 x 等于 0 ,并且 y 小于 0, ,则返回 -pi/2 。

    此函数与许多编程语言中的 atan2() 函数相同。

    这是 a2(y, x) 的别名。

    这是一个超越函数(参见下面的 超越函数 小节)。

    r2d(x)

    将 x 从弧度转换为度数并返回结果。

    这是一个超越函数(参见下面的 超越函数 小节)。

    d2r(x)

    将 x 从度数转换为弧度并返回结果。

    这是一个超越函数(参见下面的 超越函数 小节)。

    frand(p)

    生成一个介于 0 (含)和 1 (不含)之间的伪随机数,小数点后的小数位数等于 p 的截断绝对值。 如果 p 不为 0 ,则调用此函数将更改 seed 的值。 如果 p 为 0 ,则返回 0 ,并且seed 不 变。

    ifrand(i, p)

    生成介于 0 (含)和 i 的截断绝对值(不含)之间的伪随机数,小数点后的小数位数等于 p 的截断绝对值。 如果 i 的绝对值大于等于 2, 且 p 不为 0, 则调用该函数会改变 seed 的值;否则,返回 0 并且不更改 seed 。

    srand(x)

    返回 x ,其符号以 0.5 的概率翻转。 换句话说,它随机化 x 的符号。

    brand()

    返回一个随机布尔值 ( 0 或 1)。

    ubytes(x)

    返回保存 x 的截断绝对值所需的无符号整数字节数。

    sbytes(x)

    返回保存 x 的截断值所需的有符号二进制补码整数字节数。

    hex(x)

    输出 x 的十六进制(以 16 为基数)表示。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    binary(x)

    输出 x 的二进制(以 2 为基数)表示。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    output(x, b)

    输出 b 为底 x 的表示。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    uint(x)

    将 x 的二进制和十六进制表示形式输出为无符号整数,并以尽可能少的两个字节的幂。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数或负数,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    int(x)

    将 x 的二进制和十六进制表示形式输出为带符号的二进制补码整数,并以尽可能少的两个字节的幂。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    uintn(x, n)

    将 x 的二进制和十六进制表示形式输出为 n 字节的无符号整数。 两个输出都被分成由空格分隔的字节。

    如果 x 不是整数、为负数或无法容纳 n 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    intn(x, n)

    将 x 的二进制和十六进制表示形式输出为 n 字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数或不能放入 n 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    uint8(x)

    将 x 的二进制和十六进制表示形式输出为 1 字节的无符号整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数、为负数或无法放入 1 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    int8(x)

    将 x 的二进制和十六进制表示形式输出为 1 个字节中的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数或不能放入 1 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    uint16(x)

    将 x 的二进制和十六进制表示形式输出为 2 个字节的无符号整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数、为负数或不能容纳 2 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    int16(x)

    将 x 的二进制和十六进制表示形式输出为 2 个字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数或不能容纳 2 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    uint32(x)

    将 x 的二进制和十六进制表示形式输出为 4 字节的无符号整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数、为负数或无法容纳 4 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    int32(x)

    将 x 的二进制和十六进制表示形式输出为 4 字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数或不能容纳 4 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    uint64(x)

    将 x 的二进制和十六进制表示形式输出为 8 字节的无符号整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数、为负数或不能容纳 8 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    int64(x)

    将 x 的二进制和十六进制表示形式输出为 8 个字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。

    如果 x 不是整数或不能放入 8 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    hex_uint(x, n)

    将 x 的截断绝对值的表示形式输出为使用 n 字节的十六进制无符号整数。如果 n 太小,则不会输出所有值。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    binary_uint(x, n)

    将 x 的截断绝对值的表示形式输出为使用 n 字节的二进制无符号整数。如果 n 太小,则不会输出所有值。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    output_uint(x, n)

    使用 n 字节将 x 的截断绝对值的表示形式输出为当前 obase (请参阅 语法 部分)中的无符号整数。如果 n 太小,则不会输出所有值。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    output_byte(x, i)

    输出 i 的截断绝对值的字节 x ,其中 0 是最低有效字节, number_of_bytes - 1 是最高有效字节。

    这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。

    超越函数

    所有超越函数都可能返回稍微不准确的结果(最多 1 个 ULP (https://en.wikipedia.org/wiki/Unit_in_the_last_place))。 这是不可避免的,这篇文章 (https://people.eecs.berkeley.edu/~wkahan/LOG10HAF.TXT) 解释了为什么不可能也没有必要计算超越函数的精确结果。

    由于可能存在不准确性,我建议用户调用这些函数时将精度 (scale) 设置为至少高于所需的 1。 如果 absolutely 需要精确的结果,用户可以将精度 (scale) 加倍,然后截断。

    标准数学库中的超越函数是:

    •

    s(x)

    •

    c(x)

    •

    a(x)

    •

    l(x)

    •

    e(x)

    •

    j(x, n)

    扩展数学库中的超越函数是:

    •

    l2(x)

    •

    l10(x)

    •

    log(x, b)

    •

    pi(p)

    •

    t(x)

    •

    a2(y, x)

    •

    sin(x)

    •

    cos(x)

    •

    tan(x)

    •

    atan(x)

    •

    atan2(y, x)

    •

    r2d(x)

    •

    d2r(x)

    重置

    当 bc(1) 遇到错误或它具有非默认处理程序的信号时,它会重置。 这意味着发生了几件事。

    首先,任何正在执行的函数都会停止并从堆栈中弹出。 这种行为与编程语言中的异常没有什么不同。 然后设置执行点,以便跳过任何等待执行的代码(在所有函数返回之后)。

    因此,当 bc(1) 重置时,它会跳过任何剩余的等待执行的代码。 然后,如果它是交互模式,并且错误不是致命错误(参见 退出状态 部分),它会要求更多输入;否则,它会以适当的返回码退出。

    请注意,此重置行为与 GNU bc(1) 不同,后者试图在导致错误的语句之后立即开始执行语句。

    性能

    大多数 bc(1) 实现使用 char 类型一次计算 1 个十进制数字的值,但这可能很慢。这个 bc(1) 做了一些不同的事情。

    它使用大整数一次计算多于 1 个十进制数字。如果在 BC_LONG_BIT (参见 LIMITS 部分)为 64 的环境中构建,则每个整数都有 9 个十进制数字。 如果在 BC_LONG_BIT 为 32 的环境中构建,则每个整数都有 4 个十进制数字。 这个值(每个大整数的小数位数)称为 BC_BASE_DIGS。

    BC_LONG_BIT 和 BC_BASE_DIGS 的实际值可以通过 limits 语句查询。

    此外,此 bc(1) 使用更大的整数进行溢出检查。此整数类型取决于 BC_LONG_BIT 的值,但始终至少是用于存储数字的整数类型的两倍。

    极限

    以下是 bc(1) 的限制:

    BC_LONG_BIT

    构建 bc(1) 的环境中 long t类型的位数。这决定在一个大整数中可以存储多少个十进制数字(请参阅性 性能 部分)。

    BC_BASE_DIGS

    每个大整数的小数位数(请参阅 性能 部分)。取决于 BC_LONG_BIT。

    BC_BASE_POW

    每个大整数可以存储的最大十进制数(参见 BC_BASE_DIGS) 加1。取决于 BC_BASE_DIGS。

    BC_OVERFLOW_MAX

    溢出类型(参见 性能 部分)可以容纳的最大数量。取决于 BC_LONG_BIT。

    BC_BASE_MAX

    最大输出基数。设置为 BC_BASE_POW。

    BC_DIM_MAX

    数组的最大大小。设置为 SIZE_MAX-1。

    BC_SCALE_MAX

    最大 scale.设置为 BC_OVERFLOW_MAX-1。

    BC_STRING_MAX

    字符串的最大长度。设置为 BC_OVERFLOW_MAX-1。

    BC_NAME_MAX

    标识符的最大长度。设置为 BC_OVERFLOW_MAX-1。

    BC_NUM_MAX

    数字的最大长度(十进制数字),包括小数点后的数字。设置为 BC_OVERFLOW_MAX-1。

    BC_RAND_MAX

    rand() 运算符返回的最大整数(包括)。设置为 2^BC_LONG_BIT-1。

    指数

    最大允许指数(正或负)。设置为 BC_OVERFLOW_MAX。

    变量数

    变量/数组的最大数量。设置为 SIZE_MAX-1。

    实际值可以通过 limits 语句查询。

    这些限制实际上是不存在的;限制是如此之大(至少在 64 位机器上)以至它们不成问题。 事实上,在达到这些限制之前,内存应该已经耗尽。

    环境变量

    bc(1) 识别以下环境变量:

    POSIXLY_CORRECT

    如果此变量存在(无论内容如何),bc(1) 的行为就如同给出 -s 选项一样。

    BC_ENV_ARGS

    这是为 bc(1) 提供命令行参数的另一种方法。它们应该与所有其他命令行参数的格式相同。这些总是首先处理,因此 BC_ENV_ARGS 中给出的任何文件都将在命令行中给出的参数和文件之前处理。 这使用户能够设置每次调用时使用的 “standard” 选项和文件。 此类文件包含的最有用的东西是用户每次运行 bc(1) 时可能想要的有用功能。

    解析 BC_ENV_ARGS 的代码将正确处理带引号的参数,但它不理解转义序列。 例如,字符串 “/home/gavin/some bc file.bc” 将被正确解析,但字符串 “/home/gavin/some "bc" file.bc” 将包含反斜杠。

    引号解析将处理任何一种引号, ’ 或 “ 。 因此,如果您有一个文件名中包含任意数量的单引号,您可以使用双引号作为外部引号,如 ”some `bc' file.bc" ,反之亦然,如果您有一个带有双引号的文件。但是,由于解析的复杂性,不支持在 BC_ENV_ARGS 中处理具有两种引号的文件,尽管在由 shell 完成解析的命令行上仍然支持此类文件。

    BC_LINE_LENGTH

    如果此环境变量存在并且包含大于 1 且小于 UINT16_MAX (2^16-1) 的整数,则 bc(1) 将输出该长度的行,包括反斜杠 (\)。 默认行长为 70。

    退出状态

    bc(1) 返回以下退出状态:

    0

    没有错误。

    1

    出现数学错误。这遵循使用 1 表示预期错误的标准做法,因为数学错误将在正常执行过程中发生。

    数学错误包括除以 0 、取负数的平方根、使用负数作为伪随机数生成器的界限、尝试将负数转换为硬件整数、将数字转换为硬件时溢出整数,并尝试在需要整数的地方使用非整数。

    幂 (^)、位 (@)、左移 (<<) 和右移 (>>) 运算符及其对应的赋值运算符的第二个操作数转换为硬件整数。

    2

    发生解析错误。

    解析错误包括意外的 EOF 、使用无效字符、未能找到字符串或注释的结尾、使用无效的标记、给出无效的表达式、给出无效的打印语句、给出无效的函数定义、尝试分配到一个不是命名表达式的表达式(参见 语法 部分的 命名表达式 小节),给出一个无效的 auto 列表,有一个重复的 auto/函数参数,找不到代码块的结尾,试图返回一个值来自 void 函数,尝试使用变量作为引用,并在给出选项 -s 或任何等效项时使用任何扩展。

    3

    发生运行时错误。

    运行时错误包括将无效编号分配给 ibase、obase 或 scale ;给 read() 调用一个错误的表达式,在 read() 调用中调用 read() ,键入错误,将错误数量的参数传递给函数,尝试调用未定义的函数,以及尝试使用 void 函数调用作为表达式中的值。

    4

    发生致命错误。

    致命错误包括内存分配错误、I/O 错误、无法打开文件、尝试使用不只有 ASCII 字符的文件(bc(1) 只接受 ASCII 字符)、尝试将目录作为文件打开以及给出无效的命令行选项。

    退出状态 4 是特殊的;当发生致命错误时,无论 bc(1) 处于何种模式,bc(1) 总是退出并返回 4 。

    仅当 bc(1) 未处于交互模式时才会返回其他状态(请参阅 交互模式 部分),因为 bc(1) 会重置其状态(请参阅 重置 部分)并在其中一个错误发生时接受更多输入交互模式。当**-i** 标志或 --interactive 选项强制交互模式时也是如此。

    这些退出状态允许 bc(1) 在带有错误检查的 shell 脚本中使用,并且可以通过使用 -i 标志或 --interactive 选项强制其正常行为。

    交互模式

    根据标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html),bc(1) 具有交互模式和非交互模式。 当 stdin 和 stdout 都连接到终端时,交互模式会自动打开,但 -i 标志和 --interactive 选项可以在其他情况下打开它。

    在交互模式下,bc(1) 会尝试从错误中恢复(请参阅 重置 部分),并且在正常执行中,一旦当前输入的执行完成,就会刷新 stdout 。

    TTY 模式

    如果 stdin、 stdout 和 stderr 都连接到 TTY,bc(1) 将打开 “TTY 模式”。

    启用历史记录需要 TTY 模式(请参阅 命令行历史 部分)。还需要启用对 SIGINT 信号的特殊处理。

    提示在 TTY 模式下启用。

    TTY 模式与交互模式不同,因为在 bc(1) 规范 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) 中需要交互模式,而交互模式只需要 stdin 和 stdout 即可连接到一个终端。

    信号处理

    发送 SIGINT 将导致 bc(1) 停止执行当前输入。 如果 bc(1) 处于 TTY 模式(参见 TTY 模式 部分),它将重置(参见 重置 部分)。否则,它将清理并退出。

    请注意, “current input” 可能意味着两件事之一。 如果 bc(1) 在 TTY 模式下处理来自 stdin 的输入,它将要求更多输入。 如果 bc(1) 正在以 TTY 模式处理来自文件的输入,它将停止处理该文件并开始处理下一个文件(如果存在),或者如果其他文件不存在则从 stdin 请求输入。

    这意味着如果在执行文件时将 SIGINT 发送到 bc(1),则 bc(1) 似乎没有响应该信号,因为它将立即开始执行下一个文件。这是设计使然;用户在与 bc(1) 交互时执行的大多数文件都有函数定义,可以快速解析。如果文件需要很长时间才能执行,则该文件中可能存在错误。其余文件仍然可以毫无问题地执行,允许用户继续。

    SIGTERM 和 SIGQUIT 导致 bc(1) 清理并退出,并且它对所有其他信号使用默认处理程序。一个例外是 SIGHUP 。在这种情况下,当 bc(1) 处于 TTY 模式时, SIGHUP 将导致 bc(1) 清理并退出。

    命令行历史

    bc(1) 支持交互式命令行编辑。如果 bc(1) 处于 TTY 模式(请参阅 TTY 模式 部分),则启用历史记录。可以使用箭头键调用和编辑以前的行。

    注意: 制表符转换为 8 个空格。

    区域设置

    此 bc(1) 支持为不同的语言环境添加错误消息,因此支持 LC_MESSAGES。

    参见

    dc(1)

    标准

    bc(1) 符合 IEEE Std 1003.1-2017 (“POSIX.1-2017”) (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html)规范。标志 -efghiqsvVw 、所有长选项以及上面提到的扩展都是对该规范的扩展。

    请注意,规范明确指出 bc(1) 仅接受使用句点 (.) 作为小数点的数字,而不管 LC_NUMERIC 的值如何。

    此 bc(1) 支持不同语言环境的错误消息,因此它支持 LC_MESSAGES。

    缺陷

    没有一个是已知的。在 https://git.yzena.com/gavin/bc 报告错误。

    作者

    Gavin D. Howard [email protected] 和贡献者。

    March 2021

    Gavin D. Howard

    名称
    Internet 文件传输程序

    概要

    ftp [-46AadefginpRtVv] [-N netrc] [-o output] [-P port] [-q quittime] [-r retry] [-s srcaddr] [-T dir,max [,inc]] [[user@]host [port]] [[user@]host:[path][/]] [file:///path] [ftp://[user[:password]@]host[:port]/path[/][;type=X]] [http://[user[:password]@]host[:port]/path] [...] ftp -u URL file [...]

    描述

    ftp 是 Internet 标准文件传输协议的用户界面。 该程序允许用户将文件传输到远程网络站点或从远程网络站点传输文件。

    最后五个参数将使用 FTP 或 HTTP 协议或通过直接复制来获取文件到当前目录。 这是脚本的理想选择。 有关详细信息,请参阅下面的 AUTO-FETCHING 文件 。

    选项可以在命令行中指定,也可以在命令解释器中指定。

    -4

    强制 ftp 仅使用 IPv4 地址。

    -6

    强制 ftp 仅使用 IPv6 地址。

    -A

    强制激活模式 ftp。 默认情况下, ftp- 将尝试使用被动模式 ftp 并在服务器不支持被动时回退到主动模式。 此选项使 ftp 始终使用活动连接。 它仅对连接到未正确实施被动模式的非常旧的服务器有用。

    -a

    使 ftp 绕过正常的登录过程,而使用匿名登录。

    -d

    启用调试。

    -e

    禁用命令行编辑。这对于 Emacs ange-ftp 模式很有用。

    -f

    强制为通过 FTP 或 HTTP 代理的传输重新加载缓存。

    -g

    禁用文件名通配。

    -i

    在多个文件传输期间关闭交互式提示。

    -N netrc

    使用 netrc 而不是 ~/.netrc 。 有关更多信息,请参阅 .netrc 文件。

    -n

    限制 ftp 在初始连接时尝试 “auto-login” 以进行非自动获取传输。 如果启用了自动登录, ftp 将检查用户主目录中的 .netrc (见下文)文件中是否存在描述远程计算机上帐户的条目。 如果不存在条目, ftp 将提示输入远程机器的登录名(默认是本地机器上的用户身份),并且如果需要,提示输入密码和登录帐户。 要覆盖自动获取传输的自动登录,请根据需要指定用户名(以及可选的密码)。

    -o output

    自动获取文件时,将内容保存在 output 中。 根据下面的文 文件命名约定 解析 output 。 如果 output 不是 ‘-’ 或不以 ‘|’ 开头,那么只有指定的第一个文件将被检索到 output; 所有其他文件将被检索到其远程名称的基本名称中。

    -P port

    将端口号设置为 port 。

    -p

    启用被动模式操作以在连接过滤防火墙后面使用。 此选项已被弃用,因为 ftp 现在默认尝试使用被动模式,如果服务器不支持被动连接,则回退到主动模式。

    -q quittime

    如果连接停止了 quittime 秒,则退出。

    -R

    重新启动所有非代理自动提取。

    -r wait

    如果连接失败,请重试连接尝试,暂停 wait 几秒钟。

    -s srcaddr

    使用 srcaddr 作为所有连接的本地 IP 地址。

    -t

    启用数据包跟踪。

    -T direction,maximum[,increment]

    将 direction 的最大传输速率设置为 maximum 字节/秒,如果指定,则将增量设置为 increment 字节/秒。 有关更多信息,请参阅 rate 。

    -u URL file [...]

    在命令行上将文件上传到 URL ,其中 URL 是 auto-fetch 支持的一种 ftp URL 类型(对于单个文件上传具有可选的目标文件名),并且 file 是要上传的一个或多个本地文件。

    -V

    禁用 verbose 和 progress 当输出到终端时覆盖默认启用。

    -v

    启用 verbose 和 progress 。 如果输出到终端,这是默认设置(在 progress 的情况下, ftp 是前台进程)。 强制 ftp 显示来自远程服务器的所有响应,并报告数据传输统计信息。

    可以在命令行上指定 ftp 与之通信的客户端主机。 如果这样做了, ftp 将立即尝试与该主机上的 FTP 服务器建立连接;否则, ftp 将进入其命令解释器并等待用户的指令。 当 ftp 正在等待来自用户的命令时,会向用户提供提示 ‘ftp>’ 。 ftp 可以识别以下命令:

    ! [command [args]]

    在本地机器上调用交互式 shell。 如果有参数,则第一个被视为直接执行的命令,其余参数作为其参数。

    $ macro-name [args]

    执行使用 macdef 命令定义的 macro-name 。 参数被传递给未覆盖的宏。

    account [passwd]

    成功完成登录后,提供远程系统访问资源所需的补充密码。 如果不包含参数,将在非回显输入模式下提示用户输入帐户密码。

    append local-file [remote-file]

    将本地文件附加到远程计算机上的文件。 如果未指定 remote-file ,则本地文件名在被任何 ntrans 或 nmap 设置更改后用于命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。

    ascii

    将文件传输 type 设置为网络 ASCII 。 这是默认类型。

    bell

    安排在每个文件传输命令完成后响铃。

    binary

    设置文件传输 type 以支持二进制图像传输。

    bye

    终止与远程服务器的 FTP 会话并退出 ftp 。 文件结束也将终止会话并退出。

    case

    在 get 、 mget 和 mput 命令期间切换远程计算机文件名大小写映射。 case 写开启时(默认关闭),远程计算机文件名全部大写,写入本地目录,字母映射为小写。

    cd remote-directory

    将远程机器上的工作目录更改为 remote-directory 。

    cdup

    将远程机器工作目录更改为当前远程机器工作目录的父级。

    chmod mode remote-file

    将远程系统上的文件 remote-file 的权限模式更改为 mode 。

    close

    终止与远程服务器的 FTP 会话,并返回命令解释器。 任何定义的宏都会被删除。

    cr

    在 ascii 类型文件检索期间切换回车剥离。 在 ascii 类型文件传输期间,记录由回车/换行序列表示。 当 cr 打开时(默认),从这个序列中去除回车符以符合 UNIX 单换行记录分隔符。 非 UNIX 远程系统上的记录可能包含单个换行符;当进行 ascii 类型的传输时,只有当 cr 关闭时,这些换行符才能与记录分隔符区分开来。

    delete remote-file

    删除远程机器上的文件 remote-file 。

    dir [remote-path [local-file]]

    打印远程机器上目录内容的列表。 该列表包括服务器选择包含的任何系统相关信息;例如,大多数 UNIX 系统会从命令 ‘ls -l’ 产生输出。 如果未指定 remote-path ,则使用当前工作目录。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 dir 输出的目标本地文件。 如果未指定本地文件,或者 local-file 为 ‘-’ ,则将输出发送到终端。

    disconnect

    close 的同义词。

    edit

    切换命令行编辑以及上下文相关的命令和文件完成。 如果输入来自终端,则会自动启用,否则禁用。

    epsv epsv4 epsv6

    分别在所有 IP、IPv4 和 IPv6 连接上切换扩展 EPSV 和 EPRT 命令的使用。 首先尝试 EPSV / EPRT, 然后再尝试 PASV / PORT 。 这是默认启用的。如果扩展命令失败,则此选项将在当前连接期间暂时禁用,或者直到 epsv 、 epsv4 或 epsv6 再次执行。

    exit

    bye 的同义词。

    features

    显示远程服务器支持的功能(使用 FEAT 命令)。

    fget localfile

    检索 localfile 中列出的文件,每个文件名有一行。

    form format

    将文件传输 form 设置为 format 。 默认(也是唯一受支持的)格式是 “non-print” 。

    ftp host [port]

    open 的同义词。

    ftp_debug [ftp_debug-value]

    切换调试模式。 如果指定了可选的 ftp_debug-value ,则它用于设置调试级别。 当调试打开时, ftp 打印发送到远程机器的每个命令,前面是字符串 ‘-->’ 。

    gate [host [port]]

    切换 gate-ftp 模式,该模式用于通过 TIS FWTK 和 Gauntlet ftp 代理进行连接。 如果尚未设置 gate-ftp 服务器(无论是由用户明确设置,还是来自 FTPSERVER 环境变量),则不允许这样做。 如果给定了 host ,则将启用 gate-ftp 模式,并将 gate-ftp 服务器设置为 host 。 如果还给出了 port ,则该端口将用作连接到 gate-ftp 服务器的端口。

    get remote-file [local-file]

    检索 remote-file 并将其存储在本地计算机上。 如果未指定本地文件名,则使用与远程计算机上相同的名称,但会受到当前 case 、 ntrans 和 nmap 设置的更改。 传输文件时使用 type 、 form 、 mode 和 structure 的当前设置。

    glob

    切换 mdelete 、 mget 、 mput 和 mreget 的文件名扩展。 如果使用 glob 关闭了 globbing,则文件名参数按字面意思获取,而不是扩展。 mput 的通配符在 csh(1) 中完成。 对于 mdelete 、 mget 和 mreget, 每个远程文件名在远程计算机上单独展开,并且列表不会合并。 目录名的扩展可能和普通文件名的扩展不同:具体结果取决于国外操作系统和ftp服务器,可以通过 ‘mls remote-files -’ 来预览 注意: mget 、 mput 和 mreget 并不意味着传输文件的整个目录子树。 这可以通过传输子树的 tar(1) 存档(以二进制模式)来完成。

    hash [size]

    为每个传输的数据块切换哈希符号 (‘#’) 打印。 数据块的大小默认为 1024 字节。 这可以通过以字节为单位指定 size 来更改。 启用 hash 会禁用 progress 。

    help [command]

    打印有关 command 含义的信息性消息。如果没有给出参数, ftp- 会打印一个已知命令的列表。

    idle [seconds]

    将远程服务器上的不活动计时器设置为 seconds 秒。 如果省略 seconds ,则打印当前的不活动计时器。

    image

    binary 的同义词。

    lcd [directory]

    更改本地计算机上的工作目录。 如果未指定 directory ,则使用用户的主目录。

    less file

    page 的同义词。

    lpage local-file

    使用 set pager 选项指定的程序显示 local-file 。

    lpwd

    打印本地机器上的工作目录。

    ls [remote-path [local-file]]

    dir 的同义词。

    macdef macro-name

    定义一个宏。 后续行存储为 macro-name; 空行(文件中的连续换行符或终端回车)终止宏输入模式。 在所有定义的宏中有 16 个宏和 4096 个字符的限制。 宏名称最多可包含 8 个字符。 宏仅适用于它们在其中定义的当前会话(或者如果在会话之外定义,则适用于使用下一个打 open 命令调用的会话),并且在执行 close 命令之前一直保持定义。 要调用宏,请使用 $ 命令(见上文)。

    宏处理器将 ‘$’ 和 ‘\’ 解释为特殊字符。 ‘$’ 后跟一个数字(或多个数字)被宏调用命令行上的相应参数替换。 ‘$’ 后跟 ‘i’ 向宏处理器发出信号,表明正在执行的宏将被循环。 在第一次传递中, “$i” 被宏调用命令行上的第一个参数替换,在第二次传递中,它被第二个参数替换,依此类推。 后跟任何字符的 ‘\’ 将被该字符替换。 使用 ‘\’ 防止对 ‘$’ 进行特殊处理。

    mdelete [remote-files]

    删除远程机器上的 remote-files 。

    mdir remote-files local-file

    与 dir 类似,但可以指定多个远程文件。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mdir 输出的目标本地文件。

    mget remote-files

    展开远程机器上的 remote-files ,并对由此产生的每个文件名执行一次 get 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 case 、 ntrans 和 nmap 设置处理生成的文件名。 文件转移到本地工作目录,可以用 ‘lcd directory’; 可以使用 ‘! mkdir directory’ 创建新的本地目录。

    mkdir directory-name

    在远程机器上创建一个目录。

    mls remote-files local-file

    和 ls 一样,除了可以指定多个远程文件,而且必须指定 local-file 。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mls 输出的目标本地文件。

    mlsd [remote-path]

    使用 MLSD 以机器可解析的形式显示 remote-path 的内容(如果没有给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。

    mlst [remote-path]

    使用 MLST 以机器可解析的形式显示 remote-path 的详细信息(如果未给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。

    mode mode-name

    将文件传输 mode 设置为 mode-name 。 默认(也是唯一受支持的)模式是 “stream” 。

    modtime remote-file

    以 RFC2822 格式显示文件在远程机器上的最后修改时间。

    more file

    page 的同义词。

    mput local-files

    在作为参数给出的本地文件列表中展开通配符,并对结果列表中的每个文件执行 put 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 ntrans 和 nmap 设置处理生成的文件名。

    mreget remote-files

    根据 mget, 但执行 reget 而不是 get 。

    msend local-files

    mput 的同义词。

    newer remote-file [local-file]

    仅当远程文件的修改时间比当前系统上的文件更新时才获取该文件。 如果当前系统上不存在该文件,则认为远程文件 newer 。 否则,此命令与 get 相同。

    nlist [remote-path [local-file]]

    ls 的同义词。

    nmap [inpattern outpattern]

    设置或取消设置文件名映射机制。 如果未指定参数,则未设置文件名映射机制。 如果指定了参数,则在 mput 命令期间映射远程文件名,并在没有指定远程目标文件名的情况下发出 put 命令。 如果指定了参数,则在 mget 命令期间映射本地文件名,并在没有指定本地目标文件名的情况下发出 get 命令。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 映射遵循由 inpattern 和 outpattern 设置的模式。 [Inpattern] 是传入文件名的模板(可能已经根据 ntrans 和 case 设置进行了处理)。 变量模板是通过在 inpattern 中包含序列 “$1 、” “$2 、” ... “$9” 来完成的。 使用 ‘\’ 来防止对 ‘$’ 字符进行这种特殊处理。 所有其他字符都按字面意思处理,并用于确定 nmap [inpattern] 变量值。 例如, inpattern $1.$2 和远程文件名 "mydata.data", $1 将具有值 "mydata",而 $2 将具有值 "data"。 outpattern 确定生成的映射文件名。 序列 “$1 、” “$2 、” ... “$9” 被替换为来自 inpattern 模板的任何值。 序列 “$0” 被原始文件名替换。 此外,如果 [seq1] 不是空字符串,则序列 “[seq1, seq2]” 被替换为 seq1 ;否则被 seq2 替换。 例如,命令

    nmap $1.$2.$3 [$1,$2].[$2,file]

    将为输入文件名 "myfile.data" 和 "myfile.data.old" 生成输出文件名 "myfile.data" ,为输入文件名 "myfile" 生成输出文件名 "myfile.file" ,为输入文件名生成 ".myfile" 生成输出文件名 "myfile.myfile" 。 空格可能包含在 outpattern 中,如示例中所示:

    nmap $1 sed s/ *$// > $1

    使用 ‘\’ 字符可防止对 ‘$ 、’ ‘[ 、’ ‘]’ 和 ‘,’ 字符进行特殊处理。

    ntrans [inchars [outchars]]

    设置或取消设置文件名字符翻译机制。 如果未指定参数,则未设置文件名字符转换机制。 如果指定了参数,则远程文件名中的字符在 mput 命令和未指定远程目标文件名的情况下发出的 put 命令期间进行转换。 如果指定了参数,本地文件名中的字符将在 mget 命令和 get 命令期间进行转换,而无需指定本地目标文件名。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 与 inchars 中的字符匹配的文件名中的字符将替换为 outchars 中的相应字符。 如果字符在 inchars 中的位置长于 outchars 的长度,则从文件名中删除该字符。

    open host [port]

    建立与指定 host FTP 服务器的连接。 可以提供可选的端口号,在这种情况下, ftp 将尝试联系该端口的 FTP 服务器。 如果 set auto-login 选项打开(默认), ftp 还将尝试自动将用户登录到 FTP 服务器(见下文)。

    page file

    使用 set pager 选项指定的程序检索 file 并显示。

    passive [auto]

    切换被动模式(如果没有给出参数)。 如果给出了 auto ,就好像 FTPMODE 设置为 ‘auto’ 一样。 如果被动模式打开(默认), ftp 将为所有数据连接发送 PASV 命令而不是 PORT 命令。 PASV 命令请求远程服务器为数据连接打开一个端口并返回该端口的地址。 远程服务器侦听该端口,客户端连接到它。 当使用更传统的 PORT 命令时,客户端侦听端口并将该地址发送到远程服务器,远程服务器连接回它。 当通过网关路由器或控制流量方向的主机使用 ftp 时,被动模式很有用。 (请注意,尽管 RFC1123 要求 FTP 服务器支持 PASV 命令,但有些不支持。)

    pdir [remote-path]

    执行 dir [remote-path], 并使用 set pager 选项指定的程序显示结果。

    pls [remote-path]

    执行 ls [remote-path], 并使用 set pager 选项指定的程序显示结果。

    pmlsd [remote-path]

    执行 mlsd [remote-path], 并使用 set pager 选项指定的程序显示结果。

    preserve

    切换对检索到的文件的修改时间的保留。

    progress

    切换传输进度条的显示。 对于 local-file 为 ‘-’ 或以 ‘|’ 开头的命令的传输,进度条将被禁用。 有关详细信息,请参阅 文件命名约定 。启用 progress 会禁用 hash 。

    prompt

    切换交互式提示。 在多个文件传输期间发生交互式提示,以允许用户有选择地检索或存储文件。 如果提示关闭(默认开启),任何 mget 或 mput 都会传输所有文件,任何 mdelete 都会删除所有文件。

    提示打开时,提示符下可以使用以下命令:

    a

    对当前文件回答 ‘yes’ ,并自动对当前命令的任何剩余文件回答 ‘yes’ 。

    n

    回答 ‘no’ ,不要传输文件。

    p

    对当前文件回答 ‘yes’ ,并关闭提示模式(因为已给出 “prompt off” )。

    q

    终止当前操作。

    y

    回答 ‘yes’ ,然后传输文件。

    ?

    显示帮助消息。

    任何其他响应都会对当前文件回答 ‘yes’ 。

    proxy ftp-command

    代理 ftp 命令 在辅助控制连接上执行 ftp 命令。 此命令允许同时连接到两个远程 FTP 服务器,以便在两个服务器之间传输文件。 第一个 proxy 命令应该是 open 的,以建立辅助控制连接。 输入命令 "proxy ?" 查看辅助连接上可执行的其他 FTP 命令。 以下命令以 proxy 开头时的行为不同: open 不会在自动登录过程中定义新的宏, close 不会删除现有的宏定义, get 和 mget 将文件从主控制连接上的主机传输到辅助控制连接上的主机控制连接,以及从辅助控制连接上的主机到主控制连接上的主机的 put 、 mput 和 append 传输文件。 第三方文件传输取决于辅助控制连接上的服务器对 FTP 协议 PASV 命令的支持。

    put local-file [remote-file]

    在远程机器上存储本地文件。 如果未指定 remote-file ,则在根据任何 ntrans 或 nmap 设置处理后使用本地文件名来命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。

    pwd

    打印远程机器上当前工作目录的名称。

    quit

    bye 的同义词。

    quote arg1 arg2 ...

    指定的参数被逐字发送到远程 FTP 服务器。

    rate direction [maximum [increment]]

    将最大传输速率限制为 maximum 字节/秒。 如果 maximum 值为 0,则禁用油门。

    direction 可以是以下之一:

    all

    两个方向。

    get

    传入转账。

    put

    传出转账。

    每次接收到给定信号时, maximum 可以通过 increment 字节(默认值:1024)动态修改:

    SIGUSR1

    按 increment 字节递增 maximum 。

    SIGUSR2

    按 increment 节递减 maximum 。 结果必须是正数。

    如果未提供 maximum ,则显示当前油门速率。

    注意:尚未为 ascii 模式传输实现 rate 。

    rcvbuf size

    将套接字接收缓冲区的大小设置为 size 。

    recv remote-file [local-file]

    get 的同义词。

    reget remote-file [local-file]

    reget 的行为类似于 get, 除了如果 local-file 存在并且小于 remote-file, 则假定 local-file 是 remote-file 的部分传输副本,并且从明显的故障点继续传输。 当通过容易断开连接的网络传输非常大的文件时,此命令很有用。

    remopts command [command-options]

    将远程 FTP 服务器上的 command 选项设置为 command-options (其缺失将根据特定命令进行处理)。 已知支持选项的远程 FTP 命令包括: ‘MLST’ (用于 MLSD 和 MLST )。

    rename [from [to]]

    将 from 从远程机器上重命名为文件 to 。

    reset

    清除回复队列。 此命令将命令/回复序列与远程 FTP 服务器重新同步。 在远程服务器违反 FTP 协议后,可能需要重新同步。

    restart marker

    在指示的 marker 处重新启动紧随其后的 get 或 put 。 在 UNIX 系统上,标记通常是文件中的字节偏移量。

    rhelp [command-name]

    向远程 FTP 服务器请求帮助。 如果指定了 command-name ,它也会提供给服务器。

    rmdir directory-name

    删除远程机器上的目录。

    rstatus [remote-file]

    不带参数,显示远程机器的状态。 如果指定了 remote-file ,则显示远程机器上 remote-file 的状态。

    runique

    切换在本地系统上使用唯一文件名存储文件。 如果已存在名称等于 get 或 mget 命令的目标本地文件名的文件,则在名称后附加 ".1" 。 如果生成的名称与另一个现有文件匹配,则会将 ".2" 附加到原始名称。 如果此过程持续到 ".99", 则会打印一条错误消息,并且不会进行传输。 将报告生成的唯一文件名。 请注意, runique 不会影响从 shell 命令生成的本地文件(见下文)。 默认值为关闭。

    send local-file [remote-file]

    put 的同义词。

    sendport

    切换 PORT 命令的使用。 默认情况下, ftp 将在为每次数据传输建立连接时尝试使用 PORT 命令。 使用 PORT 命令可以防止在执行多个文件传输时出现延迟。 如果 PORT 命令失败, ftp 将使用默认数据端口。 当禁止使用 PORT 命令时,不会尝试对每次数据传输使用 PORT 命令。 这对于某些忽略 FTP 命令但错误地表明它们已被接受的 PORT 实现很有用。

    set [option value]

    将 option 设置为 value 。如果未给出 option 和 value ,则显示所有选项及其值。当前支持的选项有:

    anonpass

    默认为 $FTPANONPASS

    ftp_proxy

    默认为 $ftp_proxy

    http_proxy

    默认为 $http_proxy

    no_proxy

    默认为 $no_proxy

    pager

    默认为 $PAGER

    prompt

    默认为 $FTPPROMPT

    rprompt

    默认为 $FTPRPROMPT

    site arg1 arg2 ...

    指定的参数作为 SITE 命令逐字发送到远程 FTP 服务器。

    size remote-file

    返回远程机器上 remote-file 的大小。

    sndbuf size

    将套接字发送缓冲区的大小设置为 size 。

    status

    显示 ftp 的当前状态。

    struct struct-name

    将文件传输 structure 设置为 struct-name 。 默认(也是唯一受支持的)结构是 “file” 。

    sunique

    切换以唯一文件名在远程计算机上存储文件。 远程 FTP 服务器必须支持 FTP 协议 STOU 命令才能成功完成。 远程服务器将报告唯一名称。默认值为关闭

    system

    显示远程机器上运行的操作系统类型。

    tenex

    将文件传输类型设置为与 TENEX 机器通信所需的类型。

    throttle

    rate 的同义词。

    trace

    切换数据包跟踪。

    type [type-name]

    将文件传输 type 设置为 type-name 。 如果未指定类型,则打印当前类型。 默认类型是网络 ASCII 。

    umask [newmask]

    将远程服务器上的默认 umask 设置为 newmask 。 如果省略 newmask ,则打印当前的 umask。

    unset option

    取消设置 option 。有关详细信息,请参阅 set 。

    usage command

    打印 command 的使用信息。

    user user-name [password [account]]

    向远程 FTP 服务器表明自己的身份。 如果没有指定 password 并且服务器需要它, ftp 将提示用户输入它(在禁用本地回显之后)。 如果未指定 account 字段,而 FTP 服务器需要它,则会提示用户输入。 如果指定了 account 字段,则在远程服务器不需要登录时,将在登录序列完成后将帐户命令中继到远程服务器。 除非在禁用 “auto-login” 的情况下调用 ftp ,否则此过程会在初始连接到 FTP 服务器时自动完成。

    verbose

    切换详细模式。 在详细模式下,来自 FTP 服务器的所有响应都会显示给用户。 此外,如果打开详细信息,当文件传输完成时,会报告有关传输效率的统计信息。 默认情况下,详细是打开的。

    xferbuf size

    将套接字发送和接收缓冲区的大小设置为 size 。

    ? [command]

    help 的同义词。

    嵌入空格的命令参数可以用引号 ‘"’ 标记。

    切换设置的命令可以采用明确的 on 或 off 参数来适当地强制设置。

    将字节数作为参数的命令(例如, hash 、 rate 和 xferbuf) 支持参数上的可选后缀,这会改变参数的解释。 支持的后缀是:

    b

    导致没有修改。(选修的)

    k

    Kilo; 将参数乘以 1024

    m

    Mega; 将参数乘以 1048576

    g

    Giga; 将参数乘以 1073741824

    如果 ftp 在传输过程中收到 SIGINFO (参见 stty(1) 的 “status” 参数)或 SIGQUIT 信号,则当前传输速率统计信息将被写入标准错误输出,格式与标准完成相同信息。

    AUTO-FETCHING FILES

    除了标准命令外,此版本的 ftp 还支持自动获取功能。 要启用自动获取,只需在命令行上传递主机名/文件列表。

    以下格式是自动获取元素的有效语法:

    [user@]host:[path][/]

    “Classic” FTP 格式。

    如果 path 包含一个 glob 字符并且启用了 glob,(请参阅 glob), 则执行相当于 ‘mget path’ 的操作。

    如果 path- 的目录组件不包含通配符,则在当前目录中以 path 的名称 basename(请参阅 basename(1)) 本地存储。 否则,使用完整的远程名称作为本地名称,相对于本地根目录。

    ftp://[user[:password]@]host[:port]/path[/][;type=X]

    如果未定义设置 set ftp_proxy ,则使用 FTP 协议检索 FTP URL。 否则,通过 set ftp_proxy 中定义的代理使用 HTTP 传输 URL。如果未定义 set ftp_proxy 并且给出了 user ,则以 user 身份登录。 在这种情况下,如果提供了 password ,请使用密码,否则提示用户输入密码。

    如果提供了 ‘;type=A’ 或 ‘;type=I’ 的后缀,则传输类型将分别以 ascii 或二进制进行。 默认传输类型是二进制。

    为了符合 RFC3986, ftp 将 “ftp://” 自动获取 URL 的 path 部分解释如下:

    • host[:port] 之后的 ‘/’ 被解释为 path 之前的分隔符,而不是 path 本身的一部分。

    • 该 path 被解释为以 ‘/ 分隔的名称组件列表。 对于除最后一个这样的组件之外的所有组件, ftp 执行相当于 cd 命令。 对于最后一个路径组件, ftp 执行与 get 命令等效的操作。’

    • 由 path 中的 ‘//’ 或 path 开头的额外 ‘/’ 产生的空名称组件将导致相当于没有目录名称的 cd 命令。这不太可能有用。

    • 路径组件中的任何 ‘%XX’ 代码(根据 RFC3986) 都将被解码,其中 XX 表示十六进制的字符代码。 此解码发生在 path 被拆分为组件之后,但在每个组件用于相当于 cd 或 get 命令之前。 一些常用的代码是 ‘%2F’ (代表 ‘/’) 和 ‘%7E’ (代表 ‘~’ )。

    上述解释具有以下后果:

    • 该路径相对于指定用户或 ‘anonymous’ 用户的默认登录目录进行解释。 如果需要 / 目录,请使用 “%2F” 的前导路径。 如果需要用户的主目录(并且远程服务器支持该语法),请使用 “%7Euser/” 的前导路径。 例如,要以用户 ‘myname’ 和密码 ‘mypass’ 的身份从 ‘localhost’ 检索 /etc/motd ,请使用 “ftp://myname:mypass@localhost/%2fetc/motd”

    • 精确的 cd 和 get 命令可以通过仔细选择在何处使用 ‘/’ 以及在何处使用 ‘%2F’ (或 ‘%2f’ )来控制。 例如,以下 URL 对应于指示命令的等效项:

      ftp://host/dir1/dir2/file

      “cd dir1”, “cd dir2”, “get file”.

      ftp://host/%2Fdir1/dir2/file

      “cd /dir1”, “cd dir2”, “get file”.

      ftp://host/dir1%2Fdir2/file

      “cd dir1/dir2”, “get file”.

      ftp://host/%2Fdir1%2Fdir2/file

      “cd /dir1/dir2”, “get file”.

      ftp://host/dir1%2Fdir2%2Ffile

      “get dir1/dir2/file”.

      ftp://host/%2Fdir1%2Fdir2%2Ffile

      “get /dir1/dir2/file”.

    • 您必须对与 cd 命令等效的每个中间目录具有适当的访问权限。

    http://[user[:password]@]host[:port]/path

    使用 HTTP 协议检索的 HTTP URL。 如果定义了 set http_proxy ,它将用作 HTTP 代理服务器的 URL。 如果需要 HTTP 授权来检索 path, 并且 ‘user’ (以及可选的 ‘password’) 在 URL 中,则使用它们进行首次身份验证。

    file:///path

    本地 URL,从本地主机上的 /path 复制。

    about:topic

    显示有关 topic 的信息;没有为此自动获取的元素检索文件。 支持的值包括:

    about:ftp

    有关 ftp 的信息。

    about:version

    ftp 的版本。 在报告问题时提供。

    除非上面另有说明,并且没有给出 -o output ,否则该文件将作为 path 的 basename(1) 存储在当前目录中。 请注意,如果收到 HTTP 重定向,则使用服务器提供的新目标 URL 和相应的新 path 重试获取。 建议使用显式 -o output ,以避免写入意外的文件名。

    如果经典格式或 FTP URL 格式有尾随 ‘/’ 或空 path 组件,则 ftp 将连接到站点并 cd 到作为路径给出的目录,并让用户处于交互模式以准备进一步输入。 如果正在使用 set ftp_proxy ,这将不起作用。

    直接 HTTP 传输使用 HTTP 1.1。代理 FTP 和 HTTP 传输使用 HTTP 1.0。

    如果给出 -R ,所有不通过 FTP 或 HTTP 代理的自动获取将重新启动。 对于 FTP, 这是通过使用 reget 而不是 get 来实现的。 对于 HTTP, 这是通过使用 ‘Range: bytes=’ HTTP/1.1 指令来实现的。

    如果需要 WWW 或代理 WWW 身份验证,系统将提示您输入用户名和密码以进行身份验证。

    在 URL 中指定 IPv6 数字地址时,您需要将地址括在方括号中。 例如: “ftp://[::1]:21/” 。 这是因为冒号用于 IPv6 数字地址以及作为端口号的分隔符。

    正在中止文件传输

    要中止文件传输,请使用终端中断键(通常为 Ctrl-C)。 发送转账将立即停止。 通过向远程服务器发送 FTP 协议 ABOR 命令并丢弃接收到的任何进一步数据,将停止接收传输。 完成此操作的速度取决于远程服务器对 ABOR 处理的支持。 如果远程服务器不支持 ABOR 命令,则在远程服务器完成发送请求的文件之前不会出现提示。

    如果在 ftp 等待远程服务器对 ABOR 处理的回复时使用终端中断键序列,则连接将被关闭。 这与传统行为(在此阶段忽略终端中断)不同,但被认为更有用。

    文件命名约定

    根据以下规则处理指定为 ftp 命令的参数的文件。

    1. 如果指定了文件名 ‘-’ ,则使用 stdin (用于读取)或 stdout (用于写入)。

    2. 如果文件名的第一个字符是 ‘|’, 则参数的其余部分被解释为 shell 命令。 然后 ftp 使用带有参数的 popen(3) 分叉一个 shell,并从标准输出 (stdin) 读取(写入)。 如果 shell 命令包含空格,则参数必须加引号;例如 ““| ls -lt”” 。 这种机制的一个特别有用的例子是: “dir "" |more” 。

    3. 如果上述检查失败,如果启用了 “globbing” ,则本地文件名将根据 csh(1) 中使用的规则进行扩展;请参阅 glob 命令。 如果 ftp 命令需要一个本地文件(例如 put ),则只使用 "globbing" 操作生成的第一个文件名。

    4. 对于未指定本地文件名的 mget 命令和 get 命令,本地文件名是远程文件名,可以通过 case 、 ntrans 或 nmap 设置进行更改。 如果 runique 打开,则生成的文件名可能会被更改。

    5. 对于具有未指定远程文件名的 mput 命令和 put 命令,远程文件名是本地文件名,可以通过 ntrans 或 nmap 设置进行更改。 如果打开了 sunique ,远程服务器可能会更改生成的文件名。

    文件传输参数

    FTP 规范指定了许多可能影响文件传输的参数。 type 可以是 “ascii 、” “image” (二进制)、 “ebcdic” 和 “local byte size” 之一(主要用于 PDP-10's 和 PDP-20's )。 ftp 支持 ascii 和 image 类型的文件传输,以及用于 tenex 模式传输的本地字节大小 8。

    ftp 仅支持其余文件传输参数的默认值: mode 、 form 和 struct 。

    .netrc 文件

    .netrc 文件包含自动登录过程使用的登录和初始化信息。 它驻留在用户的主目录中,除非被 -N netrc 选项覆盖,或在 NETRC 环境变量中指定。 识别以下标记;它们可以用空格、制表符或换行符分隔:

    machine name

    识别远程机器 name 。 自动登录进程在 .netrc 文件中搜索与 ftp 命令行上指定的远程机器匹配的 machine 令牌或作为 open 命令参数。 一旦匹配成功,后续的 .netrc 令牌就会被处理,当到达文件末尾或遇到另一 machine 或 default 令牌时停止。

    default

    除了 default 匹配任何名称外,这与 machine name 相同。 default 令牌只能有一个,而且必须是所有 machine 令牌。 这通常用作:

    default login anonymous password user@site

    从而使用户可以自动匿名 FTP 登录到 .netrc 中未指定的机器。这可以通过使用 -n 标志来禁用自动登录来覆盖。

    login name

    识别远程机器上的用户。 如果存在此令牌,则自动登录过程将使用指定的 name 启动登录。

    password string

    提供密码。 如果存在此令牌,并且远程服务器在登录过程中需要密码,则自动登录过程将提供指定的字符串。 请注意,如果 .netrc 文件中存在除 anonymous 以外的任何用户的此令牌,则如果该用户以外的任何人都可以读取 .netrc ,则 ftp 将中止自动登录过程。

    account string

    提供额外的帐户密码。 如果此令牌存在,如果远程服务器需要额外的帐户密码,自动登录进程将提供指定的字符串,否则自动登录进程将启动 ACCT 命令。

    macdef name

    定义一个宏。此令牌的功能类似于 ftp macdef 命令功能。 使用指定名称定义宏;它的内容从下一个 .netrc 行开始,一直持续到遇到空行(连续的换行符)。 与 .netrc 文件中的其他标记一样, macdef 仅适用于它之前的 machine 定义。 一个 macdef 条目不能被多个 machine 定义使用;相反,它必须在它打算使用的每台 machine 之后定义。 如果定义了名为 init 的宏,它会作为自动登录过程的最后一步自动执行。例如,

    default macdef init epsv4 off

    后跟一个空行。

    命令行编辑

    ftp 通过 editline(3) 库支持交互式命令行编辑。 它通过 edit 命令启用,如果输入来自 tty,则默认启用。 可以使用箭头键调用和编辑以前的行,也可以使用其他 GNU Emacs 样式的编辑键。

    editline(3) 库配置了一个 .editrc 文件 - 请参阅 editrc(5) 了解更多信息。

    ftp 可以使用额外的键绑定来提供上下文相关的命令和文件名完成(包括远程文件完成)。 要使用它,请将一个键绑定到 editline(3) 命令 ftp-complete 。 默认情况下,它绑定到 TAB 键。

    命令行提示

    默认情况下, ftp 向用户显示命令行提示符 “ftp> ” 。 这可以使用 set prompt 命令进行更改。

    使用 set rprompt 命令可以在屏幕右侧(输入命令后)显示提示。

    以下格式序列由给定信息替换:

    %/

    当前的远程工作目录。

    %c[[0]n],%.[[0]n]

    当前远程工作目录的尾随组件,如果给出数字 n ,则为 n 尾随组件。 如果 n 以 ‘0’ 开头,则跳过的组件数在尾随组件之前,格式为 “/``<number>trailing” (用于 ‘%c’) 或 “...trailing” (用于 ‘%.’) 。

    %M

    远程主机名。

    %m

    远程主机名,直到第一个 ‘.’ 。

    %n

    远程用户名。

    %%

    一个 ‘%’ 。

    环境

    ftp 使用以下环境变量。

    FTPANONPASS

    在匿名 FTP 传输中发送的密码。默认为 “ `whoami`@” 。

    FTPMODE

    覆盖默认操作模式。 支持值是:

    active

    仅主动模式 FTP

    auto

    自动确定被动或主动(这是默认设置)

    gate

    gate-ftp 模式

    passive

    仅被动模式 FTP

    FTPPROMPT

    要使用的命令行提示符。 默认为 “ftp> ” 。 有关详细信息,请参阅 命令行提示 。

    FTPRPROMPT

    要使用的命令行右侧提示。 默认为 “” 。 有关详细信息,请参阅 命令行提示 。

    FTPSERVER

    启用 gate 时用作 gate-ftp 服务器的主机。

    FTPSERVERPORT

    启用 gate 时连接到 gate-ftp 服务器时使用的端口。 默认是 “ftpgate/tcp” 的 getservbyname() 查找返回的端口。

    FTPUSERAGENT

    为 HTTP User-Agent 标头发送的值。

    HOME

    对于 .netrc 文件的默认位置(如果存在)。

    NETRC

    .netrc 文件的备用位置。

    PAGER

    由各种命令用来显示文件。如果为空或未设置,则默认为 more(1) 。

    SHELL

    对于默认 shell。

    ftp_proxy

    发出 FTP URL 请求时使用的 FTP 代理的 URL(如果未定义,则使用标准 FTP 协议)。

    有关代理使用的更多说明,请参阅 http_proxy 。

    http_proxy

    发出 HTTP URL 请求时使用的 HTTP 代理的 URL。 如果需要代理身份验证并且此 URL 中有用户名和密码,它们将在首次尝试对代理进行身份验证时自动使用。

    如果用户名或密码中需要 “unsafe” 的 URL 字符(例如 ‘@’ 或 ‘/’), 请使用 RFC3986 ‘%XX’ 编码对它们进行编码。

    请注意,在 ftp_proxy 和 http_proxy 中使用用户名和密码可能与使用它的其他程序(例如 lynx(1)) 不兼容。

    注意: 注意:这不用于交互式会话,仅用于命令行获取。

    no_proxy

    不使用代理的主机(或域)的空格或逗号分隔列表。 每个条目可能有一个可选的尾随 ":port", 它将匹配限制为与该端口的连接。

    扩展被动模式和防火墙

    某些防火墙配置不允许 ftp 使用扩展被动模式。 如果您发现即使是简单的 ls 在打印如下消息后也出现挂起:

    229 Entering Extended Passive Mode (|||58551|)

    那么您将需要在关闭 epsv4 的情况下禁用扩展被动模式。 有关如何自动执行此操作的示例,请参见上面的 .netrc 文件部分。

    参见

    getservbyname(3), editrc(5), services(5), ftpd(8)

    标准

    ftp 尝试遵守:

    RFC0959

    文件传输协议

    RFC1123

    主机要求 - 应用程序和支持

    RFC1635

    如何使用匿名 FTP

    RFC2389

    文件传输协议的特性协商机制

    RFC2428

    IPv6 和 NAT 的 FTP 扩展

    RFC2616

    超文本传输协议——HTTP/1.1

    RFC2822

    互联网消息格式

    RFC3659

    FTP 扩展

    RFC3986

    统一资源标识符 (URI)

    历史

    ftp 命令出现在 4.2BSD 中。

    各种功能,例如命令行编辑、上下文相关的命令和文件完成、动态进度条、文件和 URL 的自动获取、修改时间保存、传输速率限制、可配置的命令行提示符,以及标准 BSD ftp 的其他增强功能都在 NetBSD 1.3 及更高版本由 Luke Mewburn ⟨[email protected]⟩ 。

    WIDE/KAME 项目添加了 IPv6 支持(但可能不会出现在该程序的所有非 NetBSD 版本中,这取决于操作系统是否以与 KAME 类似的方式支持 IPv6)。

    缺陷

    许多命令的正确执行取决于远程服务器的正确行为。

    4.2BSD ascii 模式传输代码中的回车处理错误已得到纠正。 此更正可能导致二进制文件与使用 ascii 类型的 4.2BSD 服务器之间的错误传输。 使用二进制图像类型可以避免此问题。

    ftp 假定所有 IPv4 映射地址(格式为 ::ffff:10.1.1.1 的 IPv6 地址)表示可以由 AF_INET 套接字处理的 IPv4 目标。 但是,在某些 IPv6 网络配置中,此假设不成立。 在这样的环境中,IPv4 映射地址必须直接传递给 AF_INET6 套接字。 例如,如果您的站点使用 SIIT 转换器进行 IPv6 到 IPv4 的转换,则 ftp 无法支持您的配置。

    May 10, 2008

    FreeBSD 13.1-RELEASE

    名称

    ftp.1

    FTP(1)

    FTP(1)

    FreeBSD General Commands Manual

    FTP(1)

    名称

    ftp —

    Internet 文件传输程序

    ftp [-46AadefginpRtVv] [-N netrc] [-o output] [-P port] [-q quittime] [-r retry] [-s srcaddr] [-T dir,max [,inc]] [[user@]host [port]] [[user@]host:[path][/]] [file:///

    ftp 是 Internet 标准文件传输协议的用户界面。 该程序允许用户将文件传输到远程网络站点或从远程网络站点传输文件。

    最后五个参数将使用 FTP 或 HTTP 协议或通过直接复制来获取文件到当前目录。 这是脚本的理想选择。 有关详细信息,请参阅下面的 。

    选项可以在命令行中指定,也可以在命令解释器中指定。

    强制 ftp 仅使用 IPv4 地址。

    强制 ftp 仅使用 IPv6 地址。

    强制激活模式 ftp。 默认情况下, ftp- 将尝试使用被动模式 ftp 并在服务器不支持被动时回退到主动模式。 此选项使 ftp 始终使用活动连接。 它仅对连接到未正确实施被动模式的非常旧的服务器有用。

    使 ftp 绕过正常的登录过程,而使用匿名登录。

    启用调试。

    禁用命令行编辑。这对于 Emacs ange-ftp 模式很有用。

    强制为通过 FTP 或 HTTP 代理的传输重新加载缓存。

    禁用文件名通配。

    在多个文件传输期间关闭交互式提示。

    netrc

    使用 netrc 而不是 ~/.netrc 。 有关更多信息,请参阅 文件。

    限制 ftp 在初始连接时尝试 “auto-login” 以进行非自动获取传输。 如果启用了自动登录, ftp 将检查用户主目录中的 .netrc (见下文)文件中是否存在描述远程计算机上帐户的条目。 如果不存在条目, ftp 将提示输入远程机器的登录名(默认是本地机器上的用户身份),并且如果需要,提示输入密码和登录帐户。 要覆盖自动获取传输的自动登录,请根据需要指定用户名(以及可选的密码)。

    output

    自动获取文件时,将内容保存在 output 中。 根据下面的文 解析 output 。 如果 output 不是 ‘-’ 或不以 ‘|’ 开头,那么只有指定的第一个文件将被检索到 output; 所有其他文件将被检索到其远程名称的基本名称中。

    port

    将端口号设置为 port 。

    启用被动模式操作以在连接过滤防火墙后面使用。 此选项已被弃用,因为 ftp 现在默认尝试使用被动模式,如果服务器不支持被动连接,则回退到主动模式。

    quittime

    如果连接停止了 quittime 秒,则退出。

    重新启动所有非代理自动提取。

    wait

    如果连接失败,请重试连接尝试,暂停 wait 几秒钟。

    srcaddr

    使用 srcaddr 作为所有连接的本地 IP 地址。

    启用数据包跟踪。

    direction,maximum[,increment]

    将 direction 的最大传输速率设置为 maximum 字节/秒,如果指定,则将增量设置为 increment 字节/秒。 有关更多信息,请参阅 rate 。

    URL file [...]

    在命令行上将文件上传到 URL ,其中 URL 是 auto-fetch 支持的一种 ftp URL 类型(对于单个文件上传具有可选的目标文件名),并且 file 是要上传的一个或多个本地文件。

    禁用 verbose 和 progress 当输出到终端时覆盖默认启用。

    启用 verbose 和 progress 。 如果输出到终端,这是默认设置(在 progress 的情况下, ftp 是前台进程)。 强制 ftp 显示来自远程服务器的所有响应,并报告数据传输统计信息。

    可以在命令行上指定 ftp 与之通信的客户端主机。 如果这样做了, ftp 将立即尝试与该主机上的 FTP 服务器建立连接;否则, ftp 将进入其命令解释器并等待用户的指令。 当 ftp 正在等待来自用户的命令时,会向用户提供提示 ‘ftp>’ 。 ftp 可以识别以下命令:

    [command [args]]

    在本地机器上调用交互式 shell。 如果有参数,则第一个被视为直接执行的命令,其余参数作为其参数。

    macro-name [args]

    执行使用 macdef 命令定义的 macro-name 。 参数被传递给未覆盖的宏。

    [passwd]

    成功完成登录后,提供远程系统访问资源所需的补充密码。 如果不包含参数,将在非回显输入模式下提示用户输入帐户密码。

    local-file [remote-file]

    将本地文件附加到远程计算机上的文件。 如果未指定 remote-file ,则本地文件名在被任何 ntrans 或 nmap 设置更改后用于命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。

    将文件传输 type 设置为网络 ASCII 。 这是默认类型。

    安排在每个文件传输命令完成后响铃。

    设置文件传输 type 以支持二进制图像传输。

    终止与远程服务器的 FTP 会话并退出 ftp 。 文件结束也将终止会话并退出。

    在 get 、 mget 和 mput 命令期间切换远程计算机文件名大小写映射。 case 写开启时(默认关闭),远程计算机文件名全部大写,写入本地目录,字母映射为小写。

    remote-directory

    将远程机器上的工作目录更改为 remote-directory 。

    将远程机器工作目录更改为当前远程机器工作目录的父级。

    mode remote-file

    将远程系统上的文件 remote-file 的权限模式更改为 mode 。

    终止与远程服务器的 FTP 会话,并返回命令解释器。 任何定义的宏都会被删除。

    在 ascii 类型文件检索期间切换回车剥离。 在 ascii 类型文件传输期间,记录由回车/换行序列表示。 当 cr 打开时(默认),从这个序列中去除回车符以符合 UNIX 单换行记录分隔符。 非 UNIX 远程系统上的记录可能包含单个换行符;当进行 ascii 类型的传输时,只有当 cr 关闭时,这些换行符才能与记录分隔符区分开来。

    remote-file

    删除远程机器上的文件 remote-file 。

    [remote-path [local-file]]

    打印远程机器上目录内容的列表。 该列表包括服务器选择包含的任何系统相关信息;例如,大多数 UNIX 系统会从命令 ‘ls -l’ 产生输出。 如果未指定 remote-path ,则使用当前工作目录。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 dir 输出的目标本地文件。 如果未指定本地文件,或者 local-file 为 ‘-’ ,则将输出发送到终端。

    的同义词。

    切换命令行编辑以及上下文相关的命令和文件完成。 如果输入来自终端,则会自动启用,否则禁用。

    分别在所有 IP、IPv4 和 IPv6 连接上切换扩展 EPSV 和 EPRT 命令的使用。 首先尝试 EPSV / EPRT, 然后再尝试 PASV / PORT 。 这是默认启用的。如果扩展命令失败,则此选项将在当前连接期间暂时禁用,或者直到 epsv 、 epsv4 或 epsv6 再次执行。

    的同义词。

    显示远程服务器支持的功能(使用 FEAT 命令)。

    localfile

    检索 localfile 中列出的文件,每个文件名有一行。

    format

    将文件传输 form 设置为 format 。 默认(也是唯一受支持的)格式是 “non-print” 。

    host [port]

    的同义词。

    [ftp_debug-value]

    切换调试模式。 如果指定了可选的 ftp_debug-value ,则它用于设置调试级别。 当调试打开时, ftp 打印发送到远程机器的每个命令,前面是字符串 ‘-->’ 。

    [host [port]]

    切换 gate-ftp 模式,该模式用于通过 TIS FWTK 和 Gauntlet ftp 代理进行连接。 如果尚未设置 gate-ftp 服务器(无论是由用户明确设置,还是来自 FTPSERVER 环境变量),则不允许这样做。 如果给定了 host ,则将启用 gate-ftp 模式,并将 gate-ftp 服务器设置为 host 。 如果还给出了 port ,则该端口将用作连接到 gate-ftp 服务器的端口。

    remote-file [local-file]

    检索 remote-file 并将其存储在本地计算机上。 如果未指定本地文件名,则使用与远程计算机上相同的名称,但会受到当前 case 、 ntrans 和 nmap 设置的更改。 传输文件时使用 type 、 form 、 mode 和 structure 的当前设置。

    切换 mdelete 、 mget 、 mput 和 mreget 的文件名扩展。 如果使用 glob 关闭了 globbing,则文件名参数按字面意思获取,而不是扩展。 mput 的通配符在 csh(1) 中完成。 对于 mdelete 、 mget 和 mreget, 每个远程文件名在远程计算机上单独展开,并且列表不会合并。 目录名的扩展可能和普通文件名的扩展不同:具体结果取决于国外操作系统和ftp服务器,可以通过 ‘mls remote-files -’ 来预览 注意: mget 、 mput 和 mreget 并不意味着传输文件的整个目录子树。 这可以通过传输子树的 tar(1) 存档(以二进制模式)来完成。

    [size]

    为每个传输的数据块切换哈希符号 (‘#’) 打印。 数据块的大小默认为 1024 字节。 这可以通过以字节为单位指定 size 来更改。 启用 hash 会禁用 progress 。

    [command]

    打印有关 command 含义的信息性消息。如果没有给出参数, ftp- 会打印一个已知命令的列表。

    [seconds]

    将远程服务器上的不活动计时器设置为 seconds 秒。 如果省略 seconds ,则打印当前的不活动计时器。

    的同义词。

    [directory]

    更改本地计算机上的工作目录。 如果未指定 directory ,则使用用户的主目录。

    file

    的同义词。

    local-file

    使用 set pager 选项指定的程序显示 local-file 。

    打印本地机器上的工作目录。

    [remote-path [local-file]]

    的同义词。

    macro-name

    定义一个宏。 后续行存储为 macro-name; 空行(文件中的连续换行符或终端回车)终止宏输入模式。 在所有定义的宏中有 16 个宏和 4096 个字符的限制。 宏名称最多可包含 8 个字符。 宏仅适用于它们在其中定义的当前会话(或者如果在会话之外定义,则适用于使用下一个打 open 命令调用的会话),并且在执行 close 命令之前一直保持定义。 要调用宏,请使用 $ 命令(见上文)。

    宏处理器将 ‘$’ 和 ‘\’ 解释为特殊字符。 ‘$’ 后跟一个数字(或多个数字)被宏调用命令行上的相应参数替换。 ‘$’ 后跟 ‘i’ 向宏处理器发出信号,表明正在执行的宏将被循环。 在第一次传递中, “$i” 被宏调用命令行上的第一个参数替换,在第二次传递中,它被第二个参数替换,依此类推。 后跟任何字符的 ‘\’ 将被该字符替换。 使用 ‘\’ 防止对 ‘$’ 进行特殊处理。

    [remote-files]

    删除远程机器上的 remote-files 。

    remote-files local-file

    与 dir 类似,但可以指定多个远程文件。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mdir 输出的目标本地文件。

    remote-files

    展开远程机器上的 remote-files ,并对由此产生的每个文件名执行一次 get 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 case 、 ntrans 和 nmap 设置处理生成的文件名。 文件转移到本地工作目录,可以用 ‘lcd directory’; 可以使用 ‘! mkdir directory’ 创建新的本地目录。

    directory-name

    在远程机器上创建一个目录。

    remote-files local-file

    和 ls 一样,除了可以指定多个远程文件,而且必须指定 local-file 。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mls 输出的目标本地文件。

    [remote-path]

    使用 MLSD 以机器可解析的形式显示 remote-path 的内容(如果没有给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。

    [remote-path]

    使用 MLST 以机器可解析的形式显示 remote-path 的详细信息(如果未给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。

    mode-name

    将文件传输 mode 设置为 mode-name 。 默认(也是唯一受支持的)模式是 “stream” 。

    remote-file

    以 RFC2822 格式显示文件在远程机器上的最后修改时间。

    file

    的同义词。

    local-files

    在作为参数给出的本地文件列表中展开通配符,并对结果列表中的每个文件执行 put 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 ntrans 和 nmap 设置处理生成的文件名。

    remote-files

    根据 mget, 但执行 reget 而不是 get 。

    local-files

    的同义词。

    remote-file [local-file]

    仅当远程文件的修改时间比当前系统上的文件更新时才获取该文件。 如果当前系统上不存在该文件,则认为远程文件 newer 。 否则,此命令与 get 相同。

    [remote-path [local-file]]

    的同义词。

    [inpattern outpattern]

    设置或取消设置文件名映射机制。 如果未指定参数,则未设置文件名映射机制。 如果指定了参数,则在 mput 命令期间映射远程文件名,并在没有指定远程目标文件名的情况下发出 put 命令。 如果指定了参数,则在 mget 命令期间映射本地文件名,并在没有指定本地目标文件名的情况下发出 get 命令。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 映射遵循由 inpattern 和 outpattern 设置的模式。 [Inpattern] 是传入文件名的模板(可能已经根据 ntrans 和 case 设置进行了处理)。 变量模板是通过在 inpattern 中包含序列 “$1 、” “$2 、” ... “$9” 来完成的。 使用 ‘\’ 来防止对 ‘$’ 字符进行这种特殊处理。 所有其他字符都按字面意思处理,并用于确定 nmap [inpattern] 变量值。 例如, inpattern $1.$2 和远程文件名 "mydata.data", $1 将具有值 "mydata",而 $2 将具有值 "data"。 outpattern 确定生成的映射文件名。 序列 “$1 、” “$2 、” ... “$9” 被替换为来自 inpattern 模板的任何值。 序列 “$0” 被原始文件名替换。 此外,如果 [seq1] 不是空字符串,则序列 “[seq1, seq2]” 被替换为 seq1 ;否则被 seq2 替换。 例如,命令

    nmap $1.$2.$3 [$1,$2].[$2,file]

    将为输入文件名 "myfile.data" 和 "myfile.data.old" 生成输出文件名 "myfile.data" ,为输入文件名 "myfile" 生成输出文件名 "myfile.file" ,为输入文件名生成 ".myfile" 生成输出文件名 "myfile.myfile" 。 空格可能包含在 outpattern 中,如示例中所示:

    nmap $1 sed s/ *$// > $1

    使用 ‘\’ 字符可防止对 ‘$ 、’ ‘[ 、’ ‘]’ 和 ‘,’ 字符进行特殊处理。

    [inchars [outchars]]

    设置或取消设置文件名字符翻译机制。 如果未指定参数,则未设置文件名字符转换机制。 如果指定了参数,则远程文件名中的字符在 mput 命令和未指定远程目标文件名的情况下发出的 put 命令期间进行转换。 如果指定了参数,本地文件名中的字符将在 mget 命令和 get 命令期间进行转换,而无需指定本地目标文件名。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 与 inchars 中的字符匹配的文件名中的字符将替换为 outchars 中的相应字符。 如果字符在 inchars 中的位置长于 outchars 的长度,则从文件名中删除该字符。

    host [port]

    建立与指定 host FTP 服务器的连接。 可以提供可选的端口号,在这种情况下, ftp 将尝试联系该端口的 FTP 服务器。 如果 set auto-login 选项打开(默认), ftp 还将尝试自动将用户登录到 FTP 服务器(见下文)。

    file

    使用 set pager 选项指定的程序检索 file 并显示。

    [auto]

    切换被动模式(如果没有给出参数)。 如果给出了 auto ,就好像 FTPMODE 设置为 ‘auto’ 一样。 如果被动模式打开(默认), ftp 将为所有数据连接发送 PASV 命令而不是 PORT 命令。 PASV 命令请求远程服务器为数据连接打开一个端口并返回该端口的地址。 远程服务器侦听该端口,客户端连接到它。 当使用更传统的 PORT 命令时,客户端侦听端口并将该地址发送到远程服务器,远程服务器连接回它。 当通过网关路由器或控制流量方向的主机使用 ftp 时,被动模式很有用。 (请注意,尽管 RFC1123 要求 FTP 服务器支持 PASV 命令,但有些不支持。)

    [remote-path]

    执行 dir [remote-path], 并使用 set pager 选项指定的程序显示结果。

    [remote-path]

    执行 ls [remote-path], 并使用 set pager 选项指定的程序显示结果。

    [remote-path]

    执行 mlsd [remote-path], 并使用 set pager 选项指定的程序显示结果。

    切换对检索到的文件的修改时间的保留。

    切换传输进度条的显示。 对于 local-file 为 ‘-’ 或以 ‘|’ 开头的命令的传输,进度条将被禁用。 有关详细信息,请参阅 。启用 progress 会禁用 hash 。

    切换交互式提示。 在多个文件传输期间发生交互式提示,以允许用户有选择地检索或存储文件。 如果提示关闭(默认开启),任何 mget 或 mput 都会传输所有文件,任何 mdelete 都会删除所有文件。

    提示打开时,提示符下可以使用以下命令:

    对当前文件回答 ‘yes’ ,并自动对当前命令的任何剩余文件回答 ‘yes’ 。

    回答 ‘no’ ,不要传输文件。

    对当前文件回答 ‘yes’ ,并关闭提示模式(因为已给出 “prompt off” )。

    终止当前操作。

    回答 ‘yes’ ,然后传输文件。

    显示帮助消息。

    任何其他响应都会对当前文件回答 ‘yes’ 。

    ftp-command

    代理 ftp 命令 在辅助控制连接上执行 ftp 命令。 此命令允许同时连接到两个远程 FTP 服务器,以便在两个服务器之间传输文件。 第一个 proxy 命令应该是 open 的,以建立辅助控制连接。 输入命令 "proxy ?" 查看辅助连接上可执行的其他 FTP 命令。 以下命令以 proxy 开头时的行为不同: open 不会在自动登录过程中定义新的宏, close 不会删除现有的宏定义, get 和 mget 将文件从主控制连接上的主机传输到辅助控制连接上的主机控制连接,以及从辅助控制连接上的主机到主控制连接上的主机的 put 、 mput 和 append 传输文件。 第三方文件传输取决于辅助控制连接上的服务器对 FTP 协议 PASV 命令的支持。

    local-file [remote-file]

    在远程机器上存储本地文件。 如果未指定 remote-file ,则在根据任何 ntrans 或 nmap 设置处理后使用本地文件名来命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。

    打印远程机器上当前工作目录的名称。

    的同义词。

    arg1 arg2 ...

    指定的参数被逐字发送到远程 FTP 服务器。

    direction [maximum [increment]]

    将最大传输速率限制为 maximum 字节/秒。 如果 maximum 值为 0,则禁用油门。

    direction 可以是以下之一:

    两个方向。

    传入转账。

    传出转账。

    每次接收到给定信号时, maximum 可以通过 increment 字节(默认值:1024)动态修改:

    按 increment 字节递增 maximum 。

    按 increment 节递减 maximum 。 结果必须是正数。

    如果未提供 maximum ,则显示当前油门速率。

    注意:尚未为 ascii 模式传输实现 rate 。

    size

    将套接字接收缓冲区的大小设置为 size 。

    remote-file [local-file]

    的同义词。

    remote-file [local-file]

    的行为类似于 get, 除了如果 local-file 存在并且小于 remote-file, 则假定 local-file 是 remote-file 的部分传输副本,并且从明显的故障点继续传输。 当通过容易断开连接的网络传输非常大的文件时,此命令很有用。

    command [command-options]

    将远程 FTP 服务器上的 command 选项设置为 command-options (其缺失将根据特定命令进行处理)。 已知支持选项的远程 FTP 命令包括: ‘MLST’ (用于 MLSD 和 MLST )。

    [from [to]]

    将 from 从远程机器上重命名为文件 to 。

    清除回复队列。 此命令将命令/回复序列与远程 FTP 服务器重新同步。 在远程服务器违反 FTP 协议后,可能需要重新同步。

    marker

    在指示的 marker 处重新启动紧随其后的 get 或 put 。 在 UNIX 系统上,标记通常是文件中的字节偏移量。

    [command-name]

    向远程 FTP 服务器请求帮助。 如果指定了 command-name ,它也会提供给服务器。

    directory-name

    删除远程机器上的目录。

    [remote-file]

    不带参数,显示远程机器的状态。 如果指定了 remote-file ,则显示远程机器上 remote-file 的状态。

    切换在本地系统上使用唯一文件名存储文件。 如果已存在名称等于 get 或 mget 命令的目标本地文件名的文件,则在名称后附加 ".1" 。 如果生成的名称与另一个现有文件匹配,则会将 ".2" 附加到原始名称。 如果此过程持续到 ".99", 则会打印一条错误消息,并且不会进行传输。 将报告生成的唯一文件名。 请注意, runique 不会影响从 shell 命令生成的本地文件(见下文)。 默认值为关闭。

    local-file [remote-file]

    的同义词。

    切换 PORT 命令的使用。 默认情况下, ftp 将在为每次数据传输建立连接时尝试使用 PORT 命令。 使用 PORT 命令可以防止在执行多个文件传输时出现延迟。 如果 PORT 命令失败, ftp 将使用默认数据端口。 当禁止使用 PORT 命令时,不会尝试对每次数据传输使用 PORT 命令。 这对于某些忽略 FTP 命令但错误地表明它们已被接受的 PORT 实现很有用。

    [option value]

    将 option 设置为 value 。如果未给出 option 和 value ,则显示所有选项及其值。当前支持的选项有:

    默认为 $FTPANONPASS

    默认为 $ftp_proxy

    默认为 $http_proxy

    默认为 $no_proxy

    默认为 $PAGER

    默认为 $FTPPROMPT

    默认为 $FTPRPROMPT

    arg1 arg2 ...

    指定的参数作为 SITE 命令逐字发送到远程 FTP 服务器。

    remote-file

    返回远程机器上 remote-file 的大小。

    size

    将套接字发送缓冲区的大小设置为 size 。

    显示 ftp 的当前状态。

    struct-name

    将文件传输 structure 设置为 struct-name 。 默认(也是唯一受支持的)结构是 “file” 。

    切换以唯一文件名在远程计算机上存储文件。 远程 FTP 服务器必须支持 FTP 协议 STOU 命令才能成功完成。 远程服务器将报告唯一名称。默认值为关闭

    显示远程机器上运行的操作系统类型。

    将文件传输类型设置为与 TENEX 机器通信所需的类型。

    的同义词。

    切换数据包跟踪。

    [type-name]

    将文件传输 type 设置为 type-name 。 如果未指定类型,则打印当前类型。 默认类型是网络 ASCII 。

    [newmask]

    将远程服务器上的默认 umask 设置为 newmask 。 如果省略 newmask ,则打印当前的 umask。

    option

    取消设置 option 。有关详细信息,请参阅 set 。

    command

    打印 command 的使用信息。

    user-name [password [account]]

    向远程 FTP 服务器表明自己的身份。 如果没有指定 password 并且服务器需要它, ftp 将提示用户输入它(在禁用本地回显之后)。 如果未指定 account 字段,而 FTP 服务器需要它,则会提示用户输入。 如果指定了 account 字段,则在远程服务器不需要登录时,将在登录序列完成后将帐户命令中继到远程服务器。 除非在禁用 “auto-login” 的情况下调用 ftp ,否则此过程会在初始连接到 FTP 服务器时自动完成。

    切换详细模式。 在详细模式下,来自 FTP 服务器的所有响应都会显示给用户。 此外,如果打开详细信息,当文件传输完成时,会报告有关传输效率的统计信息。 默认情况下,详细是打开的。

    size

    将套接字发送和接收缓冲区的大小设置为 size 。

    [command]

    的同义词。

    嵌入空格的命令参数可以用引号 ‘"’ 标记。

    切换设置的命令可以采用明确的 on 或 off 参数来适当地强制设置。

    将字节数作为参数的命令(例如, hash 、 rate 和 xferbuf) 支持参数上的可选后缀,这会改变参数的解释。 支持的后缀是:

    导致没有修改。(选修的)

    Kilo; 将参数乘以 1024

    Mega; 将参数乘以 1048576

    Giga; 将参数乘以 1073741824

    如果 ftp 在传输过程中收到 SIGINFO (参见 stty(1) 的 “status” 参数)或 SIGQUIT 信号,则当前传输速率统计信息将被写入标准错误输出,格式与标准完成相同信息。

    除了标准命令外,此版本的 ftp 还支持自动获取功能。 要启用自动获取,只需在命令行上传递主机名/文件列表。

    以下格式是自动获取元素的有效语法:

    [user@]host:[path][/]

    “Classic” FTP 格式。

    如果 path 包含一个 glob 字符并且启用了 glob,(请参阅 glob), 则执行相当于 ‘mget path’ 的操作。

    如果 path- 的目录组件不包含通配符,则在当前目录中以 path 的名称 basename(请参阅 basename(1)) 本地存储。 否则,使用完整的远程名称作为本地名称,相对于本地根目录。

    [user[:password]@]host[:port]/path[/][;type=X]

    如果未定义设置 set ftp_proxy ,则使用 FTP 协议检索 FTP URL。 否则,通过 set ftp_proxy 中定义的代理使用 HTTP 传输 URL。如果未定义 set ftp_proxy 并且给出了 user ,则以 user 身份登录。 在这种情况下,如果提供了 password ,请使用密码,否则提示用户输入密码。

    如果提供了 ‘;type=A’ 或 ‘;type=I’ 的后缀,则传输类型将分别以 ascii 或二进制进行。 默认传输类型是二进制。

    为了符合 RFC3986, ftp 将 “ftp://” 自动获取 URL 的 path 部分解释如下:

    • host[:port] 之后的 ‘/’ 被解释为 path 之前的分隔符,而不是 path 本身的一部分。

    • 该 path 被解释为以 ‘/ 分隔的名称组件列表。 对于除最后一个这样的组件之外的所有组件, ftp 执行相当于 cd 命令。 对于最后一个路径组件, ftp 执行与 get 命令等效的操作。’

    上述解释具有以下后果:

    • 该路径相对于指定用户或 ‘anonymous’ 用户的默认登录目录进行解释。 如果需要 / 目录,请使用 “%2F” 的前导路径。 如果需要用户的主目录(并且远程服务器支持该语法),请使用 “%7Euser/” 的前导路径。 例如,要以用户 ‘myname’ 和密码 ‘mypass’ 的身份从 ‘localhost’ 检索 /etc/motd ,请使用 “ftp://myname:mypass@localhost/%2fetc/motd”

    • 精确的 cd 和 get 命令可以通过仔细选择在何处使用 ‘/’ 以及在何处使用 ‘%2F’ (或 ‘%2f’ )来控制。 例如,以下 URL 对应于指示命令的等效项:

      ftp://host/dir1/dir2/file

      “cd dir1”, “cd dir2”, “get file”.

      ftp://host/%2Fdir1/dir2/file

    [user[:password]@]host[:port]/path

    使用 HTTP 协议检索的 HTTP URL。 如果定义了 set http_proxy ,它将用作 HTTP 代理服务器的 URL。 如果需要 HTTP 授权来检索 path, 并且 ‘user’ (以及可选的 ‘password’) 在 URL 中,则使用它们进行首次身份验证。

    path

    本地 URL,从本地主机上的 /path 复制。

    topic

    显示有关 topic 的信息;没有为此自动获取的元素检索文件。 支持的值包括:

    有关 ftp 的信息。

    ftp 的版本。 在报告问题时提供。

    除非上面另有说明,并且没有给出 -o output ,否则该文件将作为 path 的 basename(1) 存储在当前目录中。 请注意,如果收到 HTTP 重定向,则使用服务器提供的新目标 URL 和相应的新 path 重试获取。 建议使用显式 -o output ,以避免写入意外的文件名。

    如果经典格式或 FTP URL 格式有尾随 ‘/’ 或空 path 组件,则 ftp 将连接到站点并 cd 到作为路径给出的目录,并让用户处于交互模式以准备进一步输入。 如果正在使用 set ftp_proxy ,这将不起作用。

    直接 HTTP 传输使用 HTTP 1.1。代理 FTP 和 HTTP 传输使用 HTTP 1.0。

    如果给出 -R ,所有不通过 FTP 或 HTTP 代理的自动获取将重新启动。 对于 FTP, 这是通过使用 reget 而不是 get 来实现的。 对于 HTTP, 这是通过使用 ‘Range: bytes=’ HTTP/1.1 指令来实现的。

    如果需要 WWW 或代理 WWW 身份验证,系统将提示您输入用户名和密码以进行身份验证。

    在 URL 中指定 IPv6 数字地址时,您需要将地址括在方括号中。 例如: “ftp://[::1]:21/” 。 这是因为冒号用于 IPv6 数字地址以及作为端口号的分隔符。

    要中止文件传输,请使用终端中断键(通常为 Ctrl-C)。 发送转账将立即停止。 通过向远程服务器发送 FTP 协议 ABOR 命令并丢弃接收到的任何进一步数据,将停止接收传输。 完成此操作的速度取决于远程服务器对 ABOR 处理的支持。 如果远程服务器不支持 ABOR 命令,则在远程服务器完成发送请求的文件之前不会出现提示。

    如果在 ftp 等待远程服务器对 ABOR 处理的回复时使用终端中断键序列,则连接将被关闭。 这与传统行为(在此阶段忽略终端中断)不同,但被认为更有用。

    根据以下规则处理指定为 ftp 命令的参数的文件。

    1. 如果指定了文件名 ‘-’ ,则使用 stdin (用于读取)或 stdout (用于写入)。

    2. 如果文件名的第一个字符是 ‘|’, 则参数的其余部分被解释为 shell 命令。 然后 ftp 使用带有参数的 popen(3) 分叉一个 shell,并从标准输出 (stdin) 读取(写入)。 如果 shell 命令包含空格,则参数必须加引号;例如 ““| ls -lt”” 。 这种机制的一个特别有用的例子是: “dir "" |more” 。

    FTP 规范指定了许多可能影响文件传输的参数。 type 可以是 “ascii 、” “image” (二进制)、 “ebcdic” 和 “local byte size” 之一(主要用于 PDP-10's 和 PDP-20's )。 ftp 支持 ascii 和 image 类型的文件传输,以及用于 tenex 模式传输的本地字节大小 8。

    ftp 仅支持其余文件传输参数的默认值: mode 、 form 和 struct 。

    .netrc 文件包含自动登录过程使用的登录和初始化信息。 它驻留在用户的主目录中,除非被 -N netrc 选项覆盖,或在 NETRC 环境变量中指定。 识别以下标记;它们可以用空格、制表符或换行符分隔:

    name

    识别远程机器 name 。 自动登录进程在 .netrc 文件中搜索与 ftp 命令行上指定的远程机器匹配的 machine 令牌或作为 open 命令参数。 一旦匹配成功,后续的 .netrc 令牌就会被处理,当到达文件末尾或遇到另一 machine 或 default 令牌时停止。

    除了 default 匹配任何名称外,这与 machine name 相同。 default 令牌只能有一个,而且必须是所有 machine 令牌。 这通常用作:

    default login anonymous password user@site

    从而使用户可以自动匿名 FTP 登录到 .netrc 中未指定的机器。这可以通过使用 -n 标志来禁用自动登录来覆盖。

    name

    识别远程机器上的用户。 如果存在此令牌,则自动登录过程将使用指定的 name 启动登录。

    string

    提供密码。 如果存在此令牌,并且远程服务器在登录过程中需要密码,则自动登录过程将提供指定的字符串。 请注意,如果 .netrc 文件中存在除 anonymous 以外的任何用户的此令牌,则如果该用户以外的任何人都可以读取 .netrc ,则 ftp 将中止自动登录过程。

    string

    提供额外的帐户密码。 如果此令牌存在,如果远程服务器需要额外的帐户密码,自动登录进程将提供指定的字符串,否则自动登录进程将启动 ACCT 命令。

    name

    定义一个宏。此令牌的功能类似于 ftp macdef 命令功能。 使用指定名称定义宏;它的内容从下一个 .netrc 行开始,一直持续到遇到空行(连续的换行符)。 与 .netrc 文件中的其他标记一样, macdef 仅适用于它之前的 machine 定义。 一个 macdef 条目不能被多个 machine 定义使用;相反,它必须在它打算使用的每台 machine 之后定义。 如果定义了名为 init 的宏,它会作为自动登录过程的最后一步自动执行。例如,

    default macdef init epsv4 off

    后跟一个空行。

    ftp 通过 editline(3) 库支持交互式命令行编辑。 它通过 edit 命令启用,如果输入来自 tty,则默认启用。 可以使用箭头键调用和编辑以前的行,也可以使用其他 GNU Emacs 样式的编辑键。

    editline(3) 库配置了一个 .editrc 文件 - 请参阅 editrc(5) 了解更多信息。

    ftp 可以使用额外的键绑定来提供上下文相关的命令和文件名完成(包括远程文件完成)。 要使用它,请将一个键绑定到 editline(3) 命令 ftp-complete 。 默认情况下,它绑定到 TAB 键。

    默认情况下, ftp 向用户显示命令行提示符 “ftp> ” 。 这可以使用 set prompt 命令进行更改。

    使用 set rprompt 命令可以在屏幕右侧(输入命令后)显示提示。

    以下格式序列由给定信息替换:

    当前的远程工作目录。

    %c[[0]n],%.[[0]n]

    当前远程工作目录的尾随组件,如果给出数字 n ,则为 n 尾随组件。 如果 n 以 ‘0’ 开头,则跳过的组件数在尾随组件之前,格式为 “/``<number>trailing” (用于 ‘%c’) 或 “...trailing” (用于 ‘%.’) 。

    远程主机名。

    远程主机名,直到第一个 ‘.’ 。

    远程用户名。

    一个 ‘%’ 。

    ftp 使用以下环境变量。

    在匿名 FTP 传输中发送的密码。默认为 “ `whoami`@” 。

    覆盖默认操作模式。 支持值是:

    仅主动模式 FTP

    自动确定被动或主动(这是默认设置)

    gate-ftp 模式

    仅被动模式 FTP

    要使用的命令行提示符。 默认为 “ftp> ” 。 有关详细信息,请参阅 。

    要使用的命令行右侧提示。 默认为 “” 。 有关详细信息,请参阅 。

    启用 gate 时用作 gate-ftp 服务器的主机。

    启用 gate 时连接到 gate-ftp 服务器时使用的端口。 默认是 “ftpgate/tcp” 的 getservbyname() 查找返回的端口。

    为 HTTP User-Agent 标头发送的值。

    对于 .netrc 文件的默认位置(如果存在)。

    .netrc 文件的备用位置。

    由各种命令用来显示文件。如果为空或未设置,则默认为 more(1) 。

    对于默认 shell。

    发出 FTP URL 请求时使用的 FTP 代理的 URL(如果未定义,则使用标准 FTP 协议)。

    有关代理使用的更多说明,请参阅 http_proxy 。

    发出 HTTP URL 请求时使用的 HTTP 代理的 URL。 如果需要代理身份验证并且此 URL 中有用户名和密码,它们将在首次尝试对代理进行身份验证时自动使用。

    如果用户名或密码中需要 “unsafe” 的 URL 字符(例如 ‘@’ 或 ‘/’), 请使用 RFC3986 ‘%XX’ 编码对它们进行编码。

    请注意,在 ftp_proxy 和 http_proxy 中使用用户名和密码可能与使用它的其他程序(例如 lynx(1)) 不兼容。

    注意: 注意:这不用于交互式会话,仅用于命令行获取。

    不使用代理的主机(或域)的空格或逗号分隔列表。 每个条目可能有一个可选的尾随 ":port", 它将匹配限制为与该端口的连接。

    某些防火墙配置不允许 ftp 使用扩展被动模式。 如果您发现即使是简单的 ls 在打印如下消息后也出现挂起:

    229 Entering Extended Passive Mode (|||58551|)

    那么您将需要在关闭 epsv4 的情况下禁用扩展被动模式。 有关如何自动执行此操作的示例,请参见上面的 文件部分。

    getservbyname(3), editrc(5), services(5), ftpd(8)

    ftp 尝试遵守:

    文件传输协议

    主机要求 - 应用程序和支持

    如何使用匿名 FTP

    文件传输协议的特性协商机制

    IPv6 和 NAT 的 FTP 扩展

    超文本传输协议——HTTP/1.1

    互联网消息格式

    FTP 扩展

    统一资源标识符 (URI)

    ftp 命令出现在 4.2BSD 中。

    各种功能,例如命令行编辑、上下文相关的命令和文件完成、动态进度条、文件和 URL 的自动获取、修改时间保存、传输速率限制、可配置的命令行提示符,以及标准 BSD ftp 的其他增强功能都在 NetBSD 1.3 及更高版本由 Luke Mewburn ⟨[email protected]⟩ 。

    WIDE/KAME 项目添加了 IPv6 支持(但可能不会出现在该程序的所有非 NetBSD 版本中,这取决于操作系统是否以与 KAME 类似的方式支持 IPv6)。

    许多命令的正确执行取决于远程服务器的正确行为。

    4.2BSD ascii 模式传输代码中的回车处理错误已得到纠正。 此更正可能导致二进制文件与使用 ascii 类型的 4.2BSD 服务器之间的错误传输。 使用二进制图像类型可以避免此问题。

    ftp 假定所有 IPv4 映射地址(格式为 ::ffff:10.1.1.1 的 IPv6 地址)表示可以由 AF_INET 套接字处理的 IPv4 目标。 但是,在某些 IPv6 网络配置中,此假设不成立。 在这样的环境中,IPv4 映射地址必须直接传递给 AF_INET6 套接字。 例如,如果您的站点使用 SIIT 转换器进行 IPv6 到 IPv4 的转换,则 ftp 无法支持您的配置。

    May 10, 2008

    FreeBSD 13.1-RELEASE

    path] [
    ftp://
    [user[
    :
    password]
    @
    ]host[
    :
    port]
    /
    path[
    /
    ][
    ;type=
    X]] [
    http://
    [user[
    :
    password]
    @
    ]host[
    :
    port]
    /
    path] [...]
    ftp
    -u
    URL file [...]

    由 path 中的 ‘//’ 或 path 开头的额外 ‘/’ 产生的空名称组件将导致相当于没有目录名称的 cd 命令。这不太可能有用。

  • 路径组件中的任何 ‘%XX’ 代码(根据 RFC3986) 都将被解码,其中 XX 表示十六进制的字符代码。 此解码发生在 path 被拆分为组件之后,但在每个组件用于相当于 cd 或 get 命令之前。 一些常用的代码是 ‘%2F’ (代表 ‘/’) 和 ‘%7E’ (代表 ‘~’ )。

  • “cd /dir1”, “cd dir2”, “get file”.

    ftp://host/dir1%2Fdir2/file

    “cd dir1/dir2”, “get file”.

    ftp://host/%2Fdir1%2Fdir2/file

    “cd /dir1/dir2”, “get file”.

    ftp://host/dir1%2Fdir2%2Ffile

    “get dir1/dir2/file”.

    ftp://host/%2Fdir1%2Fdir2%2Ffile

    “get /dir1/dir2/file”.

  • 您必须对与 cd 命令等效的每个中间目录具有适当的访问权限。

  • 如果上述检查失败,如果启用了 “globbing” ,则本地文件名将根据 csh(1) 中使用的规则进行扩展;请参阅
    glob
    命令。 如果
    ftp
    命令需要一个本地文件(例如
    put
    ),则只使用 "globbing" 操作生成的第一个文件名。
  • 对于未指定本地文件名的 mget 命令和 get 命令,本地文件名是远程文件名,可以通过 case 、 ntrans 或 nmap 设置进行更改。 如果 runique 打开,则生成的文件名可能会被更改。

  • 对于具有未指定远程文件名的 mput 命令和 put 命令,远程文件名是本地文件名,可以通过 ntrans 或 nmap 设置进行更改。 如果打开了 sunique ,远程服务器可能会更改生成的文件名。

  • 概要
    描述
    AUTO-FETCHING 文件
    -4
    -6
    -A
    -a
    -d
    -e
    -f
    -g
    -i
    -N
    .netrc
    -n
    -o
    文件命名约定
    -P
    -p
    -q
    -R
    -r
    -s
    -t
    -T
    -u
    -V
    -v
    !
    $
    account
    append
    ascii
    bell
    binary
    bye
    case
    cd
    cdup
    chmod
    close
    cr
    delete
    dir
    disconnect
    close
    edit
    epsv epsv4 epsv6
    exit
    bye
    features
    fget
    form
    ftp
    open
    ftp_debug
    gate
    get
    glob
    hash
    help
    idle
    image
    binary
    lcd
    less
    page
    lpage
    lpwd
    ls
    dir
    macdef
    mdelete
    mdir
    mget
    mkdir
    mls
    mlsd
    mlst
    mode
    modtime
    more
    page
    mput
    mreget
    msend
    mput
    newer
    nlist
    ls
    nmap
    ntrans
    open
    page
    passive
    pdir
    pls
    pmlsd
    preserve
    progress
    文件命名约定
    prompt
    a
    n
    p
    q
    y
    ?
    proxy
    put
    pwd
    quit
    bye
    quote
    rate
    all
    get
    put
    SIGUSR1
    SIGUSR2
    rcvbuf
    recv
    get
    reget
    reget
    remopts
    rename
    reset
    restart
    rhelp
    rmdir
    rstatus
    runique
    send
    put
    sendport
    set
    anonpass
    ftp_proxy
    http_proxy
    no_proxy
    pager
    prompt
    rprompt
    site
    size
    sndbuf
    status
    struct
    sunique
    system
    tenex
    throttle
    rate
    trace
    type
    umask
    unset
    usage
    user
    verbose
    xferbuf
    ?
    help
    b
    k
    m
    g
    AUTO-FETCHING FILES
    ftp://
    http://
    file:///
    about:
    about:ftp
    about:version
    正在中止文件传输
    文件命名约定
    文件传输参数
    .netrc 文件
    machine
    default
    login
    password
    account
    macdef
    命令行编辑
    命令行提示
    %/
    %M
    %m
    %n
    %%
    环境
    FTPANONPASS
    FTPMODE
    active
    auto
    gate
    passive
    FTPPROMPT
    命令行提示
    FTPRPROMPT
    命令行提示
    FTPSERVER
    FTPSERVERPORT
    FTPUSERAGENT
    HOME
    NETRC
    PAGER
    SHELL
    ftp_proxy
    http_proxy
    no_proxy
    扩展被动模式和防火墙
    .netrc
    参见
    标准
    RFC0959
    RFC1123
    RFC1635
    RFC2389
    RFC2428
    RFC2616
    RFC2822
    RFC3659
    RFC3986
    历史
    缺陷

    csh.1

    TCSH(1)

    TCSH(1)

    FreeBSD General Commands Manual

    TCSH(1)

    名称

    tcsh - 具有文件补全和命令行编辑的 C shell

    tcsh [-bcdefFimnqstvVxX**] [-Dname[=value]] [arg ...]**- tcsh -l

    tcsh 是 Berkeley UNIX C shell, csh(1) 的增强但完全兼容的版本。 它是一种命令语言解释器,可用作交互式登录 shell 和 shell 脚本命令处理器。 它包括一个命令行编辑器(参见 命令行编辑器)、可编程单词完成(参见 完成和列表)、拼写纠正(参见 拼写纠正)、历史机制(参见 历史替换)、作业控制(参见 作业) 和类似 C 的语法。 新功能 部分描述了 tcsh 相对于 csh(1) 的主要增强。 在本手册中,大多数 csh(1) 实现(特别是 4.4BSD csh)中没有的 tcsh 功能都标有 `(+)', 而 csh(1) 中存在但通常没有记录的功能则标有 `(u)'。

    如果 shell 的第一个参数(参数 0)是 `-' 那么它是一个登录 shell。 也可以通过使用 -l 标志作为唯一参数调用 shell 来指定登录 shell。

    其余标志参数解释如下:

    -b

    强制从选项处理中“中断”,导致任何进一步的 shell 参数被视为非选项参数。 其余参数不会被解释为 shell 选项。 这可用于将选项传递给 shell 脚本,而不会造成混淆或可能的诡计。 如果没有此选项,shell 将不会运行设置用户 ID 脚本。

    -c

    命令从以下参数(必须存在,并且必须是单个参数)中读取,存储在 command shell 变量中以供参考,然后执行。 任何剩余的参数都放在 argv shell 变量中。

    -d

    shell 从 ~/.cshdirs 加载目录堆栈,如 启动和关闭 中所述,无论它是否是登录 shell。 (+)

    -D_name_[=value]

    将环境变量 name 设置为 value. (仅限 Domain/OS) (+)

    -e

    如果任何调用的命令异常终止或产生非零退出状态,则 shell 退出。

    -f

    shell 不加载任何资源或启动文件,也不执行任何命令散列,因此启动速度更快。

    -F

    shell 使用 fork(2) 而不是 vfork(2) 来生成进程。 (+)

    -i

    shell 是交互式的,并提示其顶级输入,即使它看起来不是终端。 如果 Shell 的输入和输出是终端,则 Shell 在没有此选项的情况下是交互式的。

    -l

    该 shell 是一个登录 shell 。仅当 -l 是指定的唯一标志时才适用。

    -m

    即使它不属于有效用户,shell 也会加载 ~/.tcshrc 。 较新版本的 su(1) 可以将 -m 传递给 shell。 (+)

    -n

    shell 解析命令但不执行它们。 这有助于调试 shell 脚本。

    -q

    shell 接受 SIGQUIT(请参阅 信号处理) 并在调试器下使用时表现。 作业控制被禁用。 (u)

    -s

    命令输入取自标准输入。

    -t

    shell 读取并执行单行输入。 A `\' 可用于在该行末尾转义换行符并继续到另一行。

    -v

    设置 verbose 变量,以便在历史替换后回显命令输入。

    -x

    设置 echo shell 变量,以便在执行前立即回显命令。

    -V

    甚至在执行 ~/.tcshrc 之前设置 verbose shell 变量。

    -X

    与 -x 一样,就像 -V 与 -v 一样。

    --help

    在标准输出上打印帮助消息并退出。 (+)

    --version

    在标准输出上打印版本/平台/编译选项并退出。 此信息也包含在 version shell 变量中。 (+)

    在处理标志参数之后,如果参数仍然存在,但没有给出 -c、 -i、 -s 或 -t 选项,则第一个参数被视为命令文件的名称,或 ``script'',被执行。 shell 会打开这个文件并保存它的名字,以便可能用 `$0' 重新替换。 因为许多系统使用标准版本 6 或版本 7 shell,其 shell 脚本与此 shell 不兼容,所以 shell 使用这种 “标准” shell 来执行第一个字符不是 “#” 的脚本,即不要以评论开头。

    剩余的参数放在 argv shell 变量中。

    登录 shell 从执行系统文件 /etc/csh.cshrc 和 /etc/csh.login 中的命令开始。 然后它从用户 home 目录中的文件执行命令:首先是 ~/.tcshrc (+) ,或者,如果找不到 ~/.tcshrc ,则 ~/.cshrc ,然后是 ~/.history 的内容(或 histfile shell 变量)被加载到内存中,然后是 ~/.login, 最后是 ~/.cshdirs (或 dirsfile shell 变量的值) (+)。 如果这样编译,shell 可能会在 /etc/csh.cshrc 之前而不是之后读取 /etc/csh.login ,并且在 ~/.tcshrc 或 ~/.cshrc 和 ~/.history 之前而不是之后读取 ~/.login ;查看 version 变量。 (+)

    非登录 shell 在启动时只读 /etc/csh.cshrc 和 ~/.tcshrc 或 ~/.cshrc 。

    启动文件示例请参考 http://tcshrc.sourceforge.net。

    像 stty(1) 和 tset(1) 这样的命令,每次登录只需要运行一次,通常放在一个人的 ~/.login 文件中。 需要在 csh(1) 和 tcsh 中使用同一组文件的用户只能拥有一个 ~/.cshrc ,它在使用 tcsh 特定命令之前检查 tcsh shell 变量 (qv) 的存在,或者两者都拥有一个 ~/.cshrc 和 ~/.tcshrc 哪个 source (参见内置命令) ~/.cshrc 。 本手册的其余部分使用 `~/.tcshrc 来表示 `~/.tcshrc ,或者,如果找不到 ~/.tcshrc ,则使用 ~/.cshrc'。

    在正常情况下,shell 开始从终端读取命令,并以 `> ' 提示。 (参数的处理和使用 shell 处理包含命令脚本的文件将在后面描述。) shell 反复读取一行命令输入,将其分解为单词,将其放在命令历史列表中,对其进行解析并执行该行中的每个命令。

    可以通过在空行输入 `^D'、`logout' 或 `login' 或通过 shell 的自动注销机制(参见 autologout shell 变量)来注销。 当登录 shell 终止时,它会根据需要将 logout shell 变量设置为 `normal' 或 `automatic' ,然后从文件 /etc/csh.logout 和 ~/.logout 执行命令。 如果这样编译,shell 可能会在注销时丢弃 DTR;查看 version shell 变量。

    系统登录和注销文件的名称因系统而异,以便与不同的 csh(1) 变体兼容;见 文件。

    我们首先描述 命令行编辑器。 完成和列表 以及 拼写更正 部分描述了两组功能,它们作为编辑器命令实现,但值得单独处理。 最后, 编辑器命令 列出并描述了特定于 shell 的编辑器命令及其默认绑定。

    可以使用与 emacs(1) 和 vi(1) 中使用的键序列非常相似的键序列来编辑命令行输入。 仅当设置了编辑 shell 变量时,编辑器才处于活动状态,默认情况下,它在交互式 shell 中处于活动状态。 内置的 bindkey 以显示和更改键绑定。 默认情况下使用 emacs(1) 样式的键绑定(除非另外编译了 shell;请参阅 version 变量),但 bindkey 可以将键绑定更改为 vi(1) 样式的绑定。

    shell 总是将箭头键(在 TERMCAP 环境变量中定义)绑定到

    down

    down-history

    up

    up-history

    left

    backward-char

    right

    forward-char

    除非这样做会改变另一个单字符绑定。 可以使用 settc 将箭头键转义序列设置为空字符串,以防止这些绑定。 箭头键的 ANSI/VT100 序列始终是绑定的。

    其他键绑定在很大程度上是 emacs(1) 和 vi(1) 用户所期望的,并且可以通过 bindkey 轻松显示,因此无需在此列出。 同样, bindkey 可以列出编辑器命令以及每个命令的简短描述。 某些键绑定具有不同的行为,具体取决于使用的是 emacs(1) 还是 vi(1) 样式绑定;有关详细信息,请参阅 vimode 。

    请注意,编辑器命令与 shell 的 “word” 概念不同。 编辑器用不在 shell 变量 wordchars 中的任何非字母数字字符分隔单词,而 shell 只识别空格和一些对其具有特殊含义的字符,列在 词法结构下。

    当给定一个独特的缩写时,shell 通常能够完成单词。 键入单词的一部分(例如 `ls /usr/lost')并按 Tab 键以运行 complete-word 编辑器命令。 shell 将文件名 `/usr/lost' 补全为 `/usr/lost+found/',用输入缓冲区中的完整单词替换不完整的单词。 (注意终端“/”;完成在已完成目录的末尾添加一个“/”,在其他已完成单词的末尾添加一个空格,以加快输入速度并提供成功完成的视觉指示。 可以取消设置 addsuffix shell 变量来防止这种情况。) 如果没有找到匹配项(也许 `/usr/lost+found' 不存在),终端铃声响起。 如果单词已经完整(也许你的系统上有一个 `/usr/lost',或者你想得太远并且输入了整个内容)一个 `/' 或空格被添加到末尾,如果它不是' t 已经在那里了。

    完成工作在生产线的任何地方,而不仅仅是在最后;完成的文本将行的其余部分向右推。 在单词中间补全通常会导致光标右侧的剩余字符需要删除。

    命令和变量可以以几乎相同的方式完成。 例如,如果 emacs 是系统上唯一以 `em' 开头的命令,则键入 `em[tab]' 将完成 `em' 到 `emacs'。 完成可以在 path 中的任何目录中找到命令,或者如果给定完整的路径名。 如果没有其他变量以 `ar' 开头,键入 `echo $ar[tab]' 将完成 `$ar' 到 `$argv'。

    shell 解析输入缓冲区以确定您要完成的单词是否应该作为文件名、命令或变量完成。 缓冲区中的第一个单词和 `;'、`|'、`|&'、`&&' 或 `||' 之后的第一个单词 被认为是一个命令。 以“$”开头的单词被认为是一个变量。 其他任何东西都是文件名。 空行作为文件名“完成”。

    您可以随时通过键入 “^D” 来运行 delete-char-or-list-or-eof 编辑器命令来列出单词的可能完成。 shell 使用 ls-F 内置命令 (qv) 列出可能的完成,并重新打印提示符和未完成的命令行,例如:

    > ls /usr/l[^D]- lbin/ lib/ local/ lost+found/- > ls /usr/l

    如果设置了 autolist shell 变量,那么只要完成失败,shell 就会列出剩余的选项(如果有的话):

    > set autolist- > nm /usr/lib/libt[tab]- libtermcap.a@ libtermlib.a@- > nm /usr/lib/libterm

    如果 autolist 设置为 `ambiguous',则仅在完成失败时才会列出选项,并且不会向正在完成的单词添加新字符。

    要完成的文件名可以包含变量、您自己或他人的主目录,缩写为 “~” (参见 文件名替换) 和目录堆栈条目,缩写为 “=” (参见 目录堆栈替换)。 例如,

    > ls ~k[^D]- kahn kas kellogg- > ls ~ke[tab]- > ls ~kellogg/

    或

    > set local = /usr/local- > ls $lo[tab]- > ls $local/[^D]- bin/ etc/ lib/ man/ src/- > ls $local/

    请注意,变量也可以使用 expand-variables 编辑器命令显式扩展。

    delete-char-or-list-or-eof 仅在行尾列出;在一行的中间,它删除光标下的字符,并在空行上记录一个字符,或者,如果设置了 ignoreeof ,则什么也不做。 `M-^D',绑定到编辑器命令 list-choices, 列出一行中任何地方的完成可能性,以及 list-choices (或任何一个相关的编辑器命令,可以删除、列出和/或记录 out, 在 delete-char-or-list-or-eof 下列出) 如果需要,可以使用 bindkey 内置命令绑定到 `^D'。

    complete-word-fwd 和 complete-word-back 编辑器命令(默认情况下不绑定到任何键)可用于在可能的补全列表中上下循环,用下一个或上一个单词替换当前单词列表。

    shell 变量 fignore 可以设置为完成时忽略的后缀列表。 考虑以下:

    > ls- Makefile condiments.h~ main.o side.c- README main.c meal side.o- condiments.h main.c~- > set fignore = (.o \)- > emacs ma[^D]- main.c main.c main.o- > emacs ma[tab]- > emacs main.c

    `main.c~' 和 `main.o' 被补全忽略(但不列出),因为它们以 fignore 的后缀结尾。 请注意,在 `~' 前面需要一个 `\' 以防止它被扩展为 home ,如 文件名替换 中所述。 如果只有一个完成是可能的,则忽略 fignore 。

    如果 complete 变量设置为 `enhance',则完成 1) 忽略大小写和 2) 将句点、连字符和下划线(`.'、 `-' 和 `_')视为单词分隔符,并且连字符和下划线等效. 如果您有以下文件

    comp.lang.c comp.lang.perl comp.std.c++- comp.lang.c++ comp.std.c

    并输入 `mail -f c.l.c[tab]', 它会补全为 `mail -f comp.lang.c', 而 ^D 会列出 `comp.lang.c' 和 `comp.lang.c++'。 `mail -f c..c++[^D]' 将列出 `comp.lang.c++' 和 `comp.std.c++' 。在以下目录中键入 `rm a--file[^D]'

    A_silly_file a-hyphenated-file another_silly_file

    将列出所有三个文件,因为忽略大小写并且连字符和下划线是等效的。 但是,句点不等同于连字符或下划线。

    如果 complete shell 变量设置为 `Enhance',则仅当用户键入小写字符或连字符时,完成才会忽略大小写以及连字符和下划线分隔符之间的差异。 输入大写字符或下划线将不匹配相应的小写字符或连字符分隔符。 在上一个示例的目录中输入 `rm a--file[^D]' 仍然会列出所有三个文件,但输入 `rm A--file' 将仅匹配 `A_silly_file' 并输入 `rm a__file[^D]' 将只匹配 `A_silly_file' 和 `another_silly_file' 因为用户明确使用了大写或下划线字符。

    完成和列出受其他几个 shell 变量的影响: recexact 可以设置为在最短的唯一匹配上完成,即使更多的输入可能会导致更长的匹配:

    > ls- fodder foo food foonly- > set recexact- > rm fo[tab]

    只是哔哔声,因为 `fo' 可以扩展为 `fod' 或 `foo',但如果我们输入另一个 `o',

    > rm foo[tab]- > rm foo

    完成在 `foo' 上完成,即使 `food' 和 `foonly' 也匹配。 autoexpand 可以设置为在每次完成尝试之前运行 expand-history 编辑器命令, autocorrect 可以设置为在每次完成尝试之前对要完成的单词进行拼写更正(请参阅 拼写更正) ,而 correct 可以设置为在一个之后自动完成命令点击“返回”。 matchbeep 可以设置在各种情况下发出完成蜂鸣声或不发出蜂鸣声, nobeep 可以设置为从不发出蜂鸣声。 nostat 可以设置为与目录匹配的目录和/或模式的列表,以防止完成机制对这些目录进行 stat(2) 处理。 listmax 和 listmaxrows 可以设置为限制在不先询问的情况下列出的项目和行的数量(分别)。可以设置 recognize_only_executables 使 shell 在列出命令时只列出可执行文件,但是速度很慢。

    最后, complete 的内置命令可用于告诉 shell 如何完成文件名、命令和变量以外的单词。 补全和列出不适用于 glob-patterns(请参阅 文件名替换) ,但 list-glob 和 expand-glob 编辑器命令对 glob-patterns 执行等效功能。

    shell 有时可以更正文件名、命令和变量名的拼写,以及完成和列出它们。

    可以使用 spell-word 编辑器命令(通常绑定到 Ms 和 MS)和使用 spell-line (通常绑定到 M-$)对整个输入缓冲区进行拼写更正。 correct shell 变量可以设置为 `cmd' 以更正命令名称或 `all' 以在每次键入 return 时更正整行,并且可以设置 autocorrect 以在每次完成尝试之前更正要完成的单词。

    当以任何这些方式调用拼写更正并且 shell 认为命令行的任何部分拼写错误时,它会使用更正的行进行提示:

    > set correct = cmd- > lz /usr/bin- CORRECT>ls /usr/bin (y|n|e|a)?

    可以回答 “y” 或空格来执行更正的行,“e” 可以将未更正的命令留在输入缓冲区中,“a” 可以中止命令,就好像 “^C” 被击中一样,以及其他任何东西来执行原线不变。

    拼写更正可识别用户定义的补全(请参阅 complete 内置命令)。 如果定义补全位置的输入单词与补全列表中的单词相似,则拼写更正会记录拼写错误并建议后一个单词作为更正。 但是,如果输入单词与该位置的任何可能完成不匹配,则拼写更正不会记录拼写错误。

    与补全一样,拼写更正可以在行中的任何位置进行,将行的其余部分向右推,并可能在光标右侧留下额外的字符。

    `bindkey' 列出键绑定和 `bindkey -l' 列表并简要描述编辑器命令。 这里只描述新的或特别有趣的编辑器命令。 有关每个编辑器的键绑定的描述,请参见 emacs(1) 和 vi(1) 。

    每个命令默认绑定的一个或多个字符在括号中给出。 `^character' 表示控制字符,而 `M-character 表示元字符,在没有元键的终端上键入为转义 character 。 大小写计数,但默认情况下绑定到字母的命令为方便起见绑定到小写和大写字母。

    backward-char (^B, left)

    向后移动一个字符。 vimode 修改的光标行为。

    backward-delete-word (M-^H, M-^?)

    从当前单词的开头剪切到光标 - 保存在剪切缓冲区中。 vimode 修改的字边界行为。

    backward-word (M-b, M-B)

    移动到当前单词的开头。 vimode 修改的字边界和光标行为。

    beginning-of-line (^A, home)

    移动到行首。 vimode 修改的光标行为。

    capitalize-word (M-c, M-C)

    大写从光标到当前单词结尾的字符。 vimode 修改的字边界行为。

    complete-word (tab)

    按照 完成和列表 中的描述完成一个单词。

    complete-word-back (not bound)

    与 complete-word-fwd 类似,但从列表末尾开始。

    complete-word-fwd (not bound)

    用可能完成列表中的第一个单词替换当前单词。 可能会重复通过列表逐步降级。 在列表末尾,发出哔哔声并恢复为不完整的单词。

    complete-word-raw (^X-tab)

    与 complete-word 类似,但忽略用户定义的补全。

    copy-prev-word (M-^_)

    将当前行中的前一个单词复制到输入缓冲区中。 另见 insert-last-word 。 vimode 修改的字边界行为。

    dabbrev-expand (M-/)

    将当前单词扩展为当前是前导子字符串的最近的前一个单词,必要时环绕历史列表(一次)。 重复 dabbrev-expand 而没有对下一个前一个单词等进行任何干预的键入更改,跳过相同的匹配项,就像 history-search-backward 所做的那样。

    delete-char (not bound)

    删除光标下的字符。另请参阅 delete-char-or-list-or-eof 。 vimode 修改的光标行为。

    delete-char-or-eof (not bound)

    如果光标下有字符或空行上有 end-of-file ,则执行 delete-char 。 另请参阅 delete-char-or-list-or-eof 。 vimode 修改的光标行为。

    delete-char-or-list (not bound)

    如果光标下有一个字符,或者行尾有 list-choices ,则执行 delete-char 。 另请参阅 delete-char-or-list-or-eof 。

    delete-char-or-list-or-eof (^D)

    如果光标下有一个字符,则执行 delete-char ,行尾的 list-choices 或在空行的 end-of-file 。 另请参见这三个命令,每个命令只执行一个操作,以及 delete-char-or-eof、 delete-char-or-list 和 list-or-eof, 每个命令执行三个中不同的两个。

    delete-word (M-d, M-D)

    从光标剪切到当前单词的结尾 - 保存在剪切缓冲区中。vimode 修改的字边界行为。

    down-history (down-arrow, ^N)

    像 up-history, 但步下,停在原来的输入行。

    downcase-word (M-l, M-L)

    小写从光标到当前单词结尾的字符。 vimode 修改的字边界行为。

    end-of-file (not bound)

    发出文件结束信号,导致 shell 退出,除非设置了 ignoreeof shell 变量 (qv) 来防止这种情况。 另请参阅 delete-char-or-list-or-eof 。

    end-of-line (^E, end)

    将光标移动到行尾。 vimode 修改的光标行为。

    expand-history (M-space)

    扩展当前单词中的历史替换。请参阅 历史替换 。 另请参见 magic-space、 toggle-literal-history 和 autoexpand shell 变量。

    expand-glob (^X-*)

    将全局模式扩展到光标左侧。请参阅 文件名替换 。

    expand-line (not bound)

    与 expand-history 类似,但扩展了输入缓冲区中每个单词的历史替换。

    expand-variables (^X-$)

    将变量展开到光标左侧。 请参阅 变量替换 。

    forward-char (^F, right)

    向前移动一个字符。 vimode 修改的光标行为。

    forward-word (M-f, M-F)

    前进到当前单词的结尾。 vimode 修改的字边界和光标行为。

    history-search-backward (M-p, M-P)

    在历史列表中向后搜索从输入缓冲区的当前内容开始直到光标的命令,并将其复制到输入缓冲区中。 搜索字符串可以是包含 “*”、“?”、“[]” 或 “{}” 的全局模式(参见 文件名替换) 。 up-history 和 down-history 将从历史列表中的适当点开始。 仅限 Emacs 模式。 另请参阅 历史向前搜索 and i-search-back 。

    history-search-forward (M-n, M-N)

    与 history-search-backward 类似,但向前搜索。

    i-search-back (not bound)

    像 history-search-backward 一样向后搜索,将第一个匹配复制到输入缓冲区中,光标位于模式的末尾,并使用 `bck:' 和第一个匹配进行提示。 可以键入其他字符来扩展搜索,可以键入 i-search-back 以继续使用相同的模式进行搜索,必要时环绕历史列表, (i-search-back 必须绑定到单个字符才能工作)或可以键入以下特殊字符之一:

    ^W

    将光标下单词的其余部分附加到搜索模式。

    删除(或任何绑定到 backward-delete-char)

    撤消最后输入的字符的效果,并在适当的情况下从搜索模式中删除一个字符。

    ^G

    如果先前的搜索成功,则中止整个搜索。 如果没有,则返回上一次成功的搜索。

    escape

    结束搜索,将当前行留在输入缓冲区中。

    任何其他未绑定到 self-insert-command 的字符都会终止搜索,将当前行留在输入缓冲区中,然后被解释为正常输入。 特别是,回车会导致当前行被执行。 另请参阅 i-search-fwd 和 history-search-backward 。 vimode 修改的字边界行为。

    i-search-fwd (not bound)

    与 i-search-back 类似,但向前搜索。 vimode 修改的字边界行为。

    insert-last-word (M-_)

    将前一个输入行的最后一个单词 (`!$') 插入输入缓冲区。 另请参阅 copy-prev-word 。

    list-choices (M-^D)

    列出 Completion and listing 下所述的完成可能性。 另请参阅 delete-char-or-list-or-eof 和 list-choices-raw 。

    list-choices-raw (^X-^D)

    与 list-choices 类似,但忽略用户定义的补全。

    list-glob (^X-g, ^X-G)

    列表(通过 ls-F 内置) 与光标左侧的全局模式(请参阅 文件名替换) 匹配。

    list-or-eof (not bound)

    在空行上执行 list-choices 或 end-of-file 。 另请参阅 delete-char-or-list-or-eof 。

    magic-space (not bound)

    扩展当前行中的历史替换,如 expand-history ,并插入一个空格。 magic-space 设计为与空格键绑定,但默认不绑定。

    normalize-command (^X-?)

    在 PATH 中搜索当前单词,如果找到,则将其替换为可执行文件的完整路径。 特殊字符被引用。 别名被扩展和引用,但别名中的命令不是。 该命令对于将命令作为参数的命令很有用,例如 `dbx' 和 `sh -x'。

    normalize-path (^X-n, ^X-N)

    按照 symlinks shell 变量的 `expand' 设置中的描述扩展当前单词。

    overwrite-mode (unbound)

    在输入和覆盖模式之间切换。

    run-fg-editor (M-^Z)

    保存当前输入行并在 editors shell 变量中找到第一个单词的文件名部分的已停止作业。 如果没有设置 editors ,那么将使用 EDITOR 环境变量的文件名部分(如果未设置,则为 “ed”)和 VISUAL 环境变量(如果未设置,则为 “vi”)。 如果找到这样的作业,它会重新启动,就好像输入了 `fg %job' 一样。 这用于轻松地在编辑器和外壳之间来回切换。 有些人将此命令绑定到 `^Z',以便他们可以更轻松地执行此操作。

    run-help (M-h, M-H)

    搜索有关当前命令的文档,使用与完成例程相同的“当前命令”概念,并打印它。 没有办法使用寻呼机; run-help 专为简短的帮助文件而设计。 如果定义了特殊别名 helpcommand ,它将以命令名作为唯一参数运行。 否则,文档应位于名为 command.help、 command.1、 command.6、 command.8 或 command 的文件中,该文件应位于 HPATH 环境变量中列出的目录之一中。 如果有多个帮助文件,则只打印第一个。

    self-insert-command (text characters)

    在插入模式(默认)下,将键入的字符插入到光标下字符之后的输入行中。 在覆盖模式下,用键入的字符替换光标下的字符。 输入模式通常保留在行之间,但 inputmode shell 变量可以设置为 “insert” 或 “overwrite” 以将编辑器置于每行开头的该模式。 另请参见 覆盖模式 。

    sequence-lead-in (arrow prefix, meta prefix, ^X)

    表示以下字符是多键序列的一部分。 将一个命令绑定到一个多键序列实际上会创建两个绑定:第一个字符到 sequence-lead-in 和整个序列到命令。 所有以绑定到 sequence-lead-in 的字符开头的序列都有效地绑定到 undefined-key ,除非绑定到另一个命令。

    spell-line (M-$)

    尝试更正输入缓冲区中每个单词的拼写,例如 spell-word ,但忽略第一个字符是 “-”、“!”、“^” 或 “%” 或包含 “\” 的单词, `*' 或 `?',以避免开关、替换等问题。 请参阅 拼写更正。

    spell-word (M-s, M-S)

    尝试按照 拼写更正 中的说明更正当前单词的拼写。 检查似乎是路径名的单词的每个组成部分。

    toggle-literal-history (M-r, M-R)

    扩展或“取消扩展”输入缓冲区中的历史替换。 另请参阅 expand-history 和 autoexpand 变量。

    undefined-key (any unbound key)

    哔哔声。

    up-history (up-arrow, ^P)

    将历史列表中的前一个条目复制到输入缓冲区中。 如果设置了 histlit ,则使用条目的文字形式。 可能会重复通过历史列表逐步向上,在顶部停止。

    upcase-word (M-u, M-U)

    从光标到当前单词结尾的字符大写。 vimode 修改的字边界行为。

    vi-beginning-of-next-word (not bound)

    转到下一个单词的开头。 vimode 修改的字边界和光标行为。

    vi-eword (not bound)

    Vi 移动到当前单词的末尾。 vimode 修改的字边界行为。

    vi-search-back (?)

    用“?”提示 对于搜索字符串(可能是全局模式,与 history-search-backward 一样),搜索它并将其复制到输入缓冲区中。 如果没有找到匹配项,铃声就会响起。 点击 return 结束搜索并将最后一个匹配项留在输入缓冲区中。 点击转义结束搜索并执行匹配。 仅限 vi 模式。

    vi-search-fwd (/)

    类似于 vi-search-back ,但向前搜索。

    which-command (M-?)

    对输入缓冲区的第一个字执行 which 参见内置命令的描述)。

    yank-pop (M-y)

    在 yank 或另一个 yank-pop 之后立即执行时,将 yank 字符串替换为 killring 中的下一个前一个字符串。 这也有旋转 killring 的效果,这样这个字符串将被认为是最近被后面的 yank 命令杀死的。 重复 yank-pop 将在 killring 中循环任意次数。

    shell 将输入行拆分为空格和制表符处的单词。 特殊字符 `&'、`|'、`;'、`<'、`>'、`(' 和 `)' 和双字符 `&&'、`||'、`<<' 和 ` >>' 始终是单独的单词,无论它们是否被空格包围。

    当 shell 的输入不是终端时,使用字符 `#' 开始注释。 每个 `#' 和它出现的输入行的其余部分在进一步解析之前被丢弃。

    特殊字符(包括空格或制表符)可能会被阻止具有其特殊含义,并且可能会成为另一个单词的一部分,方法是在它前面加上反斜杠(`\')或将其括在单('''),双 (`"' ) 或后向 (``') 引号。 如果没有以其他方式引用,则以 `\' 开头的换行符等效于空白,但在引号内,此序列会产生换行符。

    此外,除了 History substitution 之外的 Substitutions (见下文)都可以通过用单引号括住它们出现的字符串(或字符串的一部分)或通过引用关键字符(例如,`$' 或 ``' 分别用于 Variable substitution 或 Command substitution )与 `\'。 (Alias substitution 也不例外:以任何方式引用已定义 alias 的单词的任何字符都可以防止替换别名。 引用别名的常用方法是在其前面加上反斜杠。)反斜杠可以防止 History substitution ,但单引号不能。 用双引号或反引号引用的字符串会进行 Variable substitution 和 Command substitution ,但会阻止其他替换。

    单引号或双引号内的文本变成一个单词(或一个单词的一部分)。 这些字符串中的元字符(包括空格和制表符)不会形成单独的单词。 只有在一种特殊情况下(参见下面的 Command substitution ),双引号字符串可以产生多个单词的部分;单引号字符串永远不会。 后向引号很特殊:它们表示 Command substitution (qv),这可能导致多个单词。

    引用复杂的字符串,尤其是本身包含引用字符的字符串,可能会造成混淆。 请记住,不必像在人类写作中那样使用引号!可能更容易引用不是整个字符串,而是仅引用字符串中需要引用的那些部分,如果合适的话,使用不同类型的引用来这样做。

    可以设置 backslash_quote shell 变量 (qv) 以使反斜杠始终引用 `\'、 `'' 和 `"' 。 (+) 这可能会使复杂的引用任务变得更容易,但它可能会导致 csh(1) 脚本中的语法错误。

    我们现在描述 shell 按照它们发生的顺序对输入执行的各种转换。 我们在传递所涉及的数据结构以及影响它们的命令和变量时会注意到。 请记住,可以通过在 词法结构。

    从终端输入的每个命令或“事件”都保存在历史列表中。 前面的命令总是被保存, history shell 变量可以设置为一个数字来保存那么多的命令。 histdup shell 变量可以设置为不保存重复事件或连续重复事件。

    保存的命令从 1 开始按顺序编号,并带有时间标记。 通常不需要使用事件编号,但当前事件编号可以通过放置 “!” 作为提示的一部分。在 prompt shell 变量中。

    shell 实际上以扩展和文字(未扩展)的形式保存历史。 如果设置了 histlit shell 变量,则显示和存储历史记录的命令使用文字形式。

    history 内置命令可以随时打印、存储在文件中、恢复和清除历史列表,并且可以设置 savehist 和 histfile shell 变量在注销时自动存储历史列表并在登录时恢复。

    历史替换将历史列表中的单词引入到输入流中,从而可以轻松地重复命令、在当前命令中重复上一个命令的参数或修复上一个命令中的拼写错误,而且输入很少且置信度很高。

    历史替换以字符“!”开头。它们可以从输入流中的任何位置开始,但它们不会嵌套。 这个特殊的缩写将在后面描述。 可以通过设置 histchars shell 变量来更改用于表示历史替换的字符(`!' 和 `^')。 任何包含历史替换的输入行在执行之前都会被打印出来。

    历史替换可能有一个 “event specification”,它指示要从中提取词的事件,一个 “word designator”,它从选定的事件中选择特定的词,和/或一个 “modifier” ,它操纵选定的单词。

    事件规范可以是

    n

    一个数字,指的是一个特定的事件

    -n

    一个偏移量,指的是当前事件之前的事件 n

    当前事件。 这应该在不检查递归的 csh(1) 中谨慎使用。 tcsh 允许 10 级递归。 (+)

    !

    上一个事件(相当于 `-1')

    s

    第一个单词以字符串 s 开头的最近事件

    ?s?

    包含字符串 s 的最新事件。 第二个“?” 如果后面紧跟换行符,则可以省略。

    例如,考虑一下某人的历史列表:

    9 8:30 nroff -man wumpus.man- 10 8:31 cp wumpus.man wumpus.man.old- 11 8:36 vi wumpus.man- 12 8:37 diff wumpus.man.old wumpus.man

    这些命令连同它们的事件编号和时间戳一起显示。 我们尚未输入的当前事件是事件 13。 `!!' 指上一个事件,12。 `!!' 可以缩写为 `!' 如果它后面跟着 `:' (`:' 将在下面描述)。 `!n' 指的是事件 9,它以 `n' 开头。 `!?old?' 也指事件 12,其中包含 `old' 。 如果没有单词指示符或修饰符,历史引用只会扩展到整个事件,因此我们可以输入 `!cp' 来重做复制命令,或者如果 `diff' 输出滚动到屏幕顶部,我们可能会输入 `!!|more' 。

    历史参考可以在必要时用大括号与周围的文本隔离开来。例如, `!vdoc' 会查找以 `vdoc' 开头的命令,并且在本例中找不到,但 `!{v}doc' 会明确地扩展为 `vi wumpus.mandoc'。 即使在大括号中,历史替换也不会嵌套。

    (+) 例如,当 csh(1) 将 `!3d' 扩展为事件 3 并附加了字母 `d' 时, tcsh 将其扩展为以 `3d' 开头的最后一个事件;只有完全数字的参数被视为事件编号。 这使得调用以数字开头的事件成为可能。 要在 csh(1) 中扩展 `!3d' ,请说 `!{3}d'。

    要从事件中选择单词,我们可以按照事件规范使用 `:' 和所需单词的指示符。 输入行的单词从 0 开始编号,第一个(通常是命令)单词为 0,第二个单词(第一个参数)为 1,以此类推。 基本的词指示符是:

    0

    第一个(命令)词

    n

    第 n 个参数

    ^

    第一个参数,相当于 `1'

    $

    最后的论据

    %

    用 ?s? 搜索匹配的词

    x-y

    一系列单词

    -y

    相当于 `0-y'

    *

    相当于 `^-$' ,但如果事件仅包含 1 个单词,则不返回任何内容

    x*

    相当于 `x-$'

    x-

    相当于 `x*' ,但省略了最后一个单词 (`$')

    选定的单词被插入到由单个空格分隔的命令行中。 例如,前面例子中的 `diff' 命令可能被输入为 `diff !!:1.old !!:1' (使用 `:1' 选择前一个事件的第一个参数)或 `diff !-2:2 !-2:1' 从 `cp' 命令中选择和交换参数。 如果我们不关心 `diff' 的顺序,我们可能会说 `diff !-2:1-2' 或简单地说 `diff !-2:*'。 `cp' 命令可能写成 `cp wumpus.man !#:1.old', 使用 `#' 表示当前事件。 `!n:- hurkle.man' 将重用来自 `nroff' 命令的前两个单词来表示 `nroff -man hurkle.man'。

    如果参数选择器以 `^', `$', `*', `%' 或 `-' 开头,则可以省略分隔事件规范和单词指示符的 `:' 。 例如,我们的 `diff' 命令可能是 `diff !!^.old !!^' 或等价的 `diff !!$.old !!$' 。 但是,如果 `!!' 缩写为 `!', 以 `-' 开头的参数选择器将被解释为事件规范。

    历史参考可能有一个词指示符,但没有事件规范。 然后它引用前面的命令。 继续我们的 `diff' 示例,我们可以简单地说 `diff !^.old !^' 或者,以相反的顺序获得参数,只是 `diff !*'。

    历史引用中的一个或多个单词可以被编辑或 ``modified'',方法是在它后面加上一个或多个修饰符,每个修饰符前面都有一个 `:':

    h

    删除尾随路径名组件,留下头部。

    t

    删除所有前导路径名组件,留下尾部。

    r

    删除文件扩展名 `.xxx',保留根名称。

    e

    删除除扩展名之外的所有内容。

    u

    大写第一个小写字母。

    l

    小写第一个大写字母。

    s_/l/r/_

    用 l 代替 r。 l 只是一个类似于 r 字符串,而不是同名的 ed(1) 命令中的正则表达式。 任何字符都可以用作分隔符来代替 `/'; a `\' 可用于引用 l 和 r 中的分隔符。 r 中的字符`&' 被 l 替换; `\' 也引用了 `&'。 如果 l 为空 (``''), 则使用来自先前替换的 l 或来自先前搜索的 s 或事件规范中的事件编号。 如果后面紧跟换行符,则可以省略尾随分隔符。

    &

    重复前面的替换。

    g

    对每个单词应用一次以下修饰符。

    a (+)

    将以下修饰符尽可能多地应用于单个单词。 `a' 和 `g' 可以一起使用以全局应用修饰符。 使用 `s' 修饰符,仅替换原始单词中包含的模式,而不是包含任何替换结果的模式。

    p

    打印新的命令行但不执行它。

    q

    引用替换的单词,防止进一步替换。

    x

    与 q 类似,但在空格、制表符和换行符处分成单词。

    修饰符仅适用于第一个可修改的单词(除非使用了 `g' )。 没有单词可以修改是错误的。

    例如, `diff' 命令可能写成 `diff wumpus.man.old !#^:r', 使用 `:r' 从同一行的第一个参数中删除 `.old' (`!#^') 。 我们可以说 `echo hello out there', 然后说 `echo !*:u' 来大写 `hello', `echo !*:au' 来大声说出来,或者 `echo !*:agu' 来大喊大叫。 我们可以在 `mail -s "I forgot my password" rot' 后面加上 `!:s/rot/root' 来更正 `root' 的拼写(但请参阅 拼写更正 了解不同的方法)。

    替换有一个特殊的缩写。 `^' ,当它是输入行的第一个字符时,等价于 `!:s^'。 因此,我们可能会说 `^rot^root' 来进行前面示例中的拼写更正。 这是唯一没有明确以 `!' 开头的历史替换。

    (+) 在这样的 csh 中,只能将一个修饰符应用于每个历史记录或变量扩展。 在 tcsh 中,可以使用多个,例如

    % mv wumpus.man /usr/man/man1/wumpus.1- % man !$:t:r- man wumpus

    在 csh 中,结果将是 `wumpus.1:r'。 后跟冒号的替换可能需要用大括号与之隔离:

    > mv a.out /usr/games/wumpus- > setenv PATH !$:h:$PATH- Bad ! modifier: $.- > setenv PATH !{-2$:h}:$PATH- setenv PATH /usr/games:/bin:/usr/bin:.

    第一次尝试在 csh 中会成功,但在 tcsh 中会失败,因为 tcsh 在第二个冒号之后需要另一个修饰符,而不是 `$'。

    最后,可以通过编辑器以及刚刚描述的替换访问历史记录。 up- 和 down-history、 history-search-backward 和 -forward、 i-search-back 和 -fwd、 vi-search-back 和 -fwd、 copy-prev-word 和 insert-last-word 编辑器命令搜索历史列表中的事件并将它们复制到输入缓冲区中。 toggle-literal-history 编辑器命令在输入缓冲区中历史行的展开形式和文字形式之间切换。 expand-history 和 expand-line 分别在当前单词和整个输入缓冲区中展开历史替换。

    维护一个别名列表,可以通过 alias 和 unalias 命令设置、取消设置和打印这些别名。 在将命令行解析为简单命令(请参阅 命令) 后,检查每个命令的第一个单词,从左到右,看它是否有别名。 如果是这样,则将第一个单词替换为别名。 如果别名包含历史引用,它将经历 History substitution (qv),就好像原始命令是前一个输入行一样。 如果别名不包含历史引用,则参数列表保持不变。

    因此,如果 `ls' 的别名是 `ls -l' ,那么命令 `ls /usr' 就会变成 `ls -l /usr', 这里的参数列表不会受到干扰。 如果 `lookup' 的别名是 `grep !^ /etc/passwd' 那么 `lookup bill' 将变成 `grep bill /etc/passwd'。 别名可用于引入解析器元语法。 例如, `alias print 'pr \!* | lpr'' 定义了一个 ``command'' (`print') ,它 pr(1) 将它的参数传递给行式打印机。

    重复别名替换,直到命令的第一个单词没有别名。 如果别名替换没有更改第一个单词(如前面的示例中),则将其标记为防止循环。 检测到其他循环并导致错误。

    shell 引用了一些别名;请参阅 特殊别名。

    shell 维护一个变量列表,每个变量都有一个包含零个或多个单词的列表作为值。 可以使用 set 和 unset 命令显示和更改 shell 变量的值。 系统维护自己的 ``environment'' 变量列表。 这些可以使用 printenv、 setenv 和 unsetenv 显示和更改。

    (+) 可以使用 `set -r'(qv) 将变量设为只读。 只读变量不得修改或取消设置;尝试这样做会导致错误。 一旦设置为只读,就不能将变量设置为可写,因此应谨慎使用 `set -r' 。 环境变量不能设为只读。

    一些变量由 shell 设置或由它引用。例如, argv 变量是 shell 参数列表的图像,并且该变量值的单词以特殊方式引用。 shell 引用的一些变量是切换;shell 不关心它们的值是什么,只关心它们是否被设置。 例如, verbose 变量是一个切换,它导致命令输入被回显。 -v 命令行选项设置此变量。 Special shell variables 列出了 shell 引用的所有变量。

    其他操作以数值方式处理变量。 `@' 命令允许执行数字计算并将结果分配给变量。 但是,变量值始终表示为(零个或多个)字符串。 出于数值运算的目的,空字符串被认为是零,并且忽略多字值的第二个和后续字。

    在输入行被别名和解析之后,并且在每个命令被执行之前,变量替换由 `$' 字符键入。 这种扩展可以通过在 `$' 前面加上 `\' 来防止,除非在 `"'s 中它 总是 出现,而在 `'' 中它 从不 出现。 ``' 引用的字符串稍后会被解释(见下面的 命令替换 ),所以 `$' 替换直到稍后才会发生,如果有的话。 如果后面跟着空格、制表符或换行符,则 `$' 会被原封不动地传递。

    输入/输出重定向在变量扩展之前被识别,并且是单独的变量扩展。 否则,命令名称和整个参数列表将一起展开。 因此,第一个(命令)词(至此)可能生成多个词,其中第一个词成为命令名称,其余词成为参数。

    除非包含在 `"' 中或给定 `:q' 修饰符,否则变量替换的结果最终可能会被命令和文件名替换。 在 `"' 中,其值由多个单词组成的变量扩展为单个单词(一部分),变量值的单词由空格分隔。 当`:q' 修饰符应用于替换时,变量将扩展为多个单词,每个单词由空格分隔并引用以防止以后的命令或文件名替换。

    提供以下元序列用于将变量值引入 shell 输入。 除非另有说明,否则引用未设置的变量是错误的。

    $name

    ${name}

    替换变量 name 花括号将 name 与下列字符隔离开来,否则这些字符将成为名称的一部分。Shell 变量的名称由以字母开头的字母和数字组成。 下划线字符被认为是一个字母。 如果 name 不是 shell 变量,而是在环境中设置,则返回该值(但下面给出的其他一些形式在这种情况下不可用)。

    $name[selector]

    ${name[selector]}

    仅替换 name 值中的选定单词。 selector 会被 `$' 替换,并且可以由一个数字或两个数字组成,由一个 `-' 分隔。 变量值的第一个单词编号为 `1'。 如果省略范围的第一个数字,则默认为 `1'。 如果省略范围的最后一个成员,则默认为 `$#name'。 selector `*' 选择所有单词。 如果第二个参数被省略或在范围内,则范围为空不是错误。

    $0

    替换正在从中读取命令输入的文件的名称。 如果名称未知,则会发生错误。

    $number

    ${number}

    相当于 `$argv[number]'。

    $*

    相当于 `$argv',相当于 `$argv[*]'。

    History substitution 中描述的 `:' 修饰符,除了 `:p', 可以应用于上面的替换。 可以使用不止一个。 (+) 可能需要大括号来将变量替换与文字冒号隔离开来,就像 History substitution (qv) 一样;任何修饰符都必须出现在大括号内。

    以下替换不能使用 `:' 修饰符进行修改。

    $?name

    ${?name}

    如果设置了 name ,则替换字符串 `1' ,如果没有设置,则替换为 `0' 。

    $?0

    如果当前输入文件名已知,则替换为 `1' ,如果不知道,则替换为 `0' 。 在交互式 shell 中始终为 `0' 。

    $#name

    ${#name}

    替换 name 中的单词数。

    $#

    相当于 `$#argv'。 (+)

    $%name

    ${%name}

    替换 name 中的字符数。 (+)

    $%number

    ${%number}

    替换 $argv[number] 中的字符数。 (+)

    $?

    相当于 `$status'。 (+)

    替换(父)shell 的(十进制)进程号。 $! 替换此 shell 启动的最后一个后台进程的(十进制)进程号。 (+) $\_ 替换最后执行的命令的命令行。 (+) $< 从标准输入中替换一行,此后不再解释。 它可用于在 shell 脚本中从键盘读取。 (+) 虽然 _csh_ 总是引用 $<, 就好像它等同于 \`$<:q',但 _tcsh_ 没有。 此外,当 _tcsh_ 正在等待输入一行时,用户可以输入一个中断来中断要替换该行的顺序,但 _csh_ 不允许这样做。 编辑器命令 _expand-variables_ ,通常绑定到 \`^X-$', 可以用来交互地展开单个变量。 [命令、文件名和目录堆栈替换](#__u547D___u4EE4___u3001___u6587___u4EF6___u540D___u548C___u76EE___u5F55___u5806___u6808___u66FF___u6362_) -------------------------------------------------------------------------------------------------------------------------- 其余的替换选择性地应用于内置命令的参数。 这意味着未计算的表达式部分不受这些扩展的影响。 对于不是 shell 内部的命令,命令名称与参数列表分开替换。 这发生在很晚的时候,在执行输入输出重定向之后,并且在主 shell 的子 shell 中。 [命令替换](#__u547D___u4EE4___u66FF___u6362_) ----------------------------------------- 命令替换由括在 \`\`' 中的命令指示。 此类命令的输出在空格、制表符和换行符处分成单独的单词,并且丢弃空单词。 输出是可变的,并且命令被替换并代替原始字符串。 双引号 (\`"') 内的命令替换保留空格和制表符;只有换行符强制新词。 在任何情况下,单个最终换行符都不会强制使用新单词。 因此,即使命令输出完整的行,命令替换也可能只产生单词的一部分。 默认情况下,6.12 版以来的 shell 将命令中的所有换行符和回车符替换为空格。 如果通过取消设置 **csubstnonl** 将其关闭,则换行符像往常一样分隔命令。 [文件名替换](#__u6587___u4EF6___u540D___u66FF___u6362_) -------------------------------------------------- 如果一个单词包含任何字符 \`\*'、 \`?'、 \`\[' 或 \`{' 或以字符 \`~' 开头,则它是文件名替换的候选对象,也称为 \`\`globbing''。 然后这个词被视为一个模式 (\`\`glob-pattern'') ,并替换为一个按字母排序的与该模式匹配的文件名列表。 在匹配的文件名中,字符 \`.' 在文件名的开头或紧跟在 \`/' 之后,以及字符 \`/' 必须显式匹配(除非 **globdot** 或 **globstar** 或两者都设置 (+)) 。 字符 \`\*' 匹配任何字符串,包括空字符串。 字符 \`?' 匹配任何单个字符。 序列 \`\[...\]' 匹配任何一个包含的字符。 在 \`\[...\]' 中,由 \`-' 分隔的一对字符在词法上匹配两者之间的任何字符。 (+) 一些 glob-patterns 可以被否定:序列 \`\[^...\]' 匹配任何 _未由_ 大括号中的字符和/或字符范围指定的单个字符。 整个 glob 模式也可以用 \`^' 否定: \> echo \*- bang crash crunch ouch- \> echo ^cr\*- bang ouch 不使用 \`?'、 \`\*' 或 \`\[\]' 或使用 \`{}' 或 \`~' 如下)的全局模式不会被正确否定。 元记法 \`a{b,c,d}e' 是 \`abe ace ade'的简写。 从左到右的顺序被保留: \`/usr/source/s1/{oldls,ls}.c' 扩展为 \`/usr/source/s1/oldls.c /usr/source/s1/ls.c'。 匹配结果在低级别单独排序以保留此顺序: \`../{memo,\*box}' 可能会扩展为 \`../memo ../box ../mbox'。 (注意 \`memo' 没有按照匹配 \`\*box' 的结果排序。) 当此构造扩展到不存在的文件时,这不是错误,但可能会从传递扩展列表的命令中获取错误。 该构造可以嵌套。 作为一种特殊情况,单词 \`{'、 \`}' 和 \`{}' 会不受干扰地传递。 文件名开头的字符 \`~' 指的是主目录。 单独存在,即 \`~', 它会扩展到调用者的主目录,这反映在 **home** shell 变量的值中。 当后面跟着一个由字母、数字和 \`-' 字符组成的名称时,shell 会搜索具有该名称的用户并替换他们的主目录;因此 \`~ken' 可能会扩展为 \`/usr/ken' 而 \`~ken/chmach' 可能会扩展为 \`/usr/ken/chmach'。 如果字符 \`~' 后面跟着一个不是字母或 \`/' 的字符,或者出现在单词开头以外的其他地方,它不会受到干扰。 因此,像 \`setenv MANPATH /usr/man:/usr/local/man:~/lib/man' 这样的命令不会像人们希望的那样进行主目录替换。 包含 \`\*'、 \`?'、 \`\[' 或 \`~'的 glob-pattern 不匹配任何文件都是错误的,无论是否带有 \`^'。 但是, glob-patterns 列表中只有一个模式必须与文件匹配(因此,例如, \`rm \*.a \*.c \*.o' 只有在当前目录中没有以 \`.a'、 \`.c' 或 \`.o'),并且如果设置了 **nonomatch** shell 变量,则不匹配任何内容的模式(或模式列表)保持不变,而不是导致错误。 **globstar** 变量可以设置为允许 \`\*\*' 或 \`\*\*\*' 作为匹配任何字符串(包括 \`/')的文件 glob 模式,递归遍历任何现有的子目录。 例如, \`ls \*\*.c' 将列出当前目录树中的所有 .c 文件。 如果单独使用,它将匹配零个或多个子目录(例如, \`ls /usr/include/\*\*/time.h' 将列出 /usr/include 目录树中名为 \`time.h' 的任何文件; \`ls /usr/include/\*\*time.h' 将匹配 /usr/include 目录树中以 \`time.h' 结尾的任何文件;并且 \`ls /usr/include/\*\*time\*\*.h' 将匹配任何带有 \`time' 的 .h 文件,无论是在子目录名称中还是在文件名本身中)。 为了防止递归问题, \`\*\*' 全局模式不会下降到包含目录的符号链接。 要覆盖它,请使用 \`\*\*\*' (+) 可以设置 **noglob** shell 变量以防止文件名替换,并且可以使用通常绑定到 \`^X-\*' 的 _expand-glob_ 编辑器命令以交互方式扩展单个文件名替换。 [目录堆栈替换 (+)](#__u76EE___u5F55___u5806___u6808___u66FF___u6362__(+)) ------------------------------------------------------------------- 目录堆栈是目录列表,从零开始编号,供 _pushd_、 _popd_ 和 _dirs_ 内置命令 (qv) 使用。 _dirs_ 可以随时打印、存储在文件中、恢复和清除目录堆栈,并且可以设置 **savedirs** 和 **dirsfile** shell 变量在注销时自动存储目录堆栈并在登录时恢复。 可以检查 **dirstack** shell 变量以查看目录堆栈并设置为将任意目录放入目录堆栈。 后跟一个或多个数字的字符 \`=' 扩展为目录堆栈中的一个条目。 特殊情况 \`=-' 扩展到堆栈中的最后一个目录。例如, \> dirs -v- 0 /usr/bin- 1 /usr/spool/uucp- 2 /usr/accts/sys- \> echo =1- /usr/spool/uucp- \> echo =0/calendar- /usr/bin/calendar- \> echo =-- /usr/accts/sys **noglob** 和 **nonomatch** shell 变量以及 _expand-glob_ 编辑器命令适用于目录堆栈以及文件名替换。 [其他替换 (+)](#__u5176___u4ED6___u66FF___u6362__(+)) ------------------------------------------------- 还有几个涉及文件名的转换,与上述不严格相关,但为了完整性在此提及。 当 **symlinks** 变量 (qv) 设置为 \`expand' 时, _Any_ 文件名都可以扩展为完整路径。 引用可以防止这种扩展,而 _normalize-path_ 编辑器命令会按需执行。 _normalize-command_ 编辑器命令根据需要将 PATH 中的命令扩展为完整路径。 最后, _cd_ 和 _pushd_ 将 \`-' 解释为旧的工作目录(相当于 shell 变量 **owd**)。 这根本不是替换,而是只有那些命令才能识别的缩写。 尽管如此,它也可以通过引用来防止。 [命令](#__u547D___u4EE4_) ----------------------- 接下来的三个部分描述了 shell 如何执行命令并处理它们的输入和输出。 [简单命令、管道和序列](#__u7B80___u5355___u547D___u4EE4___u3001___u7BA1___u9053___u548C___u5E8F___u5217_) ----------------------------------------------------------------------------------------------- 一个简单的命令是一个单词序列,其中第一个指定要执行的命令。 一系列由 \`|' 连接的简单命令 字符形成管道。 管道中每个命令的输出都连接到下一个命令的输入。 简单的命令和管道可以用 \`;'连接成序列,并按顺序执行。 命令和管道也可以用 \`||' 加入到序列中 或 \`&&', 与 C 语言一样,表示只有在第一个失败或成功时才执行第二个。 一个简单的命令、管道或序列可以放在括号 \`()' 中,以形成一个简单的命令,该命令又可以是管道或序列的一个组件。 可以执行命令、管道或序列,而无需等待其终止,只需在其后加上 \`&' 即可。 [内置和非内置命令执行](#__u5185___u7F6E___u548C___u975E___u5185___u7F6E___u547D___u4EE4___u6267___u884C_) ----------------------------------------------------------------------------------------------- 内置命令在 shell 中执行。 如果管道的任何组件(最后一个除外)是内置命令,则管道将在子 shell 中执行。 带括号的命令总是在子 shell 中执行。 (cd; pwd); pwd 因此打印 **home** 目录,将您留在原处(在主目录之后打印),而 cd; pwd 留在 **home** 目录中。 带括号的命令最常用于防止 _cd_ 影响当前 shell。 当发现要执行的命令不是内置命令时,shell 会尝试通过 _execve_(2) 执行该命令。 变量 **path** n中的每个单词命名一个目录,shell 将在其中查找命令。 如果没有给 shell 一个 **\-f** 选项,shell 会将这些目录中的名称散列到一个内部表中,以便它只会在命令可能驻留的目录中尝试 _execve_(2) 。 当搜索路径中存在大量目录时,这大大加快了命令定位的速度。 不使用此散列机制: **1.** 如果散列通过 _unhash_ 显式关闭。 **2.** 如果给 shell 一个 **\-f** 参数。 **3.** 对于不以 \`/' 开头的 **path** 的每个目录组件。 **4.** 如果命令包含 \`/'。 在上述四种情况下,shell 将路径向量的每个组件与给定的命令名连接起来,形成文件的路径名,然后尝试执行该文件。 如果执行成功,则搜索停止。 如果该文件具有执行权限但不是系统可执行文件(即,它既不是可执行二进制文件,也不是指定其解释器的脚本),则假定它是一个包含 shell 命令的文件,并生成一个新的 shell阅读。 _shell_ 特殊别名可以设置为指定一个解释器而不是 shell 本身。 在不理解 \`#!' 的系统上 脚本解释器约定 可以编译 shell 来模拟它;查看 **version** shell 变量。 如果是这样,shell 检查文件的第一行,看它是否是 \`#!_interpreter_ _arg_ ...'的形式。 如果是,shell 使用给定的 _arg_s 启动 _interpreter_ ,并在标准输入上将文件提供给它。 [输入/输出](#__u8F93___u5165_/__u8F93___u51FA_) ------------------------------------------- 可以使用以下语法重定向命令的标准输入和标准输出: < _name_ 打开文件 _name_ (这是第一个变量,命令和文件名扩展)作为标准输入。 << _word_ 将 shell 输入读取到与 _word_ 相同的行。 _word_ 不受变量、文件名或命令替换的影响,并且在对该输入行进行任何替换之前,将每个输入行与 _word_ 进行比较。 除非引用 \`\\'、 \`"'、 \`' 或 \`\`' 出现在 _word_ 变量中并且在中间行执行命令替换,允许 \`\\' 引用 \`$'、 \`\\' 和 \`\`'。 被替换的命令保留了所有空格、制表符和换行符,除了最后一个被删除的换行符。 结果文本被放置在一个匿名临时文件中,该文件作为标准输入提供给命令。 \> _name_- \>! _name_- \>& _name_ \>&! _name_ 文件 _name_ 用作标准输出。 如果文件不存在,则创建它;如果文件存在,它会被截断,之前的内容会丢失。 如果设置了 shell 变量 **noclobber** ,则该文件不得存在或者是字符特殊文件(例如,终端或 \`/dev/null') 或错误结果。 这有助于防止意外破坏文件。 在这种情况下, \`!' 可以使用表单来禁止此检查。 如果 **noclobber** 中给出了 **notempty** ,则允许在空文件上使用 \`>' ;如果设置了 **ask** ,则会显示交互式确认,而不是错误。 涉及 \`&' 的表单将诊断输出路由到指定文件以及标准输出。 _name_ 的扩展方式与 \`<' 输入文件名的扩展方式相同。 \>> _name_- \>>& _name_- \>>! _name_ \>>&! _name_ 类似于 \`>',但将输出附加到 _name_ 的末尾。 如果设置了 shell 变量 **noclobber** ,那么文件 _不_ 存在是错误的,除非其中有一个 \`!' 形式给出了。 命令接收调用 shell 的环境,该环境由输入输出参数和命令在管道中的存在所修改。 因此,与以前的一些 shell 不同,默认情况下,从 shell 命令文件运行的命令无法访问命令文本;而是他们接收 shell 的原始标准输入。 \`<<' 机制应该用于呈现内联数据。 这允许 shell 命令脚本充当管道的组件,并允许 shell 阻止读取其输入。 请注意,分离的命令运行的默认标准输入 _不是_ 空文件 _/dev/null_,而是 shell 的原始标准输入。 如果这是一个终端并且如果进程尝试从终端读取,那么进程将阻塞并且用户将被通知(参见 **作业**)。 诊断输出可以通过具有标准输出的管道引导。 只需使用形式 \`|&' 而不仅仅是 \`|'。 shell 目前无法在不重定向标准输出的情况下重定向诊断输出,但 \`(_command_ > _output-file_) >& _error-file_' 通常是可接受的解决方法。 _output-file_ 或 _error-file_ 可能是 \`/dev/tty' 以将输出发送到终端。 [特征](#__u7279___u5F81_) ----------------------- 在描述了 shell 如何接受、解析和执行命令行之后,我们现在转向它的各种有用的特性。 [控制流](#__u63A7___u5236___u6D41_) -------------------------------- shell 包含许多命令,可用于调节命令文件(shell 脚本)和(以有限但有用的方式)来自终端输入的控制流。 这些命令都是通过强制 shell 重新读取或跳过其输入来操作的,并且由于实现,限制了某些命令的放置。 _foreach_、 _switch_ 和 _while_ 语句以及 _if_ 语句的 _if-then-else_ 形式要求主要关键字出现在输入行上的单个简单命令中,如下所示。 如果 shell 的输入不可搜索,shell 会在读取循环时缓冲输入,并在此内部缓冲区中执行搜索以完成循环隐含的重读。 (在允许的范围内,反向 _goto_ 将在不可搜索的输入上成功。) [表达式](#__u8868___u8FBE___u5F0F_) -------------------------------- _if_ _while_ 和 _exit_ 内置命令使用具有通用语法的表达式。 表达式可以包括接下来三个部分中描述的任何运算符。 请注意, _@_ 内置命令 (qv) 有自己独立的语法。 [逻辑、算术和比较运算符](#__u903B___u8F91___u3001___u7B97___u672F___u548C___u6BD4___u8F83___u8FD0___u7B97___u7B26_) -------------------------------------------------------------------------------------------------------- 这些运算符与 C 中的运算符相似,具有相同的优先级。 它们包括 || && | ^ & == != =~ !~ <= >=- < > << >> + - \* / % ! ~ ( ) 这里优先级向右增加, \`==' \`!=' \`=~' 和 \`!~', \`<=' \`>=' \`<' 和 \`>', \`<<' 和 \`>>', \`+' 和 \`-', \`\*' \`/' 和 \`%' 在组中处于同一级别。 \`==' \`!=' \`=~' 和 \`!~' 运算符将它们的参数作为字符串进行比较;所有其他人都对数字进行操作。 运算符 \`=~' 和 \`!~' 与 \`!=' 和 \`==' 类似,除了右侧是匹配左侧操作数的全局模式(参见 **文件名替换**) 。 当真正需要的只是模式匹配时,这减少了在 shell 脚本中使用 _switch_ 内置命令的需要。 空参数或缺失参数被视为 \`0'。 所有表达式的结果都是字符串,代表十进制数。 重要的是要注意一个表达式的两个组成部分不能出现在同一个单词中。除非与对解析器具有语法意义的表达式组件相邻 (\`&' \`|' \`<' \`>' \`(' \`)') ,否则它们应该被空格包围。 [命令退出状态](#__u547D___u4EE4___u9000___u51FA___u72B6___u6001_) ----------------------------------------------------------- 命令可以在表达式中执行,并通过将它们括在大括号 (\`{}')中返回它们的退出状态。 请记住,大括号应该用空格与命令的单词分开。 命令执行成功,返回真,即 \`1',如果命令以状态0退出,否则它们失败,返回假,即 \`0' 。 如果需要更详细的状态信息,则应在表达式之外执行命令并检查 **status** shell 变量。 [文件查询操作员](#__u6587___u4EF6___u67E5___u8BE2___u64CD___u4F5C___u5458_) -------------------------------------------------------------------- 其中一些运算符对文件和相关对象执行真/假测试。 它们的格式为 **\-**_op file_ ,其中 _op_ 是 **r** 读取权限 **w** 写访问 **x** 执行访问 **X** 可在路径或内置 shell 中执行,例如 \`-X ls' 和 \`-X ls-F' 通常为真,但 \`-X /bin/ls' 不是 (+) **e** 存在 **o** 所有权 **z** 零尺寸 **s** 非零大小 (+) **f** 普通文件 **d** 目录 **l** 符号链接 (+) \* **b** 阻止特殊文件 (+) **c** 字符特殊文件 (+) **p** 命名管道 (fifo) (+) \* **S** 套接字特殊文件 (+) \* **u** 设置用户 ID 位 (+) **g** 设置组 ID 位已设置 (+) **k** 粘滞位已设置 (+) **t** _file_ (必须是数字)是终端设备的打开文件描述符 (+) **R** 已迁移 (仅 Convex) (+) **L** 将多运算符测试中的后续运算符应用于符号链接,而不是链接指向的文件 (+) \* _file_ 是命令和文件名扩展,然后测试它是否与真实用户具有指定的关系。如果 _file_ 不存在或不可访问,或者对于 \`\*' 表示的运算符,如果指定的文件类型在当前系统中不存在,则所有查询返回false,即 \`0'。 为简洁起见,这些运算符可以组合使用: \`-_xy file_' 等价于 \`-_x file_ && -_y file_'。 (+) 例如,对于普通的可执行文件, \`-fx' 为真(返回 \`1') ,但不适用于目录。 **L** 可用于多运算符测试,以将后续运算符应用于符号链接,而不是链接指向的文件。 例如, \`-lLo' 对于调用用户拥有的链接是正确的。 **Lr**、 **Lw** 和 **Lx** 对于链接始终为真,对于非链接始终为假。 当 **L** 是多算子测试中的最后一个算子时,其含义不同;见下文。 将期望 _file_ 是文件的运算符与不是文件的运算符(例如, **X** 和 **t**)结合起来是可能的,但不是有用的,而且有时会产生误导。 在 **L** 后面加上一个非文件运算符会导致特别奇怪的结果。 其他运算符返回其他信息,即,不仅仅是 \`0' 或 \`1'。 (+) 它们具有与以前相同的格式; _op_ 可能是其中之一 **A** 上次文件访问时间,作为自纪元以来的秒数 **A:** 与 **A** 类似,但采用时间戳格式,例如 \`Fri May 14 16:36:10 1993' **M** 上次文件修改时间 **M:** 与 **M** 类似,但采用时间戳格式 **C** 上次 inode 修改时间 **C:** 与 **C** 类似,但采用时间戳格式 **D** 设备编号 **I** 索引节点号 **F** 复合 **文件** 标识符,格式为 _device_:_inode_ **L** 符号链接指向的文件名 **N** (硬)链接数 **P** 八进制的权限,不带前导零 **P:** 像 **P** ,前导零 **P_mode_** 等价于 \`-P _file_ & _mode_', 例如, \`-P22 _file_' 返回 \`22' 如果 _file_ 可以按组和其他方式写入, \`20' 如果只按组, \`0' 如果两者都不能 **P_mode_**:**** 与 **P**_mode_ 类似,前导零 **U** 数字用户 ID **U:** 用户名,如果用户名未知,则为数字用户 ID **G** 数字组标识 **G:** 组名,如果组名未知,则为数字组 ID **Z** 大小,以字节为单位 在多算子测试中只能出现这些算子中的一个,并且必须是最后一个。 请注意, **L** 在多操作员测试的末尾和其他地方具有不同的含义。 因为 \`0' 是许多这些运算符的有效返回值,所以它们在失败时不会返回 \`0' :大多数返回 \`-1',而 **F** 返回 \`:'。 如果 shell 是使用定义的 POSIX 编译的(请参阅 **version** shell 变量),则文件查询的结果基于文件的权限位,而不是 _access_(2) 系统调用的结果。 例如,如果使用 **\-w** 测试一个文件,该文件的权限通常允许写入但位于只读安装的文件系统上,则测试将在 POSIX shell 中成功,但在非 POSIX shell 中失败。 文件查询运算符也可以使用 _filetest_ 内置命令 (qv) (+) 进行评估。 [工作](#__u5DE5___u4F5C_) ----------------------- Shell 将 _job_ 与每个管道相关联。 它保存一个由 _jobs_ 命令打印的当前作业表,并为它们分配小的整数。 当使用 \`&' 异步启动作业时,shell 会打印一行,如下所示 \[1\] 1234 表示异步启动的作业编号为 1,并且有一个(顶级)进程,其进程 ID 为 1234。 如果您正在运行一项工作并希望做其他事情,您可以点击暂停键(通常是 \`^Z'), 它会向当前工作发送一个停止信号。 然后外壳程序通常会指示该作业已被“暂停”并打印另一个提示。 如果设置了 **listjobs** 变量,所有作业都将像 _jobs_ 内置命令一样被列出;如果设置为 \`long' ,列表将采用长格式,如 \`jobs -l'。 然后,您可以操纵暂停作业的状态。 你可以用 _bg_ 命令把它放到 \`\`background'' ,或者运行一些其他的命令,最后用 _fg_ 把这个工作带回到 \`\`foreground''。 (另请参见 _run-fg-editor_ 编辑器命令。) \`^Z' 立即生效,就像一个中断,挂起的输出和未读的输入在键入时被丢弃。 _wait_ 内置命令使 shell 等待所有后台作业完成。 \`^\]' 键向当前作业发送延迟挂起信号,该信号在程序尝试 _read_(2) 它之前不会生成 STOP 信号。 当您为某项作业准备了一些命令并希望在读取它们后停止这些命令时,提前键入该命令很有用。 \`^Y' 键在 _csh_(1) 中执行此功能;在 _tcsh_ 中,\`^Y' 是一个编辑命令。 (+) 如果尝试从终端读取,则在后台运行的作业将停止。 后台作业通常被允许产生输出,但可以通过给出命令 \`stty tostop' 来禁用它。 如果您设置此 tty 选项,则后台作业将在它们尝试生成输出时停止,就像它们尝试读取输入时一样。 有几种方法可以在 shell 中引用作业。 字符 \`%' 引入了一个作业名称。 如果你想引用作业号 1,你可以将它命名为 \`%1' 。 只需命名一项工作即可将其置于前台;因此 \`%1' 是 \`fg %1'的同义词,将作业 1 带回前台。 类似地,说 \`%1 &' 会在后台恢复作业 1,就像 \`bg %1'一样。 作业也可以通过键入的字符串的明确前缀来命名以启动它:如果只有一个名称以字符串 \`ex' 开头的暂停作业, \`%ex' 通常会重新启动暂停的 _ex_(1) 作业。 如果只有一个这样的作业,也可以说 \`%?_string_' 来指定其文本包含 _string_ 的作业。 shell 维护当前和以前的作业的概念。 在与作业有关的输出中,当前作业用 \`+' 标记,前一个作业用 \`-' 标记。 缩写 \`%+'、 \`%' 和(类比 _历史_ 机制的语法) \`%%' 都是指当前的工作,而 \`%-' 指的是之前的工作。 作业控制机制要求在某些系统上设置 _stty_(1) 选项 \`new' 。 它是 tty 驱动程序的 \`new' 实现的产物,它允许从键盘生成中断字符来告诉作业停止。 有关在新 tty 驱动程序中设置选项的详细信息,请参阅 _stty_(1) 和 _setty_ 内置命令。 [状态报告](#__u72B6___u6001___u62A5___u544A_) ----------------------------------------- 每当进程更改状态时,shell 会立即学习。 它通常会在作业被阻止时通知您,以便无法取得进一步的进展,但只会在打印提示之前通知您。 这样做是为了不干扰您的工作。 但是,如果您设置 shell 变量 **notify** ,shell 将立即通知您后台作业的状态更改。 还有一个 shell 命令 _notify_ 标记单个进程,以便立即报告其状态更改。 默认情况下,通知 _notify_ 当前进程;启动后台作业后只需说 \`notify' 即可对其进行标记。 当您在作业停止时尝试离开 shell 时,您将收到警告 \`There are suspended jobs' 。 您可以使用 _jobs_ 命令查看它们是什么。 如果您这样做或立即尝试再次退出,shell 将不会再次警告您,并且暂停的作业将被终止。 [自动、定期和定时事件 (+)](#__u81EA___u52A8___u3001___u5B9A___u671F___u548C___u5B9A___u65F6___u4E8B___u4EF6__(+)) ------------------------------------------------------------------------------------------------------- 在 shell 的 \`\`life cycle'' 中,有多种方法可以在不同时间自动运行命令和执行其他操作。它们在这里进行了总结,并在相应的 **Builtin commands**、 **Special shell variables** 和 **Special aliases** 下进行了详细描述。 _sched_ 内置命令将命令放在计划事件列表中,以便在给定时间由 shell 执行。 _beepcmd_、 _cwdcmd_、 _periodic_、 _precmd_、 _postcmd_ 和 _jobcmd_ **Special aliases** ,在 shell 要响铃时、工作目录变化时、每 **tperiod** 分钟、每条提示之前、每条命令之前执行命令被执行,在每个命令被执行之后,当一个作业被启动或被带到前台时。 可以将 **autologout** shell 变量设置为在给定的不活动分钟数后注销或锁定 shell。 **mail** shell 变量可以设置为定期检查新邮件。 可以设置 **printexitvalue** 变量以打印以非零状态退出的命令的退出状态。 **rmstar** shell 变量可以设置为询问用户,当键入 \`rm \*' 时,这是否真的是这个意思。 **time** shell 变量可以设置为在完成任何花费超过给定 CPU 秒数的进程后执行 _time_ 内置命令。 **watch** 和 **who** 变量可以设置为在选定用户登录或注销时报告,并且 _log_ 内置命令随时报告这些用户。 [母语系统支持 (+)](#__u6BCD___u8BED___u7CFB___u7EDF___u652F___u6301__(+)) ------------------------------------------------------------------- shell 是 8 位干净的(如果这样编译;请参阅 **version** shell 变量),因此支持需要此功能的字符集。 NLS 支持因 shell 是否被编译为使用系统的 NLS 而有所不同(再次参见 **version**)。 在任何一种情况下,7 位 ASCII 是默认字符代码(例如,哪些字符可打印的分类)和排序,更改 **LANG** 或 **LC\_CTYPE** 环境变量会导致检查这些方面可能发生的变化。 当使用系统的 NLS 时,调用 _setlocale_(3) 函数来确定适当的字符代码/分类和排序(例如, 'en\_CA.UTF-8' 将产生 "UTF-8" 作为字符代码)。 该函数通常检查 **LANG** 和 **LC\_CTYPE** 环境变量;有关详细信息,请参阅系统文档。 当不使用系统的 NLS 时,shell 通过假设无论何时设置 **LANG** 和 **LC\_CTYPE** 变量中的任何一个都使用 ISO 8859-1 字符集来模拟它,而不管它们的值如何。 模拟 NLS 的排序不受影响。 此外,无论是真实的还是模拟的 NLS, \\200-\\377 范围内的所有可打印字符,即具有 M-_char_ 绑定的字符,都会自动反弹到 _self-insert-command_ 。 转义 _char_ 序列的相应绑定(如果有)将保持不变。 如果设置了 **NOREBIND** 环境变量,这些字符不会被重新绑定。 这对于模拟 NLS 或假定完整 ISO 8859-1 的原始真实 NLS 可能很有用。 否则, \\240-\\377 范围内的所有 M-_char_ 绑定都将有效地撤消。 当然,使用 _bindkey_ 显式重新绑定相关键仍然是可能的。 未知字符(即,既不能打印也不能控制字符)以 \\nnn 格式打印。 如果 tty 不是 8 位模式,则通过将其他 8 位字符转换为 ASCII 并使用突出模式来打印它们。 shell 从不更改 tty 的 7/8 位模式,并跟踪用户启动的 7/8 位模式更改。 NLS 用户(或者想使用元密钥的用户)可能需要通过适当的 _stty_(1) 命令将 tty 显式设置为 8 位模式,例如 _~/.login_ 文件。 [操作系统变体支持 (+)](#__u64CD___u4F5C___u7CFB___u7EDF___u53D8___u4F53___u652F___u6301__(+)) ------------------------------------------------------------------------------------- 提供了许多新的内置命令来支持特定操作系统中的功能。 **内置命令** 部分详细描述了所有内容。 在支持 TCF(aix-ibm370、aix-ps2)的系统上, _getspath_ 和 _setspath_ 获取和设置系统执行路径, _getxvers_ 和 _setxvers_ 获取和设置实验版本前缀和 _migrate_ 在站点之间迁移进程。 内置 _jobs_ 打印每个作业正在执行的站点。 在BS2000下, _bs2cmd_ 执行底层 BS2000/OSD 操作系统的命令。 在 Domain/OS 下, _inlib_ 将共享库添加到当前环境, _rootnode_ 更改 rootnode, _ver_ 更改 systype。 在 Mach 下, _setpath_ 等价于 Mach 的 _setpath_(1)。 在 Masscomp/RTU 和 Harris CX/UX 下, _universe_ 设定了宇宙。 在 Harris CX/UX 下, _ucb_ 或 _att_ 在指定的 Universe 下运行命令。 在 Convex/OS 下, _warp_ 打印或设置宇宙。 **VENDOR**、 **OSTYPE** 和 **MACHTYPE** 环境变量分别表示 shell 认为它正在运行的系统的供应商、操作系统和机器类型(微处理器类或机器模型)。 当在几种类型的机器之间共享一个人的主目录时,这些特别有用;例如,一个可以 set path = (~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .) 在一个 _~/.login_ 中,并将为每台机器编译的可执行文件放在适当的目录中。 **version** 变量指示编译 shell 时选择了哪些选项。 还要注意内置的 _newgrp_ 、 **afsuser** 和 **echo\_style** 变量以及 shell 输入文件的系统相关位置(请参阅 **文件**)。 [信号处理](#__u4FE1___u53F7___u5904___u7406_) ----------------------------------------- 登录 shell 在读取文件 _~/.logout_ 时会忽略中断。 除非以 **\-q** 开头,否则 shell 会忽略退出信号。登录 shell 捕获终止信号,但非登录 shell 从其父级继承终止行为。 其他信号具有外壳从其父级继承的值。 在 shell 脚本中,shell 对中断和终止信号的处理可以用 _onintr_ 控制,它对挂断的处理可以用 _hup_ 和 _nohup_。 shell 在挂断时退出(另请参见 **logout** shell 变量)。 默认情况下,shell 的子进程也会这样做,但 shell 在退出时不会向它们发送挂断消息。 _hup_ 安排外壳在退出时向孩子发送挂断, _nohup_ 设置孩子忽略挂断。 [终端管理 (+)](#__u7EC8___u7AEF___u7BA1___u7406__(+)) ------------------------------------------------- shell 使用三组不同的终端(\`\`tty'')模式:'edit',在编辑时使用, \`quote',在引用文字字符时使用,以及在执行命令时使用的 \`execute'。 shell 在每个模式中保持一些设置不变,因此使 tty 处于混乱状态的命令不会干扰 shell。 shell 还匹配 tty 的速度和填充的变化。 可以使用 _setty_ 内置命令检查和修改保持不变的 tty 模式列表。 请注意,尽管编辑器使用 CBREAK 模式(或其等效模式),但它还是需要预先输入的字符。 _echotc_、 _settc_ 和 _telltc_ 命令可用于从命令行操作和调试终端功能。 在支持 SIGWINCH 或 SIGWINDOW 的系统上,shell 会自动调整窗口大小并调整环境变量 **LINES** 和 **COLUMNS** (如果已设置)。 如果环境变量 **TERMCAP** 包含 li# 和 co# 字段,shell 会调整它们以反映新的窗口大小。 [参考](#__u53C2___u8003_) ======================= 本手册的下一部分描述了所有可用的 **内置命令**、 **特殊别名** 和 **特殊 shell 变量**。 [内置命令](#__u5185___u7F6E___u547D___u4EE4_) ----------------------------------------- **%_job_** _fg_ 内置命令的同义词。 **%_job_ **&**** _bg_ 内置命令的同义词。 **:** 什么都不做,成功了。 **@**- **@ _name_ **=** _expr_**- **@ _name_\[_index_\] **=** _expr_**- **@ _name_**++**|**\--**** **@ _name_\[_index_\]**++**|**\--**** 第一种形式打印所有 shell 变量的值。 第二种形式将 _expr_ 的值赋给 _name_。 第三种形式将 _expr_ 的值分配给 _name_ 的第 _index_ 个组件; _name_ 和它的第 _index_ 个组件必须已经存在。 _expr_ 可以包含操作符 \`\*'、 \`+' 等,就像在 C 中一样。 如果 _expr_ 包含 \`<'、 \`>'、 \`&' 或 \`' 则至少 _expr_ 的那部分必须放在 \`()' 中。 请注意, _expr_ 的语法与 **Expressions** 中描述的无关。 第四种和第五种形式递增 (\`++') 或递减 (\`--') _name_ 或其第 _index_ 个组件。 \`@' 和 _name_ 之间的空格是必需的。 _name_ 和 \`=' 之间以及 \`=' 和 _expr_ 之间的空格是可选的。 _expr_ 的组成部分必须用空格分隔。 **alias \[_name_ \[_wordlist_\]\]** 没有参数,打印所有别名。 使用 _name_ ,打印名称的别名。 使用 _name_ 和 _wordlist_ ,将 _wordlist_ 指定为 _name_ 的别名。 _wordlist_ 命令和文件名替换。 _name_ 不能是 \`alias' 或 \`unalias'。 另请参见 _unalias_ 内置命令。 **alloc** 显示获取的动态内存量,分为已用内存和可用内存。 使用参数显示每个大小类别中空闲和已使用块的数量。 类别从 8 号开始,每一步加倍。 此命令的输出可能因系统类型而异,因为 VAX 以外的系统可能使用不同的内存分配器。 **bg \[**%**_job_ ...\]** 将指定的作业(或不带参数的当前作业)放入后台,如果停止则继续每个作业。 _job_ 可以是数字、字符串、 \`'、 \`%'、 \`+' 或 \`-' ,如 **Jobs** 中所述。 **bindkey \[**\-l**|**\-d**|**\-e**|**\-v**|**\-u**\] (+)**- **bindkey** \[**\-a**\] \[**\-b**\] \[**\-k**\] \[**\-r**\] \[**\--**\] _key_ (+) **bindkey** \[**\-a**\] \[**\-b**\] \[**\-k**\] \[**\-c**|**\-s**\] \[**\--**\] _key command_ (+) 如果没有选项,第一种形式列出所有绑定的键和每个绑定到的编辑器命令,第二种形式列出 _key_ 绑定到的编辑器命令,第三种形式将编辑器命令 _command_ 绑定到 _key_。 选项包括: **\-l** 列出所有编辑器命令和每个命令的简短描述。 **\-d** 按照下面的 **\-e** 和 **\-v** 将所有键绑定到默认编辑器的标准绑定。 **\-e** 将所有键绑定到 _emacs_(1) 样式的绑定。取消设置 **vimode**。 **\-v** 将所有键绑定到 _vi_(1) 样式的绑定。 设置 **vimode**。 **\-a** 列出或更改备用键映射中的键绑定。 这是 **vimode** 命令模式中使用的键映射。 **\-b** _key_ 被解释为控制字符写为 ^_character_ (例如, \`^A') 或 C-_character_ (例如, \`C-A') ,元字符写成 M-_character_ (例如, \`M-A'), 功能键写成 F-_string_ (例如, \`F-string'), 或扩展的前缀键写入 X-_character_ (例如, \`X-A')。 **\-k** _key_ 被解释为一个符号箭头键名称,它可以是 \`down'、 \`up'、 \`left' 或 \`right'。 **\-r** 删除 _key_ 的绑定。 请注意: \`bindkey -r' _不会_ 将 _key_ 绑定到 _self-insert-command_ (qv),它会完全取消绑定 _key_ 。 **\-c** _command_ 被解释为内置或外部命令,而不是编辑器命令。 **\-s** _command_ 被视为文字字符串,并在键入 _key_ 时被视为终端输入。 _command_ 中的绑定键本身会被重新解释,这会持续十个解释级别。 **\--** 强制中断选项处理,因此即使下一个单词以 '-' 开头,它也会被视为 _key_。 **\-u (or any invalid option)** 打印使用信息。 _key_ 可以是单个字符或字符串。 如果命令绑定到字符串,则字符串的第一个字符绑定到 _sequence-lead-in_ ,整个字符串绑定到命令。 _key_ 中的控制字符可以是文字(可以通过在它们前面加上编辑器命令 _quoted-insert_ 来键入,通常绑定到 \`^V') 或书面插入字符样式,例如 \`^A' 。 删除写成 \`^?' 插入问号)。 _key_ 和 _command_ 可以包含反斜杠转义序列(采用 System V _echo_(1) 的样式),如下所示: **\\a** 钟 **\\b** 退格 **\\e** 逃脱 **\\f** 换页 **\\n** 换行 **\\r** 回车 **\\t** 水平制表 **\\v** 垂直制表 **\\_nnn_** 八进制数 _nnn_ 对应的 ASCII 字符 \`\\' 使后面的字符的特殊含义无效,如果它有的话,特别是 \`\\' 和 \`^'。 **bs2cmd _bs2000-command_ (+)** 将 _bs2000-command_ t传递给 BS2000 命令解释器执行。 只能执行非交互式命令,并且不能执行任何会覆盖当前进程映像的命令,例如 /EXECUTE 或 /CALL-PROCEDURE 。(仅限 BS2000) **break** 导致执行在最近的封闭 _foreach_ 或 _while_ _结束_ 后恢复。 执行当前行上的剩余命令。 因此,通过将它们全部写在一行上,可以实现多级中断。 **breaksw** 导致 _switch_ 中断,在 _endsw_ 后恢复。 **builtins (+)** 打印所有内置命令的名称。 **bye (+)** _logout_ 内置命令的同义词。 仅当 shell 如此编译时才可用;查看 **version** shell 变量。 **case _label_**:**** _switch_ 语句中的标签,如下所述。 **cd \[**\-p**\] \[**\-l**\] \[**\-n**|**\-v**\] \[I--\] \[_name_\]** 如果给出了目录 _name_ ,则将 shell 的工作目录更改为 _name_ 。 如果不是,则更改为 **home** ,除非未设置 **cdtohome** 变量,在这种情况下需要名称。 如果 _name_ 是 \`-' 它被解释为以前的工作目录(参见 **其他替换**)。 (+) 如果 _name_ 不是当前目录的子目录(并且不以 \`/'、 \`./' 或 \`../' 开头),则检查变量 **cdpath** 的每个组件以查看它是否具有子目录 _name_ 。 最后,如果所有其他方法都失败了,但 _name_ 是一个 shell 变量,其值以 \`/' 或 '.' 开头,则尝试查看它是否是一个目录,并且隐含了 **\-p** 选项。 使用 **\-p** ,打印最终的目录堆栈,就像 _dirs_ 。 **\-l**、 **\-n** 和 **\-v** 标志对 _cd_ 的作用与对 _dirs_ 的作用相同,它们暗含 **\-p**。 (+) 使用 **\--** 强制中断选项处理,因此下一个单词被视为目录 _name_ ,即使它以 '-' 开头。 (+) 另请参见 **implicitcd** 和 **cdtohome** shell 变量。 **chdir** _cd_ 内置命令的同义词。 **complete \[_command_ \[_word_**/**_pattern_**/**_list_\[**:**_select_\]**/**\[\[_suffix_\]**/**\] ...\]\] (+)** 没有参数,列出所有完成。 使用 _command_ ,列出 _command_ 的完成。 使用 _command_ 和 _word_ 等,定义完成。 _command_ 可以是完整的命令名称或 glob 模式(请参阅 **文件名替换**) 。 它可以以 \`-' 开头,表示仅在命令不明确时才应使用补全。 _word_ 指定相对于当前单词要完成的单词,并且可以是以下之一: **c** 当前单词完成。 _pattern_ 是一个全局模式,它必须匹配命令行上当前单词的开头。 完成当前单词时忽略 _pattern_ 。 **C** 与 **c** 类似,但在完成当前单词时包含 _pattern_ 。 **n** 下一个单词完成。 _pattern_ 是一个全局模式,它必须匹配命令行上前一个单词的开头。 **N** 与 **n** 类似,但必须匹配当前单词前两个单词的开头。 **p** 位置相关的完成。 _pattern_ 是一个数字范围,与用于索引 shell 变量的语法相同,它必须包括当前单词。 _list_ ,可能完成的列表,可能是以下之一: **a** 别名 **b** 绑定(编辑器命令) **c** 命令(内置或外部命令) **C** 以提供的路径前缀开头的外部命令 **d** 目录 **D** 以提供的路径前缀开头的目录 **e** 环境变量 **f** 文件名 **F** 以提供的路径前缀开头的文件名 **g** 组名 **j** 工作 **l** 限制 **n** 没有 **s** Shell 变量 **S** 信号 **t** 纯 (\`\`text'') 文件 **T** 以提供的路径前缀开头的纯 (\`\`text'') 文件 **v** 任何变量 **u** 用户名 **x** 与 **n** 类似,但在使用 _list-choices_ 时打印 _select_ 。 **X** 完成 $_var_ 来自变量 _var_ 的单词 (...) 给定列表中的单词 \`...\` 命令输出中的单词 _select_ 是一个可选的全局模式。 如果给定,则仅考虑与 _select_ 匹配的 _list_ 中的单词,并忽略 **fignore** shell 变量。 最后三种补全类型可能没有 _select_ 模式, **x** 在使用 _list-choices_ 编辑器命令时使用 _select_ 作为解释性消息。 _suffix_ 是要附加到成功完成的单个字符。 如果为 null,则不附加任何字符。 如果省略(在这种情况下也可以省略第四个分隔符),则将斜杠附加到目录,并将空格附加到其他单词。 从 \`...\` 版本调用的 _command_ 具有附加的环境变量集,变量名称为 **COMMAND\_LINE** 并包含(如其名称所示)当前(已键入)命令行的内容。 可以在她的自定义脚本中检查和使用 **COMMAND\_LINE** 变量的内容来构建更复杂的补全(请参阅此包中包含的 svn(1) 补全)。 现在举一些例子。 有些命令只接受目录作为参数,所以完成纯文件是没有意义的。 \> complete cd 'p/1/d/' 仅用目录完成 \`cd' (\`p/1') 之后的第一个单词。 **p** 样式完成也可用于缩小命令完成的范围: \> co\[^D\]- complete compress- \> complete -co\* 'p/0/(compress)/'- \> co\[^D\]- \> compress 这个补全完成了以 \`co' 开头的命令(位置 0 的词, \`p/0') (因此匹配 \`co\*') 到 \`compress' (列表中的唯一词)。 前导的 \`-' 表示这个补全仅用于模棱两可的命令。 \> complete find 'n/-user/u/' 是 **n** 样式补全的一个例子。 \`find' 之后和 \`-user' 之后的任何单词都是从用户列表中完成的。 \> complete cc 'c/-I/d/' 演示 **c** 类型的完成。 \`cc' 之后并以 \`-I' 开头的任何单词都作为目录完成。 \`-I' 没有作为目录的一部分,因为我们使用了小写 **c**。 不同的 _list_ 对不同的命令很有用。 \> complete alias 'p/1/a/'- \> complete man 'p/\*/c/'- \> complete set 'p/1/s/'- \> complete true 'p/1/x:Truth has no options./' 这些完整的单词在 \`alias' 后面带有别名,在 \`man' 后面带有命令,而在 \`set' 后面带有 shell 变量。 \`true' 没有任何选项,因此 **x** 在尝试完成时什么都不做,并打印 \`Truth has no options.' 当列出完成选项时。 请注意, _man_ 示例和下面的其他几个示例也可以使用 'c/\*' 或 'n/\*' 作为 'p/\*'。 单词可以从完成时评估的变量中完成, \> complete ftp 'p/1/$hostnames/'- \> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu)- \> ftp \[^D\]- rtfm.mit.edu tesla.ee.cornell.edu- \> ftp \[^C\]- \> set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net)- \> ftp \[^D\]- rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net 或从完成时运行的命令: \> complete kill 'p/\*/\`ps | awk \\{print\\ \\$1\\}\`/'- \> kill -9 \[^D\]- 23113 23377 23380 23406 23429 23529 23530 PID 请注意, _complete_ 的命令本身并不引用它的参数,因此必须明确引用 \`{print $1}' 中的大括号、空格和 \`$' 。 一个命令可以有多个完成: \> complete dbx 'p/2/(core)/' 'p/\*/c/' 使用单词 \`core' 完成 \`dbx' 的第二个参数,并使用命令完成所有其他参数。 请注意,位置完成是在下一个单词完成之前指定的。 因为补全是从左到右评估的,如果首先指定下一个单词补全,它将始终匹配并且永远不会执行位置补全。 这是定义完成时的常见错误。 当命令将仅具有特定形式的文件作为参数时, _select_ 模式很有用。例如, \> complete cc 'p/\*/f:\*.\[cao\]/' 完成仅以 \`.c'、 \`.a' 或 \`.o' 结尾的文件的 \`cc' 参数。 _select_ 也可以排除文件,使用 glob 模式的否定,如 **文件名替换**. 中所述。 一个人可能会使用 \> complete rm 'p/\*/f:^\*.{c,h,cc,C,tex,1,man,l,y}/' 从 \`rm' 完成中排除宝贵的源代码。 当然,仍然可以手动键入排除的名称或使用 _complete-word-raw_ 或 _list-choices-raw_ 编辑器命令 (qv) 覆盖完成机制。 \`C'、 \`D'、 \`F' 和 \`T' _列表_ 分别类似于 \`c'、 \`d'、 \`f' 和 \`t',但它们以不同的方式使用 _select_ 参数:限制完成到以特定路径前缀开头的文件。 例如,Elm 邮件程序使用 \`=' 作为邮件目录的缩写。一个人可能会使用 \> complete elm c@=@F:$HOME/Mail/@ 完成 \`elm -f =' 就好像它是 \`elm -f ~/Mail/'。 请注意,我们使用 \`@' 而不是 \`/' 以避免与 _select_ 参数混淆,并且我们使用 \`$HOME' 而不是 \`~' 因为主目录替换仅在单词的开头起作用。 _suffix_ 用于为完成的单词添加非标准后缀(不是空格或目录的 \`/' ) 。 \> complete finger 'c/\*@/$hostnames/' 'p/1/u/@' 完成用户列表中 \`finger' 的参数,附加一个 \`@', 然后在 \`hostnames' 变量的 \`@' 之后完成。 再次注意指定完成的顺序。 最后,这是一个复杂的灵感示例: \> complete find \\- 'n/-name/f/' 'n/-newer/f/' 'n/-{,n}cpio/f/' \\- ´n/-exec/c/' 'n/-ok/c/' 'n/-user/u/' \\- 'n/-group/g/' 'n/-fstype/(nfs 4.2)/' \\- 'n/-type/(b c d f l p s)/' \\- ´c/-/(name newer cpio ncpio exec ok user \\- group fstype type atime ctime depth inum \\- ls mtime nogroup nouser perm print prune \\- size xdev)/' \\- 'p/\*/d/' 这完成了 \`-name'、 \`-newer'、 \`-cpio' 或 \`ncpio' (注意匹配两者的模式)到文件,在 \`-exec' 或 \`-ok' 之后的词到命令,在 \`user' 和 \`group' 分别表示用户和组,而 \`-fstype' 或 \`-type' 之后的单词表示给定列表的成员。 它还完成给定列表中的切换(注意使用 **c** 类型完成)并完成任何未完成的目录。 请记住,如果正在完成的单词是波浪号替换(以 \`~'开头)或变量(以 \`$' 开头),则程序完成将被忽略。 另请参阅 _uncomplete_ 的内置命令。 **continue** 继续执行最近的封闭 _while_ 或 _foreach_。 执行当前行的其余命令。 **default:** 在 _switch_ 语句中标记默认情况。 它应该出现在所有 _case_ 标签之后。 **dirs \[**\-l**\] \[**\-n**|**\-v**\]**- **dirs -S|**\-L** \[_filename_\] (+)** **dirs -c (+)** 第一种形式打印目录堆栈。 堆栈的顶部在左侧,堆栈中的第一个目录是当前目录。 使用 **\-l** ,输出中的 \`~' 或 \`~_name_' 将显式扩展为 **home** 或用户 _name_ 的主目录路径名。 (+) 使用 **\-n** ,条目在到达屏幕边缘之前被换行。 (+) 使用 **\-v** ,每行打印一个条目,前面是它们的堆栈位置。 (+) 如果给出了多个 **\-n** 或 **\-v** 之一,则 **\-v** 优先。 **\-p** 被接受但什么也不做。 使用 **\-S** ,第二种形式将目录堆栈保存为 _filename_ 作为一系列 _cd_ 和 _pushd_ 命令。 使用 **\-L**, shell 源 _filename_, 它可能是由 **\-S** 选项或 **savedirs** 机制保存的目录堆栈文件。 在任何一种情况下,如果未给出 _filename_ ,则使用 **dirsfile** ;如果未设置 **dirsfile** ,则使用 _~/.cshdirs_ 。 请注意,登录 shell 在启动时执行相当于 \`dirs -L' 的操作,如果设置了 **savedirs** ,则在退出前执行 \`dirs -S' 。 因为通常只有 _~/.tcshrc_ 位于 _~/.cshdirs_ 之前,所以应该在 _~/.tcshrc_ 而不是 _~/.login_ 中设置 **dirsfile** 。 最后一种形式清除目录堆栈。 **echo \[**\-n**\] _word_ ...** 将每个 _word_ 写入 shell 的标准输出,以空格分隔并以换行符结束。 **echo\_style** 变量可以设置为模拟(或不模拟)BSD 和/或 System V 版本的 _echo_ 的标志和转义序列;见 _echo_(1)。 **echotc \[**\-sv**\] _arg_ ... (+)** 在 _args_ 中练习终端功能(请参阅 _termcap_(5)) 。 例如, 'echotc home' 将光标发送到起始位置, 'echotc cm 3 10' 将光标发送到第 3 列和第 10 行, 'echotc ts 0; echo "This is a test."; echotc fs' 在状态栏中打印 "This is a test." 。 如果 _arg_ 是 'baud'、 'cols'、 'lines'、 'meta' 或 'tabs',则打印该能力的值("yes" 或 "no" 表示终端具有或不具有该能力)。 人们可能会使用它来使 shell 脚本的输出在慢速终端上不那么冗长,或者将命令输出限制为屏幕上的行数: \> set history=\`echotc lines\`- \> @ history-- Termcap 字符串可能包含无法正确回显的通配符。 在将 shell 变量设置为终端功能字符串时,应使用双引号,如下例所示,将日期放在状态行中: \> set tosl="\`echotc ts 0\`"- \> set frsl="\`echotc fs\`"- \> echo -n "$tosl";date; echo -n "$frsl" 使用 **\-s** ,不存在的功能返回空字符串而不是导致错误。 使用 **\-v**, 消息是冗长的。 **else**- **end**- **endif** **endsw** 请参阅下面的 _foreach_、 _if_、 _switch_ 和 _while_ 语句的描述。 **eval _arg_ ...** 将参数视为 shell 的输入,并在当前 shell 的上下文中执行生成的命令。 这通常用于执行作为命令或变量替换结果生成的命令,因为解析发生在这些替换之前。 有关 _eval_ 的示例使用,请参见 _tset_(1) 。 **exec _command_** 代替当前 shell 执行指定的命令。 **exit \[_expr_\]** shell 以指定的 _expr_ (表达式,如 **Expressions** 中所述)的值退出,或者在没有 _expr_ 的情况下以值 0 退出。 **fg \[**%**_job_ ...\]** 将指定的作业(或不带参数的当前作业)置于前台,如果停止则继续每个作业。 _job_ 可以是数字、字符串、 \`'、 \`%'、 \`+' 或 \`-' ,如 **Jobs** 中所述。另请参见 _run-fg-editor_ 编辑器命令。 **filetest -_op file_ ... (+)** 将 _op_ 它是 **文件查询运算符** 中所述的文件查询运算符)应用于每个 _file_ ,并将结果作为空格分隔的列表返回。 **foreach _name_ **(**_wordlist_**)****- ... **end** 依次为 _wordlist_ 的每个成员设置变量 _name_ ,并执行该命令与匹配 _end_ 之间的命令序列。 (_foreach_ 和 _end_ 都必须单独出现在不同的行上。) 内置命令 _continue_ 可用于过早地继续循环,内置命令 _break_ 可用于过早地终止循环。 当从终端读取这个命令时,循环会被读取一次,提示 \`foreach? '(或 **prompt2**) 在循环中的任何语句被执行之前。 如果您在终端输入循环时出错,您可以将其擦掉。 **getspath (+)** 打印系统执行路径。 (仅限 TCF) **getxvers (+)** 打印实验版本前缀。 (仅限 TCF) **glob _wordlist_** 与 _echo_ 类似,但无法识别 \`-n' 参数,并且输出中的单词由空字符分隔。 对于希望使用 shell 文件名扩展单词列表的程序很有用。 **goto _word_** _word_ 是文件名和命令替换以产生形式为 \`label'的字符串。 shell 尽可能回退它的输入,搜索 \`label:'形式的行,前面可能有空格或制表符,并在该行之后继续执行。 **hashstat** 打印一条统计信息行,指示内部哈希表在定位命令(并避免执行 _exec_ )方面的有效性。对于 **path** 中哈希函数指出可能命中的每个组件,以及每个不以 \`/' 开头的组件,尝试执行 _exec_ 。 在没有 _vfork_(2) 的机器上,只打印散列桶的数量和大小。 **history \[**\-hTr**\] \[_n_\]**- **history -S|**\-L|****\-M** \[_filename_\] (+)** **history -c (+)** 第一种形式打印历史事件列表。 如果给出 _n_ ,则仅打印或保存 _n_ 个最近的事件。 使用 **\-h**, 打印历史列表时不带前导数字。如果指定了 **\-T** ,时间戳也会以注释形式打印。 (这可用于生成适合使用 'history -L' 或 'source -h' 加载的文件。) 使用 **\-r** ,打印的顺序是最近的在前,而不是最旧的在前。 使用 **\-S** ,第二种形式将历史列表保存到 _filename_ 。 如果 **savehist** shell 变量的第一个单词设置为一个数字,最多可以保存那么多行。 如果 **savehist** 的第二个单词设置为 \`merge',历史列表将与现有历史文件合并而不是替换它(如果有的话)并按时间戳排序。 (+) 合并适用于像 X Window 系统这样同时使用多个 shell 的环境。如果 **savehist** 的第二个词是 \`merge' 并且第三个词设置为 \`lock',历史文件更新将与可能希望同时合并历史的其他 shell 会话序列化。 使用 **\-L** ,shell 将 _filename_ (可能是通过 **\-S** 选项或 **savehist** 机制保存的历史列表)附加到历史列表中。 **\-M** 与 **\-L** 类似,但 _filename_ 的内容被合并到历史列表中,并按时间戳排序。 在任何一种情况下,如果未给出 _filename_ ,则使用 **histfile** ;如果未设置 **histfile** ,则使用 _~/.history_ 。 \`history -L' 和 'source -h' 完全一样,只是它不需要文件名。 请注意,登录 shell 在启动时执行相当于 \`history -L' 的操作,如果设置了 **savehist** ,则在退出前执行 \`history -S' 。 因为通常只有 _~/.tcshrc_ 位于 _~/.history_ 之前,所以 **histfile** 应该设置在 _~/.tcshrc_ 而不是 _~/.login_ 中。 如果设置了 **histlit** ,则第一种和第二种形式打印并保存历史列表的文字(未扩展)形式。 最后一个表单清除历史列表。 **hup \[_command_\] (+)** 使用 _command_,运行 _command_ ,使其在挂断信号时退出,并安排外壳在外壳退出时向其发送挂断信号。 请注意,命令可能会设置自己对挂断的响应,覆盖 _hup_。 如果没有参数,则导致非交互式 shell 仅在脚本其余部分挂断时退出。 另请参阅 **信号处理** 和 _nohup_ 内置命令。 **if (_expr_**)** _command_** 如果 _expr_ 一个表达式,如 **表达式** 中所述)计算结果为 true,则执行 _command_ 。 _command_ 上的变量替换很早就发生了,同时它对 _if_ 命令的其余部分也发生了。 _command_ 必须是一个简单的命令,而不是别名、管道、命令列表或带括号的命令列表,但它可能有参数。 即使 _expr_ 为 false 并且 _不会_ 执行 _command_ ,也会发生输入/输出重定向;这是一个错误。 **if (_expr_**) then****- ...- **else if (_expr2_**) then****- ...- **else**- ... **endif** 如果指定的 _expr_ 为真,则执行第一个 _else_ 的命令;否则,如果 _expr2_ 为真,则执行第二个 _else_ 的命令,依此类推。 任何数量的 _else-if_ 都是可能的;只需要一个 _endif_ 。 _else_ 部分同样是可选的。(单词 _else_ 和 _endif_ 必须出现在输入行的开头; _if_ 必须单独出现在其输入行上或 _else_ 之后。) **inlib _shared-library_ ... (+)** 将每个 _shared-library_ 添加到当前环境。 无法删除共享库。(仅限 Domain/OS) **jobs \[**\-l**\]** 列出活动作业。 使用 **\-l** ,除普通信息外,还列出进程 ID。 在 TCF 系统上,打印执行每个作业的站点。 **kill \[**\-s** _signal_\] **%**_job_|_pid_ ...** **kill -l** 第一种和第二种形式将指定的 _signal_ 或者,如果没有给出,则 TERM(终止)信号)发送到指定的作业或进程。 _job_ 可以是数字、字符串、 \`'、 \`%'、 \`+' 或 \`-' as ,如 **Jobs** 中所述。 信号要么由编号给出,要么由名称给出(如 _/usr/include/signal.h_ 中给出的,去掉前缀 \`SIG')。 没有默认作业;只说 \`kill' 不会向当前 _job_ 发送信号。 如果发送的信号是 TERM(终止)或 HUP(挂断),那么作业或进程也会发送一个 CONT(继续)信号。 第三种形式列出了信号名称。 **limit \[**\-h**\] \[_resource_ \[_maximum-use_\]\]** 将当前进程及其创建的每个进程的消耗限制为不超过指定 _resource_ 的 _maximum-use_ 。 如果没有给出 _maximum-use_ ,则打印当前限制;如果没有给定 _resource_ ,则给出所有限制。 如果给出 **\-h** 标志,则使用硬限制而不是当前限制。 硬限制对当前限制的值施加了上限。 只有超级用户可以提高硬限制,但用户可以在合法范围内降低或提高当前限制。 当前可控资源包括(如果操作系统支持): _cputime_ 每个进程使用的最大 cpu 秒数 _filesize_ 可以创建的最大单个文件 _datasize_ 通过 sbrk(2) 超出程序文本末尾的数据+堆栈区域的最大增长 _stacksize_ 自动扩展堆栈区域的最大大小 _coredumpsize_ 将创建的最大核心转储的大小 _memoryuse_ 进程在给定时间可能分配给它的最大物理内存量 _vmemoryuse_ 进程在给定时间(地址空间)可能分配给它的最大虚拟内存量 _vmemoryuse_ 进程在给定时间可能分配给它的最大虚拟内存量 _heapsize_ 进程可以为每个 _brk()_ 系统调用分配的最大内存量 _descriptors_ 或 _openfiles_ 此进程的最大打开文件数 _pseudoterminals_ 此用户的最大伪终端数 _kqueues_ 分配给该进程的最大 kqueue 数 _concurrency_ 此进程的最大线程数 _memorylocked_ 进程可以使用 mlock(2) 锁定到内存的最大大小 _maxproc_ 此用户 ID 的最大同时进程数 _maxthread_ 此用户 ID 的最大并发线程数(轻量级进程) _threads_ 此进程的最大线程数 _sbsize_ 该用户使用的最大套接字缓冲区大小 _swapsize_ 为该用户保留或使用的最大交换空间量 _maxlocks_ 此用户的最大锁定数 _posixlocks_ 此用户的 POSIX 咨询锁的最大数量 _maxsignal_ 该用户的最大挂起信号数 _maxmessage_ 此用户的 POSIX mqueues 中的最大字节数 _maxnice_ 允许用户将此用户从 \[19...-20\] 映射到 \[0...39\] 的最大优先级 _maxrtprio_ 此用户的最大实时优先级 _maxrttime_ 此用户的 RT 任务超时时间(以微秒为单位)。 _maximum-use_ 可以以(浮点或整数)数字的形式给出,后跟比例因子。 对于除 _cputime_ 之外的所有限制,默认比例为“k”或“千字节”(1024 字节);也可以使用“m”或“兆字节”或“g”或“千兆字节”的比例因子。 对于 _cputime_ t默认的缩放比例是 \`seconds',而 \`m' 表示分钟或 \`h' 表示小时,或者可以使用给出分钟和秒的 \`mm:ss' 形式的时间。 如果 _maximum-use_ 是 \`unlimited', 那么对指定 _resource_ 的限制被移除(这相当于 _unlimit_ 内置命令)。 对于 _resource_ 名称和比例因子,名称的明确前缀就足够了。 **log (+)** 打印 **watch** shell 变量并报告 **watch** 中指示的每个登录用户,无论他们上次登录的时间。 另见 _watchlog_。 **login** 终止登录 shell,将其替换为 _/bin/login_ 的实例。 这是一种注销方式,包括与 _sh_(1) 兼容。 **logout** 终止登录 shell 。 如果设置了 **ignoreeof** 尤其有用。 **ls-F \[-_switch_ ...\] \[_file_ ...\] (+)** 列出像 \`ls -F' 这样的文件,但要快得多。它用特殊字符标识列表中的每种特殊文件类型: / 目录 \* 可执行文件 # 块设备 % 字符设备 | 命名管道(仅具有命名管道的系统) \= 套接字(仅限套接字的系统) @ 符号链接(仅具有符号链接的系统) + 隐藏目录(仅限 AIX)或上下文相关(仅限 HP/UX) : 网络专用(仅限 HP/UX) 如果设置了 **listlinks** shell 变量,则会更详细地识别符号链接(当然,仅在具有它们的系统上): @ 指向非目录的符号链接 \> 指向目录的符号链接 & 无处的符号链接 **listlinks** 也会减慢 _ls-F_ 的速度,并导致挂载符号链接指向的文件的分区。 如果 **listflags** 变量设置为 \`x'、 \`a' 或 \`A' 或它们的任何组合(例如, \`xA'), 它们将用作 _ls-F_ 的标志,使其行为类似于 \`ls -xF'、 \`ls -Fa'、 \`ls -FA' 或组合(例如, \`ls -FxA')。 在 \`ls -C' 不是默认值的机器上, _ls-F_ 的行为类似于 \`ls -CF' ,除非 **listflags** 包含 \`x', 在这种情况下它的行为类似于 \`ls -xF'。 如果给定任何开关, _ls-F_ 会将其参数传递给 _ls_(1) ,因此 \`alias ls ls-F' 通常会做正确的事情。 **ls-F** 内置可以根据文件类型或扩展名使用不同颜色列出文件。 请参阅 **color** shell 变量和 **LS\_COLORS** 环境变量。 **migrate \[**\-**_site_\] _pid_|**%**_jobid_ ... (+)** **migrate -_site_ (+)** 第一种形式将进程或作业迁移到指定的站点或由系统路径确定的默认站点。 第二种形式相当于 \`migrate -_site_ $$': 将当前进程迁移到指定站点。 迁移 shell 本身可能会导致意外行为,因为 shell 不喜欢丢失它的 tty。 (仅限 TCF) **newgrp \[**\-**\] _\[group\]_ (+)** 相当于 \`exec newgrp'; 参见 _newgrp_(1) 。仅当 shell 如此编译时才可用;查看 **version** shell 变量。 **nice \[**+**_number_\] \[_command_\]** 将 shell 的调度优先级设置为 _number_ ,或者,如果没有 _number_ ,设置为 4。 使用 _command_ ,以适当的优先级运行 _command_ 。 _number_ 越大,进程获得的 cpu 越少。 超级用户可以使用 \`nice -number ...' 指定负优先级。 命令总是在子 shell 中执行,并且适用于简单 _if_ 语句中的命令的限制。 **nohup \[_command_\]** 使用 _command_ ,运行 _command_ 以忽略挂断信号。 请注意,命令可能会设置自己对挂断的响应,覆盖 _nohup_ 。 如果没有参数,则导致非交互式 shell 仅忽略脚本其余部分的挂断。 另请参阅 **信号处理** 和 _hup_ 内置命令。 **notify \[**%**_job_ ...\]** 当任何指定作业(或者,没有 %_job_ ,当前作业)的状态发生更改时,使 shell 异步通知用户,而不是像往常一样等到下一个提示。 _job_ 可以是数字、字符串、 \`'、 \`%'、 \`+' 或 \`-' a,如 **Jobs** 中所述。 另请参见 **notify** shell 变量。 **onintr \[**\-**|_label_\]** 控制 shell 对中断的操作。 不带参数,恢复 shell 对中断的默认操作,即终止 shell 脚本或返回到终端命令输入级别。 使用 \`-'会导致忽略所有中断。 使用 _label_ ,当接收到中断或子进程因中断而终止时,shell 会执行 \`goto _label_' 。 如果 shell 以分离方式运行并且在系统启动文件中运行(请参阅 **文件**),则忽略 _onintr_ ,无论如何都禁用中断。 **popd \[**\-p**\] \[**\-l**\] \[**\-n**|**\-v**\] \[**+**_n_\]** 没有参数,弹出目录堆栈并返回到新的顶层目录。 使用数字 \`+_n_' ,丢弃堆栈中的第 _n_ 个条目。 最后,所有形式的 _popd_ 都会打印最终的目录堆栈,就像 _dirs_ 一样。 可以设置 **pushdsilent** shell 量来防止这种情况发生,并且可以给出 **\-p** 标志来覆盖 **pushdsilent** 。 **\-l**、 **\-n** 和 **\-v** 标志对 _popd_ 的影响与对 _dirs_ 的影响相同。 (+) **printenv \[_name_\] (+)** 打印所有环境变量的名称和值,或者使用 _name_ 打印环境变量 _name_ 的值。 **pushd \[**\-p**\] \[**\-l**\] \[**\-n**|**\-v**\] \[_name_|**+** _n_\]** 没有参数,交换目录堆栈的顶部两个元素。 如果设置了 **pushdtohome** ,不带参数的 _pushd_ 会执行 \`pushd ~',如 _cd_。 (+) 使用 _name_ ,将当前工作目录推入目录堆栈并更改 _name_。 如果 _name_ 是 \`-' 它被解释为以前的工作目录(参见 **文件名替换**)。 (+) 如果设置了 **dunique** , _pushd_ 会在将 _name_ 的任何实例推入堆栈之前从堆栈中删除它。 (+) 使用数字 \`+_n_' ,将目录堆栈的第 _n_ 个元素旋转到顶部元素并更改为它。 但是,如果设置了 **dextract** ,则 \`pushd +_n_' 提取第 _n_ 个目录,将其推送到堆栈顶部并更改为它。 (+) 最后,所有形式的 _pushd_ 都会打印出最终的目录栈,就像 _dirs_ 一样。 可以设置 **pushdsilent** 变量来防止这种情况发生,并且可以给出 **\-p** 标志来覆盖 **pushdsilent** 。 **\-l**、 **\-n** 和 **\-v** 标志对 _pushd_ 的影响与对 _dirs_ 的影响相同。 (+) **rehash** 导致重新计算 **path** 变量中目录内容的内部哈希表。 如果未设置 **autorehash** shell 变量并且在您登录时将新命令添加到 **path** 中的目录中,则需要这样做。 使用 **autorehash** ,将自动找到新命令,除非在哈希表中已存在位于不同目录中的另一个同名命令的特殊情况。 还刷新由波浪号扩展构建的主目录的缓存。 **repeat _count command_** 指定的 _command_ 与上面一行 _if_ 语句中的 _command_ 有相同的限制,执行 _count_ 次。 I/O 重定向只发生一次,即使 _count_ 为 0。 **rootnode //_nodename_ (+)** 将根节点更改为 //_nodename_, 这样 \`/' 将被解释为 \`//_nodename_'。 (仅限 Domain/OS) **sched (+)**- **sched \[**+**\]_hh:mm command_ (+)** **sched -_n_ (+)** 第一种形式打印预定事件列表。 可以设置 **sched** shell 变量来定义打印预定事件列表的格式。 第二种形式将 _command_ 添加到预定事件列表。 例如, \> sched 11:00 echo It\\'s eleven o\\'clock. 导致 shell 回显 \`It's eleven o'clock.' 在上午 11 点。 时间可能是 12 小时 AM/PM 格式 \> sched 5pm set prompt='\[%h\] It\\'s after 5; go home: >' 或者可能相对于当前时间: \> sched +2:15 /usr/lib/uucp/uucico -r1 -sother 相对时间规范可能不使用 AM/PM 格式。 第三种形式从事件列表中删除项目 _n_ : \> sched 1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother 2 Wed Apr 4 17:00 set prompt=\[%h\] It's after 5; go home: >- \> sched -2- \> sched 1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother 计划事件列表中的命令在计划命令的时间之后打印第一个提示之前执行。 可能会错过运行命令的确切时间,但会在下一个提示符处执行过期的命令。 在 shell 等待用户输入时到期的命令会立即执行。 然而,已经运行的命令的正常操作不会被中断,从而可以运行预定事件列表元素。 这种机制与某些 Unix 系统上的 _at_(1) 命令相似,但又不同。 它的主要缺点是它可能不会在指定的时间运行命令。 它的主要优点是因为 _sched_ 直接从 shell 运行,它可以访问 shell 变量和其他结构。 这提供了一种根据一天中的时间改变工作环境的机制。 **set**- **set _name_ ...**- **set _name_**\=**_word_ ...**- **set \[-r\] \[-f|-l\] _name_**\=(**_wordlist_**)** ... (+)**- **set _name\[index\]_**\=**_word_ ...**- **set -r (+)**- **set -r _name_ ... (+)** **set -r _name_**\=**_word_ ... (+)** 命令的第一种形式打印所有 shell 变量的值。 包含多个单词的变量打印为带括号的单词列表。 第二种形式将 _name_ 设置为空字符串。 第三种形式将 _name_ 设置为单个单词。 第四种形式将 _name_ 设置为 _wordlist_ 中的单词列表。 在所有情况下,该值都是命令和文件名扩展。 如果指定了 **\-r** ,则将该值设置为只读。 如果指定了 **\-f** 或 **\-l** ,则仅设置保持其顺序的唯一单词。 **\-f** 喜欢单词的第一次出现, **\-l** t最后出现。 第 5 种形式将 _name_ 的第 _index_ 个组件设置为 _word_; 该组件必须已经存在。 第六种形式只列出所有只读的 shell 变量的名称。 第七种形式使 _name_ 只读,无论它是否有值。 第八种形式与第三种形式相同,但同时将 _name_ 设为只读。 可以重复这些参数以在单个 set 命令中设置和/或使多个变量只读。 但是请注意,在任何设置发生之前,所有参数都会发生变量扩展。 另请注意, \`=' 可以与 _name_ 和 _word_ 相邻,也可以由空格分隔,但不能仅与一个或另一个相邻。 另请参阅 _unset_ 内置命令。 **setenv \[_name_ \[_value_\]\]** 不带参数,打印所有环境变量的名称和值。 给定 _name_ ,将环境变量 _name_ 设置为 _value_ ,或者在没有 _value_ 的情况下设置为空字符串。 **setpath _path_ (+)** 等效于 _setpath_(1) 。(仅限Mach) **setspath LOCAL|_site_|_cpu_ ... (+)** 设置系统执行路径。 (仅限 TCF) **settc _cap value_ (+)** 告诉 shell 相信终端能力 _cap_ (定义在 _termcap_(5) 中) 具有值 _value_ 。 没有进行完整性检查。 概念终端用户可能需要 \`settc xn no' 才能在最右边的列正确换行。 **setty \[**\-d**|**\-q**|**\-x**\] \[**\-a**\] \[\[**+**|**\-**\]_mode_\] (+)** 控制 shell 不允许更改的 tty 模式(请参阅 **终端管理**)。 **\-d**、 **\-q** 或 **\-x** 告诉 _setty_ 分别对 \`edit'、 \`quote' 或 \`execute' tty 模式集进行操作;如果没有 **\-d**、 **\-q** 或 **\-x** ,则使用 \`execute' 。 在没有其他参数的情况下, _setty_ 列出了所选集中固定为 (\`+mode') 或关闭 (\`-mode')的模式。 可用模式以及显示因系统而异。 使用 **\-a** ,列出所选集中的所有 tty 模式,无论它们是否固定。 使用 **+**_mode_、 **\-**_mode_ 或 _mode_, 固定 _mode_ 打开或关闭或从所选集中的 _mode_ 中删除控制。 例如, \`setty +echok echoe' 修复了 \`echok' 模式,并允许命令在 shell 执行命令时打开或关闭 \`echoe' 模式。 **setxvers \[_string_\] (+)** 将实验版本前缀设置为 _string_ ,如果省略 _string_ ,则将其删除。 (仅限 TCF) **shift \[_variable_\]** 没有参数,丢弃 **argv**\[1\] 并将 **argv** 的成员向左移动。 不设置 **argv** 或将少于一个单词作为值是错误的。 使用 _variable_ ,对 _variable_ 执行相同的功能。 **source \[**\-h**\] _name_ \[_args_ ...\]** shell 从 _name_ 读取并执行命令。 这些命令不会放在历史列表中。 如果给定了任何 _args_ ,它们将被放置在 **argv** 中。 (+) _source_ 命令可以嵌套;如果它们嵌套得太深,shell 可能会用完文件描述符。 任何级别的 _source_ 中的错误都会终止所有嵌套的 _source_ 命令。 使用 **\-h** ,命令被放置在历史列表中而不是被执行,很像 \`history -L' 。 **stop **%**_job_|_pid_ ...** 停止在后台执行的指定作业或进程。 _job_ 可以是数字、字符串、 \`'、 \`%'、 \`+' 或 \`-' ,如 **Jobs** 中所述。 没有默认 _job_; 只说 \`stop' 并不会停止当前的工作。 **suspend** 使 shell 停止在其轨道上,就像它已通过 **^Z** 发送停止信号一样。 这最常用于停止由 _su_(1) 启动的 shell。 **switch (_string_**)****- **case _str1_**:**** ...- **breaksw** ... **default:** ...- **breaksw** **endsw** 每个案例标签都连续匹配,与指定的 _string_ 匹配,该字符串是第一个命令和文件名扩展。 文件元字符 \`\*'、 \`?' 和 \`\[...\]' 可以用在 case 标签中,它们是可变扩展的。 如果在找到 \`default' 标签之前没有任何标签匹配,则在默认标签之后开始执行。 每个案例标签和默认标签必须出现在一行的开头。 命令 _breaksw_ 导致在 _endsw_ 之后继续执行。 否则控制可能会像 C 中一样通过大小写标签和默认标签。 如果没有标签匹配并且没有默认值,则在 _endsw_ 之后继续执行。 **telltc (+)** 列出所有终端功能的值(请参阅 _termcap_(5))。 **termname \[_terminal type_\] (+)** 测试 _terminal type_ (如果没有给出 _terminal type_ ,则测试 **TERM** 的当前值)在主机 termcap(5) 或 terminfo(5) 数据库中是否有条目。 将终端类型打印到标准输出,如果存在条目则返回 0,否则返回 1。 **time \[_command_\]** 执行 _command_ (必须是简单命令,而不是别名、管道、命令列表或带括号的命令列表)并打印 **time** 变量下描述的时间摘要。 如有必要,将创建一个额外的 shell 以在命令完成时打印时间统计信息。 如果没有 _command_ ,则打印当前 shell 及其子 shell 的时间摘要。 **umask \[_value_\]** 将文件创建掩码设置为 _value_ ,以八进制给出。 掩码的常见值为 002,授予对组的所有访问权限以及对其他人的读取和执行权限,以及 022,授予对组和其他人的读取和执行权限。 没有 _value_ ,打印当前文件创建掩码。 **unalias _pattern_** - 删除名称与 _pattern_ 匹配的所有别名。 \`unalias \*' 因此删除所有别名。 没有任何东西是 _unalias_ ,这不是错误。 **uncomplete _pattern_ (+)** 删除名称匹配 _pattern_ 的所有完成。 \`uncomplete \*' 因此删除所有完成。 没有任何事情 _uncomplete_ 并不是错误。 **unhash** 禁止使用内部散列表来加速执行程序的定位。 **universe _universe_ (+)** 将 universe 设置为 _universe_。 (仅限 Masscomp/RTU) **unlimit \[**\-hf**\] \[_resource_\]** 删除对 _resource_ 的限制,或者如果未指定 _resource_ ,则删除所有 _resource_ 限制。 使用 **\-h** ,删除相应的硬限制。只有超级用户可以这样做。 请注意, **unlimit** 可能不会成功退出,因为大多数系统不允许 _descriptors_ 不受限制。 使用 **\-f** 错误将被忽略。 **unset _pattern_** 删除名称与 _pattern_ 匹配的所有变量,除非它们是只读的。 \`unset \*' 因此删除所有变量,除非它们是只读的;这是一个坏主意。 没有东西被 _unset_ 不是错误。 **unsetenv _pattern_** 删除名称匹配 _pattern_ 的所有环境变量。 \`unsetenv \*' 因此删除所有环境变量;这是一个坏主意。 没有什么是 _unsetenv_,这不是错误。 **ver \[_systype_ \[_command_\]\] (+)** 不带参数,打印 **SYSTYPE** 。 使用 _systype_ ,将 **SYSTYPE** 设置为 _systype_ 。 使用 _systype_ 和 _command_,执行 _systype_ 下的 _command_ 命令。 _systype_ 可以是 \`bsd4.3' 或 \`sys5.3'。 (仅限 Domain/OS) **wait** shell 等待所有后台作业。如果 shell 是交互式的,中断将中断等待并导致 shell 打印所有未完成作业的名称和作业编号。 **warp _universe_ (+)** 将 universe 设置为 _universe_。 (仅限 Convex/OS) **watchlog (+)** _log_ 内置命令 (qv) 的备用名称。 仅当 shell 如此编译时才可用;查看 **version** shell 变量。 **where _command_ (+)** 报告所有已知的 _command_ 实例,包括 **path** 中的别名、内置命令和可执行文件。 **which _command_ (+)** 显示在替换、 **path** 搜索等之后将由 shell 执行的命令。 内置命令就像 _which_(1) 一样,但它正确报告 _tcsh_ 别名和内置命令,并且速度快 10 到 100 倍。 另请参阅 _which-command_ 编辑器命令。 **while (_expr_**)****- ... **end** 执行 _while_ 和匹配 _end_ 之间的命令,而 _expr_ (一个表达式,如 **Expressions** 中所述)计算非零。 _while_ 和 _end_ 必须单独出现在它们的输入行上。 _break_ 和 _continue_ 可用于提前终止或继续循环。 如果输入是终端,则在第一次通过循环时提示用户,就像使用 _foreach_ 一样。 [特殊的别名 (+)](#__u7279___u6B8A___u7684___u522B___u540D__(+)) ---------------------------------------------------------- 如果设置,这些别名中的每一个都会在指定的时间自动执行。 它们最初都是未定义的。 **beepcmd** 当 shell 想要敲响终端铃声时运行。 **cwdcmd** 每次更改工作目录后运行。 例如,如果用户正在使用 _xterm_(1) 和支持标题栏(如 _twm_(1) 的重新父窗口管理器在 X 窗口系统上工作,并且 \> alias cwdcmd 'echo -n "^\[\]2;${HOST}:$cwd ^G"' 然后 shell 会将正在运行的 _xterm_(1) 的标题更改为主机名、冒号和完整的当前工作目录。 一种更好的方法是 \> alias cwdcmd 'echo -n "^\[\]2;${HOST}:$cwd^G^\[\]1;${HOST}^G"' 这会将主机名和工作目录放在标题栏上,但仅将主机名放在图标管理器菜单中。 请注意,在 _cwdcmd_ 中放置 _cd_、 _pushd_ 或 _popd_ 可能会导致无限循环。 作者认为,任何这样做的人都会得到他们应得的。 **jobcmd** 在每个命令执行之前或命令更改状态时运行。 这类似于 _postcmd_ ,但它不打印内置命令。 \> alias jobcmd 'echo -n "^\[\]2\\;\\!#:q^G"' 然后执行 _vi foo.c_ 会将命令字符串放在 xterm 标题栏中。 **helpcommand** 由 **run-help** 编辑器命令调用。 寻求帮助的命令名称作为唯一参数传递。 例如,如果一个人 \> alias helpcommand '\\!:1 --help' 然后将调用命令本身的帮助显示,使用 GNU 帮助调用约定。 目前没有简单的方法来解释各种调用约定(例如,习惯的 Unix \`-h'),除非使用包含许多命令的表。 **periodic** 每 **tperiod** 分钟运行一次。 这为检查常见但不频繁的更改(例如新邮件)提供了一种方便的方法。 例如,如果一个人 \> set tperiod = 30- \> alias periodic checknews 然后 _checknews_(1) 程序每 30 分钟运行一次。 如果设置了 _periodic_ 但未设置 **tperiod** 或设置为0,则 _periodic_ 的行为类似于 _precmd_。 **precmd** 在打印每个提示之前运行。 例如,如果一个人 \> alias precmd date 然后 _date_(1) 在 shell 提示每个命令之前运行。 _precmd_ 可以设置的内容没有限制,但应谨慎使用。 **postcmd** 在每个命令执行之前运行。 \> alias postcmd 'echo -n "^\[\]2\\;\\!#:q^G"' 然后执行 _vi foo.c_ 会将命令字符串放在 xterm 标题栏中。 **shell** 为本身不指定解释器的可执行脚本指定解释器。 第一个单词应该是所需解释器的完整路径名(例如, \`/bin/csh' 或 \`/usr/local/bin/tcsh')。 [特殊 shell 变量](#__u7279___u6B8A__shell___u53D8___u91CF_) ------------------------------------------------------- 本节中描述的变量对 shell 具有特殊意义。 shell 设置 **addsuffix**, **argv**, **autologout**, **csubstnonl**, **command**, **echo\_style**, **edit**, **gid**, **group**, **home**, **loginsh**, **oid**, **path**, **prompt**, **prompt2**, **prompt3**, **shell**, **shlvl**, **tcsh**, **term**, **tty**, **uid**, **user** and **version** 启动时;除非用户更改,否则它们此后不会更改。 shell 会在必要时更新 **cwd**, **dirstack**, **owd** 和 **status** ,并在注销时设置 **logout** 。 shell 将 **group**, **home**, **path**, **shlvl**, **term** 和 **user** 与同名的环境变量同步:每当环境变量更改时,shell 都会更改相应的 shell 变量以匹配(除非 shell 变量是只读的),反之亦然. 请注意,虽然 **cwd** 和 **PWD** 具有相同的含义,但它们并不以这种方式同步,并且 shell 会自动在 **path** 和 **PATH**。 **addsuffix (+)** 如果设置,文件名补全会在目录末尾添加 \`/' ,并在正常文件完全匹配时在正常文件末尾添加一个空格。 默认设置。 **afsuser (+)** 如果设置, **autologout** 的自动锁定功能将使用其值而不是本地用户名进行 kerberos 身份验证。 **ampm (+)** 如果设置,所有时间都以 12 小时 AM/PM 格式显示。 **anyerror (+)** 此变量选择传播到 **status** 变量值的内容。 有关更多信息,请参阅下面的 **status** 变量描述。 **argv** shell 的参数。 位置参数取自 **argv**, 即 \`$1' 被 \`$argv\[1\]' 替换,等等。 默认设置,但在交互式 shell 中通常为空。 **autocorrect (+)** 如果设置, _spell-word_ 编辑器命令会在每次完成尝试之前自动调用。 **autoexpand (+)** 如果设置, _expand-history_ 编辑器命令会在每次完成尝试之前自动调用。 如果设置为 _onlyhistory_, 则仅扩展历史记录,第二次补全将扩展文件名。 **autolist (+)** 如果设置,则在模棱两可的完成后列出可能性。如果设置为 'ambiguous',则仅当补全未添加新字符时才会列出可能性。 **autologout (+)** 第一个词是在自动注销之前不活动的分钟数。 可选的第二个字是自动锁定之前不活动的分钟数。 当 shell 自动注销时,它会打印 \`auto-logout',将变量 **logout** 设置为 \`automatic' 并退出。 当外壳自动锁定时,用户需要输入密码才能继续工作。 五次不正确的尝试会导致自动注销。 在登录和超级用户 shell 中默认设置为 “60”(60 分钟后自动注销,并且不锁定),但如果 shell 认为它在窗口系统下运行(即设置了 **DISPLAY** 环境变量),则不设置是一个伪 tty (pty) 或者 shell 不是这样编译的(参见 **version** shell 变量)。 另请参见 **afsuser** 和 **logout** shell 变量。 **autorehash (+)** 如果设置,如果在哈希表中找不到命令,则将重新计算 **path** 变量中目录内容的内部哈希表。 此外,如果分别设置为 \`complete' 或 \`correct' ,将为每个命令完成或拼写更正尝试重建可用命令列表;如果设置为 \`always' ,这将在两种情况下完成。 **backslash\_quote (+)** 如果设置,反斜杠 (\`\\') 总是引用 \`\\'、 \`'' 和 \`"' 。这可能会使复杂的引用任务变得更容易,但可能会导致 _csh_(1) 脚本中的语法错误。 **catalog** 消息目录的文件名。如果设置,tcsh 使用 \`tcsh.${catalog}' 作为消息目录,而不是默认的 \`tcsh'。 **cdpath** 如果在当前目录中找不到子目录, _cd_ 应该在其中搜索子目录的目录列表。 **cdtohome (+)** 如果没有设置, _cd_ 需要一个目录 _name_ ,如果省略它就不会进入 **home** 目录。 这是默认设置的。 **color** 如果设置,它将启用内置 **ls-F** 的彩色显示,并将 **\--color=auto** 传递给 **ls**或者,可以将其设置为仅 **ls-F** 或仅 **ls** 以仅对一个命令启用颜色。 将其设置为空等效于将其设置为 **(ls-F ls)**。 **colorcat** 如果设置,它将启用 NLS 消息文件的颜色转义序列。 并显示丰富多彩的 NLS 消息。 **command (+)** 如果设置,则使用 **\-c** 标志 (qv) 传递给 shell 的命令。 **compat\_expr (+)** 如果设置,shell 将从右到左计算表达式,就像原始的 _csh_ 一样。 **complete (+)** 如果设置为 'igncase',完成变得不区分大小写。 如果设置为 \`enhance',完成忽略大小写并认为连字符和下划线是等价的;它还将句点、连字符和下划线 (\`.'、 \`-' 和 \`\_') 视为单词分隔符。 如果设置为 \`Enhance',补全显式匹配大写和下划线字符,并以不区分大小写的方式匹配小写和连字符;它将句点、连字符和下划线视为单词分隔符。 继续 (+) 如果设置为命令列表,shell 将继续列出的命令,而不是开始新的命令。 **continue (+)** 如果设置为命令列表,shell 将继续列出的命令,而不是开始新的命令。 **continue\_args (+)** 与 continue 相同,但 shell 将执行: echo \`pwd\` $argv > ~/.<cmd>\_pause; %<cmd> **correct (+)** 如果设置为 \`cmd' ,命令会自动进行拼写更正。 如果设置为 \`complete', 命令将自动完成。 如果设置为 \`all',则更正整个命令行。 **csubstnonl (+)** 如果设置,命令替换中的换行符和回车符将被空格替换。 默认设置。 **cwd** 当前目录的完整路径名。 另请参见 **dirstack** 和 **owd** shell 变量。 **dextract (+)** 如果设置, \`pushd +_n_' 从目录堆栈中提取第 _n_ 个目录,而不是将其旋转到顶部。 **dirsfile (+)** \`dirs -S' 和 \`dirs -L' 查找历史文件的默认位置。 如果未设置,则使用 _~/.cshdirs_ 。因为通常只有 _~/.tcshrc_ 位于 _~/.cshdirs_ 之前,所以应该在 _~/.tcshrc_ 而不是 _~/.login_ 中设置 **dirsfile** 。 **dirstack (+)** 目录堆栈上所有目录的数组。 \`$dirstack\[1\]' 是当前工作目录, \`$dirstack\[2\]' 是堆栈上的第一个目录,等等。 请注意,当前工作目录是 \`$dirstack\[1\]' 但在目录堆栈替换等中为 \`=0' 。 可以通过设置 **dirstack** 任意更改堆栈,但第一个元素(当前工作目录)始终是正确的。 另请参见 **cwd** 和 **owd** shell 变量。 **dspmbyte (+)** 如果 'dspm' 被列为 **version** shell 变量的一部分,则有效。 如果设置为 \`euc',则可以显示和编辑 EUC 汉字(日语)代码。 如果设置为 \`sjis', 它可以显示和编辑 Shift-JIS(日文)代码。 如果设置为 \`big5', 它可以显示和编辑Big5(中文)代码。 如果设置为 \`utf8', 它将启用显示和编辑 Utf8(Unicode) 代码。 如果设置为以下格式,则可以显示和编辑原始多字节码格式: \> set dspmbyte = 0000....(256 bytes)....0000 该表 **just** 需要 256 个字节。256 个字符的每个字符对应(从左到右)ASCII 码 0x00、0x01、... 0xff。 每个字符设置为数字 0、1、2 和 3。 每个数字具有以下含义: 0 ... 不用于多字节字符。 1 ... 用于多字节字符的第一个字节。 2 ... 用于多字节字符的第二个字节。 3 ... 用于多字节字符的第一个字节和第二个字节。 实例:- 如果设置为 “001322”,则第一个字符(表示 ASCII 码的 0x00)和第二个字符(表示 ASCII 码的 0x01)设置为 “0”。 然后,它不用于多字节字符。 第 3 个字符 (0x02) 设置为 “1”,表示它用于多字节字符的第一个字节。 第 4 个字符 (0x03) 设置为 “3”。 它用于多字节字符的第一个字节和第二个字节。 第 5 和第 6 个字符 (0x04,0x05) 设置为 “2”,表示它们用于多字节字符的第二个字节。 如果没有 -N ( --literal ) 选项,GNU fileutils 版本的 ls 无法显示多字节文件名。 如果您使用此版本,请将 dspmbyte 的第二个字设置为 "ls"。 如果不是,例如, "ls-F -l" 不能显示多字节文件名。 笔记:- 只有在编译时定义了 KANJI 和 DSPMBYTE 时才能使用此变量。 **dunique (+)** 如果设置, _pushd_ 会在将 _name_ 推入堆栈之前从堆栈中删除任何实例。 **echo** 如果设置,则每个命令及其参数都会在执行之前回显。 对于非内置命令,所有扩展都发生在回显之前。 内置命令在命令和文件名替换之前回显,因为这些替换是选择性地完成的。 由 **\-x** 命令行选项设置。 **echo\_style (+)** _echo_ 内置的样式。可以设置为 bsd 如果第一个参数是 \`-n',则不要回显换行符; _csh_ 的默认值。 sysv 识别回显字符串中的反斜杠转义序列。 both 识别 \`-n' 标志和反斜杠转义序列; _tcsh_ 的默认值。 none 都不认识。 默认设置为本地系统默认值。 BSD 和 System V 选项在相应系统的 _echo_(1) 手册页中进行了描述。 **edit (+)** 如果设置,则使用命令行编辑器。在交互式 shell 中默认设置。 **editors (+)** 要匹配的 _run-fg-editor_ 编辑器命令的命令名称列表。 如果未设置,将使用 **EDITOR** (如果未设置,则为 \`ed' ) 和 **VISUAL** (如果未设置,则为 \`vi') 环境变量。 **ellipsis (+)** 如果设置, \`%c'/\`%.' 和 \`%C' 提示序列(参见 **prompt** shell variable) 变量)用省略号 (\`...') 而不是 \`/<skipped>' 表示跳过的目录。 **euid (+)** 用户的有效用户 ID。 **euser (+)** 与有效用户 ID 对应的第一个匹配的 passwd 条目名称。 **fignore (+)** 列出完成时要忽略的文件名后缀。 **filec** 在 _tcsh_ 中,始终使用完成,默认情况下忽略此变量。 如果未设置 **edit** ,则使用传统的 _csh_ 补全。 如果在 _csh_ 中设置,则使用文件名完成。 **gid (+)** 用户的真实组 ID。 **globdot (+)** 如果设置,通配符 glob 模式将匹配以 \`.' 开头的文件和目录 除了 \`.' 和 \`..' **globstar (+)** 如果设置, \`\*\*' 和 \`\*\*\*' 文件 glob 模式将匹配任何字符串,包括遍历任何现有子目录的 \`/' 。 (例如, \`ls \*\*.c' 将列出当前目录树中的所有 .c 文件)。 如果单独使用,它将匹配零个或多个子目录(例如, \`ls /usr/include/\*\*/time.h' 将列出 /usr/include 目录树中名为 \`time.h' 的任何文件;而 \`ls /usr/include/\*\*time.h' 将匹配 /usr/include 目录树中以 \`time.h' 结尾的任何文件)。 为了防止递归问题, \`\*\*' 全局模式不会下降到包含目录的符号链接。要覆盖它,请使用 \`\*\*\*' **group (+)** 用户的组名。 **highlight** 如果设置,增量搜索匹配(在 _i-search-back_ 和 _i-search-fwd_ 中)以及标记和光标之间的区域在反向视频中突出显示。 突出显示需要更频繁的终端写入,这会带来额外的开销。 如果您关心终端性能,您可能希望不设置此项。 **histchars** 确定 **历史替换** (qv) 中使用的字符的字符串值。 其值的第一个字符用作历史替换字符,替换默认字符 \`!' 。 其值的第二个字符在快速替换中替换字符 \`^' 。 **histdup (+)** 控制历史列表中重复条目的处理。 如果设置为 \`all',则仅在历史列表中输入唯一的历史事件。 如果设置为 \`prev' 并且最后一个历史事件与当前命令相同,则当前命令不会进入历史记录。 如果设置为 \`erase' 并且在历史列表中找到相同的事件,则该旧事件将被擦除并插入当前事件。 请注意, \`prev' 和 \`all' 选项对历史事件重新编号,因此没有间隔。 **histfile (+)** \`history -S' 和 \`history -L' 查找历史文件的默认位置。 如果未设置,则使用 _~/.history_ 。 **histfile** 在不同机器之间共享同一个主目录时很有用,或者在不同终端上保存单独的历史记录时很有用。 因为通常只有 _~/.tcshrc_ 位于 _~/.history_ 之前,所以 **histfile** 应该设置在 _~/.tcshrc_ 而不是 _~/.login_ 中。 **histlit (+)** 如果设置,内置和编辑器命令以及 **savehist** 机制使用历史列表中的文字(未扩展)形式的行。 另请参见 _toggle-literal-history_ 编辑器命令。 **history** 第一个字表示要保存的历史事件的数量。 可选的第二个字 (+) 表示打印历史的格式;如果没有给出,则使用 \`%h\\t%T\\t%R\\n' 。 格式序列在下面的**prompt** 下描述;注意 \`%R' 的变量含义。 默认设置为 \`100' 。 **home** 初始化到调用者的主目录。 \`_~_' 的文件名扩展指的是这个变量。 **ignoreeof** 如果设置为空字符串或 '0' 并且输入设备是终端,则 _end-of-file_ 命令(通常由用户在空行上键入 \`^D' 生成)会导致 shell 打印 \`Use "exit" to leave tcsh.' 而不是退出。这可以防止 shell 被意外杀死。 从历史上看,此设置在 26 次连续 EOF 后退出以避免无限循环。 如果设置为数字 _n_, shell 将忽略 _n - 1_ 个连续的 _end-of-file_ 并在第 _n_ 次退出。 (+) 如果未设置,则使用 \`1' ,即 shell 以单个 \`^D' 退出。 **implicitcd (+)** 如果设置,shell 将键入的目录名称视为命令,就好像它是更改到该目录的请求一样。 如果设置为 _verbose_ ,则目录的更改将回显到标准输出。 此行为在非交互式 shell 脚本中或对于包含多个单词的命令字符串中被禁止。 更改目录优先于执行同名命令,但它是在别名替换之后完成的。 波浪号和变量扩展按预期工作。 **inputmode (+)** 如果设置为 \`insert' 或 \`overwrite' ,则将编辑器置于每行开头的输入模式。 **killdup (+)** 控制终止环中重复条目的处理。 如果设置为 \`all' ,则只有唯一的字符串会被输入到 kill ring 中。 如果设置为 \`prev' 并且最后终止的字符串与当前终止的字符串相同,则当前字符串不会进入环中。 如果设置为 \`erase' 并且在 kill ring 中找到相同的字符串,则删除旧字符串并插入当前字符串。 **killring (+)** 指示要保留在内存中的已终止字符串的数量。 默认设置为 \`30' 。 如果未设置或设置为小于 \`2', shell 将只保留最近终止的字符串。 字符串由删除(杀死)文本字符串的编辑器命令(例如, _backward-delete-word_、 _kill-line_ 等)以及 _copy-region-as-kill_ 命令放入 killring 中。 _yank_ 编辑器命令会将最近终止的字符串拖入命令行,而 _yank-pop_ (请参阅 **编辑器命令**)可用于 yank 较早终止的字符串。 **listflags (+)** 如果设置为 \`x'、 \`a' 或 \`A' 或它们的任何组合(例如, \`xA'),它们将用作 _ls-F_ 的标志,使其行为类似于 \`ls -xF'、 \`ls -Fa'、 \`ls -FA' 或组合(例如, \`ls -FxA'): \`a' 显示所有文件(即使它们以 \`.'), \`A' 显示除 \`.' 之外的所有文件, \`..' 和 \`x' 排序而不是向下排序。 如果设置了 **listflags** 的第二个字,则将其用作 \`ls(1)' 的路径。 **listjobs (+)** 如果设置,则在暂停作业时列出所有作业。 如果设置为 \`long' ,则列表为长格式。 **listlinks (+)** 如果设置,则 _ls-F_ 内置命令显示每个符号链接指向的文件类型。 **listmax (+)** _list-choices_ 编辑器命令将在不先询问的情况下列出的最大项目数。 **listmaxrows (+)** _list-choices_ 编辑器命令将在不先询问的情况下列出的项目的最大行数。 **loginsh (+)** 如果是登录 shell,则由 shell 设置。 在 shell 中设置或取消设置它没有效果。 另见 **shlvl**。 **logout (+)** 在正常注销之前由 shell 设置为 \`normal' ,在自动注销之前设置为 \`automatic' ,如果 shell 被挂断信号杀死,则设置为 \`hangup' (参见 **信号处理**)。 另请参见 **autologout** shell 变量。 **mail** 用于检查传入邮件的文件和目录的列表,可以在前面加上一个数字单词。 在每次提示之前,如果距离上次检查已经过去了 10 分钟,shell 会检查每个文件并显示 \`You have new mail.' (或者,如果 **mail** 包含多个文件, \`You have new mail in _name_.') 如果文件大小大于零并且修改时间大于其访问时间。 如果您在登录 shell 中,则不会报告邮件文件,除非它在 shell 启动后被修改,以防止多余的通知。 大多数登录程序会在您登录时告诉您是否有邮件。 如果在 **mail** 中指定的文件是一个目录,shell 将把该目录中的每个文件计算为一个单独的消息,并报告 \`You have _n_ mails.' 或 \`You have _n_ mails in _name_.' 作为适当的。 此功能主要是为那些以这种方式存储邮件的系统提供的,例如 Andrew Mail System。 如果 **mail** 的第一个单词是数字,则将其视为不同的邮件检查间隔,以秒为单位。 在极少数情况下,shell 可能会报告 \`You have mail.' 而不是 \`You have new mail.' **matchbeep (+)** 如果设置为 \`never',完成不会发出哔哔声。 如果设置为 \`nomatch', 只有在没有匹配时才会发出哔哔声。 如果设置为 \`ambiguous', 当有多个匹配时它会发出哔哔声。 如果设置为 \`notunique', 当有一个完全匹配和另一个更长的匹配时,它会发出哔哔声。 如果未设置,则使用 \`ambiguous' 。 **nobeep (+)** 如果设置,哔哔声将完全禁用。 另见 **visiblebell**。 **noclobber** 如果设置,则对输出重定向施加限制,以确保文件不会被意外破坏,并且 \`>>' 重定向引用现有文件,如 **输入/输出** 部分所述。 **noding** 如果设置,禁用打印 \`DING!' 在时间变化的 **prompt** 时间说明符中。 **noglob** 如果设置, **Filename substitution** 和 **Directory stack substitution** (qv) 将被禁止。 这在不处理文件名的 shell 脚本中最有用,或者在获得文件名列表并且不需要进一步扩展之后。 **nokanji (+)** 如果设置并且 shell 支持 Kanji(请参阅 **version** shell 变量),它将被禁用,以便可以使用元键。 **nonomatch** 如果设置,,与任何现有文件不匹配的 **Filename substitution** 或 **Directory stack substitution** (qv) 将保持不变,而不是导致错误。 替换格式错误仍然是一个错误,例如, \`echo \[' 仍然给出错误。 **nostat (+)** 在完成操作期间不应 _stat_(2) 的目录列表(或匹配目录的 glob 模式;请参阅 **Filename substitution**)。 这通常用于排除需要花费太多时间来 _stat_(2) 的目录,例如 _/afs_。 **notify** 如果设置,shell 会异步宣布作业完成。 默认设置是在打印提示之前显示作业完成。 **oid (+)** 用户的真实组织 ID。 (仅限Domain/OS) **owd (+)** 旧的工作目录,相当于 _cd_ 和 _pushd_ 使用的 \`-'。 另请参见 **cwd** 和 **dirstack** shell 变量。 **padhour** 如果设置,则启用以 24 和 12 小时格式打印小时的填充 '0' f。 例如: 07:45:42 与 7:45:42。 **parseoctal** 为了与旧版本兼容,以 0 开头的数字变量不会被解释为八进制。 设置此变量可启用正确的八进制解析。 **path** 在其中查找可执行命令的目录列表。 空字指定当前目录。 如果没有 **path** 变量,则只会执行完整路径名。 **path** 由 shell 在启动时从 **PATH** 环境变量设置,或者,如果 **PATH** 不存在,设置为依赖于系统的默认值,例如 \`(/usr/local/bin /usr/bsd /bin /usr/bin .)'。 shell 可能会放 \`.' **path** 中的第一个或最后一个或完全省略它,具体取决于它的编译方式;查看 **version** shell 变量。 一个既没有 **\-c** 也没有 **\-t** 选项的 shell 在读取 _~/.tcshrc_ 并且每次重置 **path** 后,都会对 **path** 中目录的内容进行哈希处理。 如果在 shell 处于活动状态时将新命令添加到 **path** 中的目录,则可能需要对 shell 进行 _rehash_ 以找到它。 **printexitvalue (+)** 如果设置并且交互式程序以非零状态退出,shell 将打印 \`Exit **status**'。 **prompt** 在从终端读取每个命令之前打印的字符串。 **prompt** 可能包含以下任何格式序列 (+),它们将替换为给定的信息: %/ 当前工作目录。 %~ 当前工作目录,但根据 **Filename substitution** ,一个人的主目录由 \`~' 表示,其他用户的主目录由 \`~user' 表示。只有当 shell 已经在当前会话的路径名中使用了 \`~_user_' 时,才会发生 \`~user' 替换。 %c\[\[0\]_n_\], %.\[\[0\]_n_\] 当前工作目录的尾随组件,如果给出数字 _n_ ,则为 _n_ 个尾随组件。 如果 _n_ 以 \`0' 开头,则跳过的组件数在格式 \`/<_skipped_\>trailing' 的尾随组件之前。 如果设置了 **ellipsis** shell 变量,则跳过的组件由省略号表示,因此整体变为 \`...trailing'。 \`~' 替换在上面的 \`%~' 中完成,但是在计算尾随组件时会忽略 \`~' 组件。 %C 与 %c 类似,但没有 \`~' 替换。 %h, %!, ! 当前历史事件编号。 %M 完整的主机名。 %m 主机名直到第一个 \`.'。 %S (%s) 启动(停止)杰出模式。 %B (%b) 启动(停止)粗体模式。 %U (%u) 启动(停止)下划线模式。 %t, %@ 12 小时 AM/PM 格式的时间。 %T 与 \`%t' 类似,但采用 24 小时格式(但请参见 **ampm** shell 变量)。 %p 以 12 小时 AM/PM 格式表示的 \`precise' 时间,以秒为单位。 %P Like \`%p' 类似,但采用 24 小时格式(但请参见 **ampm** shell 变量)。 \\_c_ _c_ 被解析为在 _bindkey_ 中。 ^_c_ _c_ 被解析为在 _bindkey_ 中。 %% 一个 \`%'。 %n 用户名。 %N 有效用户名。 %j jobs 的数量。 %d \`Day' 格式的工作日。 %D \`dd' 格式的日期。 %w \`Mon' 格式的月份。 %W \`mm' 格式的月份。 %y \`yy' 格式的年份。 %Y \`yyyy' 格式的年份。 %l shell 的 tty。 %L 从提示结束到显示结束或行结束清除。 %$ 在 \`$' 之后立即展开 shell 或环境变量名称。 %# \`>' (或 **promptchars** shell 变量的第一个字符)用于普通用户,\`#' (或 **promptchars** 的第二个字符)用于超级用户。 %{_string_%} 包括 _string_ 作为文字转义序列。 它应该仅用于更改终端属性,不应移动光标位置。 这不能是 **prompt** 中的最后一个序列。 %? 在提示符之前执行的命令的返回码。 %R 在 **prompt2** 中,解析器的状态。 在 **prompt3** 中,更正后的字符串。 在 **history** 中,历史字符串。 \`%B'、 \`%S'、 \`%U' 和 \`%{_string_%}' 仅在 eight-bit-clean shell 中可用;查看 **version** shell 变量。 粗体、突出和下划线序列通常用于区分超级用户 shell。 例如, \> set prompt = "%m \[%h\] %B\[%@\]%b \[%/\] you rang? "- tut \[37\] **\[2:54pm\]** \[/usr/accts/sys\] you rang? \_ 如果使用了 \`%t'、 \`%@'、 \`%T'、 \`%p' 或 \`%P' 并且没有设置 **noding** ,则打印 \`DING!' 关于小时的变化(即 \`:00' 分钟)而不是实际时间。 在交互式 shell 中默认设置为 \`%# ' 。 **prompt2 (+)** 在 _while_ 和 _foreach_ 循环中以及以 \`\\' 结尾的行之后提示的字符串。 可以使用与 **prompt** (qv) 中相同的格式序列;注意 \`%R' 的变量含义。 默认设置为 \`%R? ' 在交互式 shells 中。 **prompt3 (+)** 确认自动拼写更正时提示的字符串。 可以使用与 **prompt** (qv) 中相同的格式序列;注意 \`%R' 的变量含义。 默认设置为 \`CORRECT>%R (y|n|e|a)? ' 在交互式 shells 中。 **promptchars (+)** 如果设置(为双字符字符串),**prompt** shell 变量中的 \`%#' 格式化序列将替换为普通用户的第一个字符和超级用户的第二个字符。 **pushdtohome (+)** 如果设置,不带参数的 _pushd_ 会执行 \`pushd ~', 如 _cd_ 。 **pushdsilent (+)** 如果设置, _pushd_ 和 _popd_ 不会打印目录堆栈。 **recexact (+)** 如果设置,即使可能有更长的匹配,也会在完全匹配时完成完成。 **recognize\_only\_executables (+)** 如果设置,命令列表仅显示路径中可执行的文件。慢的。 **rmstar (+)** 如果设置,则在执行 \`rm \*' 之前提示用户。 **rprompt (+)** 当提示显示在左侧时,要在屏幕右侧(输入命令后)打印的字符串。 它识别与 **prompt** 相同的格式字符。 它会在必要时自动消失并重新出现,以确保命令输入不会被遮挡,并且只有在提示符、命令输入和它本身在第一行适合时才会出现。 如果没有设置 **edit** ,则 **rprompt** 将在提示符之后和命令输入之前打印。 **savedirs (+)** 如果设置,shell 在退出前执行 \`dirs -S' 。 如果第一个单词设置为数字,则最多保存那么多目录堆栈条目。 **savehist** 如果设置,shell 会在退出前执行 \`history -S' 。 如果将第一个单词设置为数字,则最多保存多少行。 (数量应小于或等于 **history** 条目数量;如果设置为大于 **history** 设置的数量,则仅保存 **history** 条目) 如果第二个单词设置为 \`merge',历史列表将与现有历史文件合并而不是替换它(如果有的话)并按时间戳排序并保留最近的事件。 如果 **savehist** 的第二个词是 \`merge' 并且第三个词设置为 \`lock', 历史文件更新将与可能希望同时合并历史的其他 shell 会话序列化。 (+) **sched (+)** _sched_ 内置命令打印预定事件的格式;如果没有给出,则使用 \`%h\\t%T\\t%R\\n' 。 格式序列在上面的 **prompt** 下进行了描述;注意 \`%R' 的变量含义。 **shell** shell 所在的文件。这用于派生 shell 以解释设置了执行位但系统无法执行的文件。 (参见 **Builtin and non-builtin command execution**.) 初始化为 shell 的(与系统相关的)主目录。 **shlvl (+)** 嵌套壳的数量。 在登录 shell 中重置为 1。另请参见 **loginsh** 。 **status** 最后一个命令或反引号扩展或管道中的任何命令的退出状态都会传播到 **status** 。 (这也是默认的 **csh** 行为。) 此默认值与 POSIX 要求的不匹配(仅返回最后一个命令的状态)。 要匹配 POSIX 行为,您需要取消设置 **anyerror** 。 如果 **anyerror** 变量未设置,则管道的退出状态仅由管道中的最后一条命令确定,并且反引号扩展的退出状态 _不会_ 传播到 **status**。 如果命令异常终止,则将 0200 添加到状态。 失败的内置命令返回退出状态 \`1', 所有其他内置命令返回状态 \`0'。 **symlinks (+)** 可以设置为几个不同的值来控制符号链接 (\`symlink') 解析: 如果设置为 \`chase', 每当当前目录更改为包含符号链接的目录时,它都会扩展为链接指向的目录的真实名称。 这不适用于用户的主目录;这是一个错误。 如果设置为 \`ignore' ,shell 会尝试在链接被交叉之前构建一个相对于当前目录的当前目录。 这意味着 _cd_ing 通过符号链接然后 \`cd ..'ing 返回一个到原始目录。 这仅影响内置命令和文件名完成。 如果设置为 \`expand', shell 会尝试通过实际扩展看起来像路径名的参数来修复符号链接。 这会影响任何命令,而不仅仅是内置命令。 不幸的是,这不适用于难以识别的文件名,例如嵌入在命令选项中的文件名。 可以通过引用来防止扩展。 虽然此设置通常是最方便的,但当它无法识别应扩展的参数时,有时会产生误导,有时会令人困惑。 一个折衷方案是使用 \`ignore' 并在必要时使用编辑器命令 _normalize-path_ (默认绑定到 ^X-n) 。 一些例子是有序的。 首先,让我们设置一些播放目录: \> cd /tmp- \> mkdir from from/src to- \> ln -s from/src to/dst 这是未设置 **symlinks** 的行为, \> cd /tmp/to/dst; echo $cwd- /tmp/to/dst- \> cd ..; echo $cwd- /tmp/from 这是 **symlinks** 设置为 \`chase' 的行为, \> cd /tmp/to/dst; echo $cwd- /tmp/from/src- \> cd ..; echo $cwd- /tmp/from 这是 **symlinks** 设置为 \`ignore' 的行为, \> cd /tmp/to/dst; echo $cwd- /tmp/to/dst- \> cd ..; echo $cwd- /tmp/to 这是 **symlinks** 设置为 \`expand' 的行为。 \> cd /tmp/to/dst; echo $cwd- /tmp/to/dst- \> cd ..; echo $cwd- /tmp/to- \> cd /tmp/to/dst; echo $cwd- /tmp/to/dst- \> cd ".."; echo $cwd- /tmp/from- \> /bin/echo ..- /tmp/to- \> /bin/echo ".."- .. 请注意, \`expand' 扩展 1) 就像 _cd_ 等内置命令的 \`ignore' 一样工作,2) 通过引用来防止,3) 在文件名传递给非内置命令之前发生。 **tcsh (+)** shell 的版本号,格式为 \`R.VV.PP' ,其中 \`R' 是主要版本号, \`VV' 是当前版本, \`PP' 是补丁级别。 **term** 终端类型。 通常在 _~/.login_ 中设置,如 **启动和关闭** 中所述。 **time** 如果设置为一个数字,那么内置的 _time_ (qv) 在每个命令后自动执行,这需要超过那么多 CPU 秒数。 如果有第二个单词,则将其用作内置 _time_ 输出的格式字符串。 (u) 以下序列可用于格式字符串: %U 进程在用户模式下花费的时间(以 cpu 秒为单位)。 %S 进程在内核模式下花费的时间(以 cpu 秒为单位)。 %E 以秒为单位的经过(挂钟)时间。 %P CPU 百分比计算为 (%U + %S) / %E。 %W 进程被交换的次数。 %X (共享)文本空间中使用的平均数量(以千字节为单位)。 %D 以千字节为单位的(非共享)数据/堆栈空间的平均使用量。 %K 已使用的总空间 (%X + %D) ,以千字节为单位。 %M 进程在任何时候使用的最大内存,以千字节为单位。 %F 主要页面错误的数量(需要从磁盘获取页面)。 %R 次要页面错误的数量。 %I 输入操作的数量。 %O 输出操作的数量。 %r 收到的套接字消息数。 %s 发送的套接字消息数。 %k 接收到的信号数。 %w 自愿上下文切换(等待)的数量。 %c 非自愿上下文切换的数量。 没有 BSD 资源限制功能的系统仅支持前四个序列。 对于支持资源使用报告的系统,默认时间格式为 \`%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww' ,对于不支持资源使用报告的系统,默认时间格式为 \`%Uu %Ss %E %P' 。 在 Sequent 的 DYNIX/ptx 下, %X、 %D、 %K、 %r 和 %s 不可用,但以下附加序列是: %Y 执行的系统调用数。 %Z 按需填零的页数。 %i 内核增加进程驻留集大小的次数。 %d 内核减少进程驻留集大小的次数。 %l 执行的读取系统调用的数量。 %m 执行的写入系统调用数。 %p 从原始磁盘设备读取的次数。 %q 对原始磁盘设备的写入次数。 默认时间格式为 \`%Uu %Ss %E %P %I+%Oio %Fpf+%Ww'。 请注意,多处理器上的 CPU 百分比可能高于 100%。 **tperiod (+)** _periodic_ 性特殊别名执行之间的时间间隔(以分钟为单位)。 **tty (+)** tty 的名称,如果没有附加到一个,则为空。 **uid (+)** 用户的真实用户 ID。 **user** 用户的登录名。 **verbose** 如果设置,则在历史替换(如果有)之后打印每个命令的单词。 由 **\-v** 命令行选项设置。 **version (+)** 版本 ID 戳。 它包含 shell 的版本号(参见 **tcsh**)、来源、发布日期、供应商、操作系统和机器(参见 **VENDOR**、 **OSTYPE** 和 **MACHTYPE**) 以及在编译时设置的以逗号分隔的选项列表。 注释在分发中默认设置的选项。 8b shell 是8位干净的;默认 7b shell 不是8位干净的 wide shell 是干净的多字节编码(如 UTF-8) nls 使用系统的 NLS;具有 NLS 的系统的默认设置 lf 登录 shell 在 _/etc/csh.cshrc_ 和 _~/.login_ 之前而不是在 _~/.tcshrc_ 和 _~/.history_ 之后执行 _/etc/csh.login_ 。 dl 为了安全, \`.' 放在 **path** 的最后;默认的 nd \`.' 为安全起见,将从 **path** 中省略 vi _vi_(1) 风格的编辑是默认的,而不是 _emacs_(1) 风格的 dtr 退出时登录外壳会丢弃 DTR bye _bye_ 是 _logout_ 的同义词, _log_ 是 _watchlog_ 的替代名称 al 启用 **autologout** ;默认 kan 根据区域设置在适当的情况下使用汉字,除非设置了 **nokanji** shell 变量 sm 使用系统的 _malloc_(3) hb 执行 shell 脚本时模拟 \`#!<program> <args>' 约定 ng _newgrp_ 内置可用 rh shell 尝试设置 **REMOTEHOST** 环境变量 afs 如果本地身份验证失败,shell 会使用 kerberos 服务器验证您的密码。 **afsuser** shell 变量或 **AFSUSER** 环境变量会覆盖您的本地用户名(如果已设置)。 管理员可以输入额外的字符串来指示本地版本的差异。 **vimode (+)** 如果未设置,则各种键绑定将行为更改为更多 **emacs**(1) 样式:单词边界由 **wordchars** 与其他字符确定。 如果设置,各种键绑定将行为更改为更多 **vi**(1) 样式:单词边界由 **wordchars** 与空白与其他字符确定;游标行为取决于当前的 vi 模式(命令、删除、插入、替换)。 此变量由 _bindkey_ **\-e** 取消设置并由 _bindkey_ **\-v** 设置。 如果需要,用户可以在这些 _bindkey_ 操作之后显式地设置或取消 **vimode** 。 **visiblebell (+)** 如果设置,将使用屏幕闪烁而不是铃声。另请参阅 **nobeep**。 **watch (+)** 用于监视登录和注销的用户/终端对列表。 如果任一用户是 \`any' ,则所有终端都会为给定用户监视,反之亦然。 将 **watch** 设置为 \`(any any)' 会监视所有用户和终端。 例如, set watch = (george ttyd1 any console $user any) 报告 ttyd1 上的用户 \`george' 、控制台上的任何用户以及任何终端上的自己(或侵入者)的活动。 默认情况下,每 10 分钟检查一次登录和注销,但可以将 **watch** 的第一个单词设置为每隔这么多分钟检查一次的数字。 例如, set watch = (1 any any) 每分钟报告一次任何登录/注销。 对于不耐烦的人, _log_ 内置命令随时触发 **watch** 报告。 首次设置 **watch** 时,会报告所有当前登录(与内置 _log_ 日志一样)。 **who** 变量控制 **watch** 报告的格式。 **who (+)** **watch** 消息的格式字符串。 以下序列由给定信息替换: %n 登录/注销的用户名。 %a 观察到的操作,即 \`logged on'、 \`logged off' 或 \`replaced _olduser_ on'。 %l 用户登录/注销的终端 (tty)。 %M 远程主机的完整主机名,如果登录/注销来自本地主机,则为 \`local' 。 %m 远程主机的主机名,直到第一个 \`.'。 如果是 IP 地址或 X Window 系统显示,则会打印全名。 %M 和 %m 仅在将远程主机名存储在 _/etc/utmp_ 中的系统上可用。 如果未设置,则使用 \`%n has %a %l from %m.' ,,或者在没有存储远程主机名的系统上使用 \`%n has %a %l.' 。 **wordchars (+)** 由 _forward-word_、 _backward-word_ 等编辑器命令视为单词一部分的非字母数字字符列表。 如果未设置,则根据 **vimode** 的状态确定默认值:如果未设置 **vimode** ,则使用 \`\*?\_-.\[\]~=' 作为默认值;如果设置了 **vimode** ,则使用 \`\_' 作为默认值。 [环境](#__u73AF___u5883_) ======================= **AFSUSER (+)** 等效于 **afsuser** shell 变量。 **COLUMNS** 终端中的列数。 请参阅 **阅终端管理**。 **DISPLAY** 由 X 窗口系统使用(请参阅 _X_(1))。 如果设置,shell 不会设置 **autologout** (qv)。 **EDITOR** 默认编辑器的路径名。 如果未设置 **editors** shell 变量,则由 _run-fg-editor_ 命令使用。 另请参见 **VISUAL** 环境变量。 **GROUP (+)** 等效于 **group** shell 变量。 **HOME** 等效于 **home** shell 变量。 **HOST (+)** 初始化为运行 shell 的机器的名称,由 _gethostname_(2) 系统调用确定。 **HOSTTYPE (+)** 初始化为运行 shell 的机器类型,在编译时确定。 此变量已过时,将在未来版本中删除。 **HPATH (+)** _run-help_ 编辑器命令在其中查找命令文档的以冒号分隔的目录列表。 朗 **LANG** 提供首选的字符环境。 请参阅 **本机语言系统支持**。 **LC\_CTYPE** 如果设置,则仅更改 ctype 字符处理。 请参阅 **本机语言系统支持**。 **LINES** 终端中的行数。 请参阅 **终端管理**. **LS\_COLORS** 这个变量的格式让人想起 **termcap(5)** 文件格式;以冒号分隔的 "_xx=string_" 形式的表达式列表,其中 "_xx_" 是两个字符的变量名。 具有相关默认值的变量是: no 0 普通(非文件名)文本 fi 0 常规文件 di 01;34 目录 ln 01;36 符号链接 pi 33 命名管道 (FIFO) so 01;35 嵌套字 do 01;35 门 bd 01;33 块设备 cd 01;32 字符设备 ex 01;32 可执行文件 mi (none) 缺少文件(默认为 fi) or (none) 孤立的符号链接(默认为 ln) lc ^\[\[ 左码 rc m 右码 ec (none) 结束代码(替换 lc+no+rc) 您只需要包含要更改默认值的变量。 文件名也可以根据文件扩展名着色。 这在 **LS\_COLORS** 变量中使用语法 **"\*ext=string"** 指定。 例如,使用 ISO 6429 代码,将所有 C 语言源文件着色为蓝色,您可以指定 **"\*.c=34"** 。 这会将所有以 **.c** 结尾的文件着色为蓝色 (34)。 控制字符可以用 C 风格的转义表示法或类似 stty 的 ^ 表示法编写。C 风格的符号为 Escape 添加了 **^\[** ,为正常的空格字符添加了 **\_** ,以及 **?** 删除。 此外, **^\[** 转义字符可用于覆盖 **^\[**、 **^**、 **:** 和 **\=**。 每个文件将被写为 **<lc>** **<color-code>** **<rc>** **<filename>** **<ec>**。如果 **<ec>** 代码未定义,则将使用序列 **<lc>** **<no>** **<rc>** 代替。 这通常使用起来更方便,但不太通用。 提供了左、右、尾代码,让您不必一遍又一遍地键入常用部分并支持奇怪的终端;您通常根本不需要更改它们,除非您的终端不使用 ISO 6429 颜色序列而是使用不同的系统。 如果您的终端确实使用 ISO 6429 颜色代码,您可以用分号分隔的数字命令组成类型代码(即,除了 **lc**、 **rc** 和 **ec** 代码之外的所有代码)。最常见的命令是: 0 恢复默认颜色 1 更亮的颜色 4 对于带下划线的文本 5 用于闪烁文本 30 用于黑色前景 31 用于红色前景 32 用于绿色前景 33 黄色(或棕色)前景 34 用于蓝色前景 35 用于紫色前景 36 用于青色前景 37 用于白色(或灰色)前景 40 黑色背景 41 红色背景 42 绿色背景 43 黄色(或棕色)背景 44 蓝色背景 45 紫色背景 46 青色背景 47 白色(或灰色)背景 并非所有命令都适用于所有系统或显示设备。 一些终端程序无法正确识别默认结束代码。 如果在列出目录后所有文本都被着色,请尝试将 **no** 和 **fi** 代码从 0 更改为标准前景色和背景色的数字代码。 **MACHTYPE (+)** 在编译时确定的机器类型(微处理器类或机器模型)。 **NOREBIND (+)** 如果设置,可打印字符不会反弹到 _self-insert-command_。 请参阅 **本机语言系统支持**。 **OSTYPE (+)** 操作系统,在编译时确定。 **PATH** 在其中查找可执行文件的以冒号分隔的目录列表。 等效于 **path** shell 变量,但格式不同。 **PWD (+)** 等效于 **cwd** shell 变量,但不与之同步;仅在实际目录更改后更新。 **REMOTEHOST (+)** 用户远程登录的主机,如果是这种情况并且 shell 能够确定它。 仅当 shell 如此编译时才设置;查看 **version** shell 变量。 **SHLVL (+)** 等效于 **shlvl** shell 变量。 **SYSTYPE (+)** 当前系统类型。 (仅限Domain/OS) **TERM** 等效于 **term** shell 变量。 **TERMCAP** 终端能力字符串。 请参阅 **终端管理**。 **USER** 等效于 **user** shell 变量。 **VENDOR (+)** vendor, 在编译时确定。 **VISUAL** 默认全屏编辑器的路径名。 如果未设置 **editors** shell 变量,则由 _run-fg-editor_ 命令使用。 另请参阅 **EDITOR** 环境变量。 [文件](#__u6587___u4EF6_) ======================= _/etc/csh.cshrc_ 每个 shell 都先阅读。 ConvexOS、 Stellix 和 Intel 使用 _/etc/cshrc_ ,而 NeXTs 使用 _/etc/cshrc.std_。 A/UX、 AMIX、 Cray 和 IRIX 在 _csh_(1) 中没有等价物,但无论如何都要在 _tcsh_ 中读取这个文件。 Solaris 2.x 也没有,但 _tcsh_ 读取 _/etc/.cshrc_。 (+) _/etc/csh.login_ 在 _/etc/csh.cshrc_ 之后由登录 shell 读取。 ConvexOS、 Stellix 和 Intel 使用 _/etc/login_, NeXTs 使用 _/etc/login.std_, Solaris 2.x 使用 _/etc/.login_ 和 A/UX、 AMIX、 Cray 和 IRIX 使用 _/etc/cshrc_。 _~/.tcshrc (+)_ 由 _/etc/csh.cshrc_ 或其等效项之后的每个 shell 读取。 _~/.cshrc_ 如果 _~/.tcshrc_ 不存在,则由每个 shell 读取,在 _/etc/csh.cshrc_ 或其等效项之后。本手册使用 \`_~/.tcshrc_' 表示 \`_~/.tcshrc_ ,或者,如果找不到 _~/.tcshrc_ ,则表示 _~/.cshrc_'。 _~/.history_ 如果设置了 **savehist** ,则在 _~/.tcshrc_ 之后由登录 shell 读取,但另请参阅 **histfile**。 _~/.login_ 在 _~/.tcshrc_ 或 _~/.history_ 之后由登录 shell 读取。 shell 可以编译为在 _~/.login_ 之前而不是 _~/.tcshrc_ 和 _~/.history_ 之后读取;查看 **version** shell 变量。 _~/.cshdirs (+)_ 如果设置了 **savedirs** ,则在 _~/.login_ 之后由登录 shell 读取,但另请参阅 **dirsfile**。 _/etc/csh.logout_ 在注销时由登录 shell 读取。 ConvexOS、Stellix 和 Intel 使用 _/etc/logout_ 而 NeXTs 使用 _/etc/logout.std_。 A/UX、 AMIX、 Cray 和 IRIX 在 _csh_(1) 中没有等价物,但无论如何都要在 _tcsh_ 中读取这个文件。 Solaris 2.x 也没有,但 _tcsh_ 读取 _/etc/.logout_。 (+) _~/.logout_ 在 _/etc/csh.logout_ 或其等效项之后由登录 shell 读取。 _/bin/sh_ 用于解释不以 \`#' 开头的 shell 脚本。 _/tmp/sh\*_ \`<<' 的临时文件。 _/etc/passwd_ \`~name' 替换的主目录的来源。 如果 shell 是这样编译的,那么读取启动文件的顺序可能会有所不同;请参阅 **启动和关闭** 和 **version** shell 变量。 [新功能 (+)](#__u65B0___u529F___u80FD__(+)) ======================================== 本手册将 _tcsh_ 描述为一个单独的实体,但有经验的 _csh_(1) 用户会希望特别注意 _tcsh_ 的新功能。 命令行编辑器,支持 _emacs_(1) 样式或 _vi_(1) 样式的键绑定。 请参阅 **命令行编辑器** 和 **编辑器命令**。 可编程的交互式单词完成和列表。 请参阅 **完成和列出** and the _complete_ 和 _uncomplete_ 的内置命令。 文件名、命令和变量的 **拼写更正** (qv)。 **编辑器命令** (qv) 在键入命令的中间执行其他有用的功能,包括文档查找 (_run-help_)、快速编辑器重新启动 (_run-fg-editor_) 和命令解析 (_which-command_)。 增强的历史记录机制。 历史列表中的事件带有时间戳。 另请参阅 _history_ 命令及其相关的 shell 变量、以前未记录的 \`#' 事件说明符和 **历史替换**下的新修饰符、 _\*-history_、 _history-search-\*_、 _i-search-\*_、 _vi-search-\*_ 和 _toggle-literal-history_ 编辑器命令和 **histlit** shell 变量。 增强的目录解析和目录堆栈处理。 请参阅 _cd_、 _pushd_、 _popd_ 和 _dirs_ 命令及其关联的 shell 变量、 **目录堆栈替换** 的描述、 **dirstack**、 **owd** 和 **symlinks** shell 变量以及 _normalize-command_ 和 _normalize-path_ 编辑器命令。 全局模式中的否定。请参阅 **文件名替换**。 新的 **文件查询运算符** (qv) 和使用它们的内置 _filetest_ 。 各种 **自动、定期和定时事件** (qv),包括预定事件、特殊别名、自动注销和终端锁定、命令定时以及监视登录和注销。 支持本机语言系统(请参阅 **本机语言系统支持**)、操作系统变体功能(请参阅 **操作系统变体支持** 和 **echo\_style** 变量)和系统相关文件位置(请参阅 **文件**)。 丰富的终端管理能力。 请参阅 **终端管理**。 新的内置命令,包括 _builtins_、 _hup_、 _ls-F_、 _newgrp_、 _printenv_、 _which_ 和 _where_ (qv)。 使 shell 可以轻松获得有用信息的新变量。 请参阅 **gid**、 **loginsh**、 **oid**、 **shlvl**、 **tcsh**、 **tty**、 **uid** 和 **version** shell 变量以及 **HOST**、 **REMOTEHOST**、 **VENDOR**、 **OSTYPE** 和 **MACHTYPE** 环境变量。 用于在提示字符串中包含有用信息的新语法(请参阅 **prompt**),以及用于循环和拼写更正的特殊提示(请参阅 **prompt2** 和 **prompt3**)。 只读变量。 请参阅**变量替换**。 [缺陷](#__u7F3A___u9677_) ======================= 当挂起的命令重新启动时,如果它与当前目录不同,shell 将打印它启动的目录。 这可能会产生误导(即错误),因为作业可能在内部更改了目录。 Shell 内置函数不可停止/不可重启。当试图停止时, \`a ; b ; c' 形式的命令序列也不会被优雅地处理。如果你暂停 \`b',shell 将立即执行 \`c' 。 如果此扩展是由 _alias_. 引起的,则这一点尤其明显。 将命令序列放在 () 中就足够了,以强制它进入子 shell,即 \`( a ; b ; c )'。 进程启动后对 tty 输出的控制是原始的;也许这会激发人们在一个好的虚拟终端界面上工作。 在虚拟终端界面中,可以通过输出控制完成更多有趣的事情。 别名替换最常用于笨拙地模拟 shell 程序。应该提供 shell 程序而不是别名。 控制结构应该被解析而不是被识别为内置命令。 这将允许将控制命令放置在任何地方,与 \`|' 组合,并与 \`&' 和 \`;' 一起使用元语法。 _foreach_ 在查找其 _end_ 时不会忽略此处的文档。 应该可以在命令替换的输出上使用 \`:' 修饰符。 如果终端不能向上移动光标(即终端类型 \`dumb'),那么长于屏幕宽度的行的屏幕更新非常差。 **HPATH** 和 **NOREBIND** 不需要是环境变量。 不使用 \`?'、 \`\*' 或 \`\[\]' 或使用 \`{}' 或 \`~' 的全局模式不会被正确否定。 _if_ 的单命令形式即使表达式为假且命令未执行,也会输出重定向。 _ls-F_ 在对文件名进行排序时包含文件标识字符,并且不能很好地处理文件名中的控制字符。它不能被打断。 命令替换支持多个命令和条件,但不支持循环或反向 _goto_。 在 https://bugs.astron.com/ 报告错误,最好有修复。 如果您想帮助维护和测试 tcsh,请将您自己添加到 https://mailman.astron.com/ 的邮件列表中。 [TCSH 中的 T](#TCSH___u4E2D___u7684__T) ===================================== 1964 年,DEC 生产了 PDP-6。 PDP-10 是后来的重新实施。 1970 年左右,当 DEC 推出第二款型号 KI10 时,它被重新命名为 DECsystem-10。 TENEX 于 1972 年在 Bolt, Beranek & Newman(马萨诸塞州剑桥的一家智库)创建,作为按需分页虚拟内存操作系统的实验。 他们为 DEC PDP-10 构建了一个新的寻呼机,并创建了与之配套的操作系统。 它在学术界非常成功。 1975年,DEC推出了PDP-10的新型号KL10;他们打算只为新盒子提供他们从 BBN 获得许可的 TENEX 版本。 他们称他们的版本为 TOPS-20(他们的大写已注册商标)。 很多 TOPS-10 用户( “PDP-10 的操作系统”)反对;因此,DEC 发现自己在同一硬件上支持两个不兼容的系统——但 PDP-11 上却有 6 个! TENEX 和 TOPS-20 到版本 3,通过称为 ULTCMD 的用户代码级子例程库完成命令。 在版本 3 中,DEC 将所有这些功能和更多功能移到了监视器(Unix 类型的 (\`kernel' ),由 COMND% JSYS 访问(\`Jump to SYStem' 指令,主管调用机制 \[are my IBM roots also showing?\])。 tcsh 的创建者对该功能以及 TENEX 和 TOPS-20 的其他几个功能印象深刻,并创建了一个模仿它们的 csh 版本。 [限制](#__u9650___u5236_) ======================= 系统将参数列表限制为 ARG\_MAX 个字符。 涉及文件名扩展的命令的参数数量限制为参数列表中允许的字符数的 1/6。 命令替换可以替换的字符不能超过参数列表中允许的字符。 为了检测循环,shell 将单行中的 _alias_ 替换次数限制为 20。 [参见](#__u53C2___u89C1_) ======================= csh(1), emacs(1), ls(1), newgrp(1), sh(1), setpath(1), stty(1), su(1), tset(1), vi(1), x(1), access(2), execve(2), fork(2), killpg(2), pipe(2), setrlimit(2), sigvec(2), stat(2), umask(2), vfork(2), wait(2), malloc(3), setlocale(3), tty(4), a.out(5), termcap(5), environ(7), termio(7), 介绍 C Shell [版本](#__u7248___u672C_) ======================= 本手册记录了 tcsh 6.21.00 (Astron) 2019-05-08。 [作者](#__u4F5C___u8005_) ======================= William Joy _csh_(1) 的原作者 J.E. Kulp, IIASA, Laxenburg, Austria 作业控制和目录堆栈功能 Ken Greer, HP Labs, 1981 文件名完成 Mike Ellis, Fairchild, 1983 命令名称识别/完成 Paul Placeway, Ohio State CIS Dept., 1983-1993 命令行编辑器、提示例程、新的 glob 语法以及大量修复和加速 Karl Kleinpaste, CCI 1983-4 特殊别名、目录堆栈提取内容、登录/注销监视、预定事件以及新提示格式的想法 Rayan Zachariassen, University of Toronto, 1984 _ls-F_ 和内置 _which_ 和许多错误修复、修改和加速 Chris Kingsley, Caltech 快速存储分配器例程 Chris Grevstad, TRW, 1987 将 4.3BSD _csh_ 并入 _tcsh_ Christos S. Zoulas, Cornell U. EE Dept., 1987-94 HPUX、 SVR2 和 SVR3 的 Ports, getwd.c 的 SysV 版本、SHORT\_STRINGS 支持和 sh.glob.c 的新版本 James J Dempsey, BBN, 和 Paul Placeway, OSU, 1988 A/UX port Daniel Long, NNSC, 1988 **wordchars** Patrick Wolfe, Kuck and Associates, Inc., 1988 _vi_ 模式清理 David C Lawrence, Rensselaer Polytechnic Institute, 1989 **autolist** 和模棱两可的完成列表 Alec Wolman, DEC, 1989 提示中的换行符 Matt Landau, BBN, 1989 _~/.tcshrc_ Ray Moody, Purdue Physics, 1989 魔法空格键历史扩展 Mordechai ????, Intel, 1989 printprompt() 修复和添加 Kazuhiro Honda, Dept. of Computer Science, Keio University, 1989 自动拼写更正和 **prompt3** Per Hedeland, Ellemtel, Sweden, 1990- 各种错误修正、改进和手动更新 Hans J. Albertsson (Sun Sweden) **ampm**、 _settc_ 和 _telltc_ Michael Bloom 中断处理修复 Michael Fine, Digital Equipment Corp 扩展密钥支持 Eric Schnoebelen, Convex, 1990 Convex 支持,大量 _csh_ 错误修复,目录堆栈的保存和恢复 Ron Flax, Apple, 1990 A/UX 2.0 (重新)移植 Dan Oscarsson, LTH Sweden, 1990 对非 NLS 站点的 NLS 支持和模拟 NLS 支持,修复 Johan Widen, SICS Sweden, 1990 **shlvl**, Mach 支持, _correct-line_, 8位打印 Matt Day, Sanyo Icon, 1990 POSIX termio 支持,, SysV 限制修复 Jaap Vermeulen, Sequent, 1990-91 Vi 模式修复、扩展行、窗口更改修复、对称端口 Martin Boyer, Institut de recherche d'Hydro-Quebec, 1991 **autolist** beeping 选项,修改历史搜索以搜索从行首到光标的整个字符串。 Scott Krotz, Motorola, 1991 Minix port David Dawes, Sydney U. Australia, Physics Dept., 1991 SVR4 作业控制修复 Jose Sousa, Interactive Systems Corp., 1991 扩展的 _vi_ 修复和 _vi_ 删除命令 Marc Horowitz, MIT, 1991 ANSIfication 修复,新的 exec 哈希代码,imake 修复, _where_ Bruce Sterling Woodcock, [email protected], 1991-1995 ETA 和 Pyramid port, Makefile 和 lint 修复, **ignoreeof**\=n addition, 和 各种其他可移植性更改和错误修复 Jeff Fink, 1992 _complete-word-fwd_ 和 _complete-word-back_ Harry C. Pulley, 1992 Coherent port Andy Phillips, Mullard Space Science Lab U.K., 1992 VMS-POSIX port Beto Appleton, IBM Corp., 1992 Walking process group 修复, _csh_ 错误修复, POSIX 文件测试, POSIX SIGHUP Scott Bolte, Cray Computer Corp., 1992 CSOS port Kaveh R. Ghazi, Rutgers University, 1992 Tek, m88k, Titan and Masscomp 端口和修复。添加了自动配置支持。 Mark Linderman, Cornell University, 1992 OS/2 port Mika Liljeberg, [email protected], 1992 Linux port Tim P. Starrin, NASA Langley Research Center Operations, 1993 Read-only 变量 Dave Schweisguth, Yale University, 1993-4 新的手册页和 tcsh.man2html Larry Schwimmer, Stanford University, 1993 AFS 和 HESIOD 补丁 Luke Mewburn, RMIT University, 1994-6 在提示符中增强了目录打印,添加 **ellipsis** 和 **rprompt**。 Edward Hutchins, Silicon Graphics Inc., 1996 添加隐式 cd。 Martin Kraemer, 1997 移植到西门子 Nixdorf EBCDIC 机器 Amol Deshpande, Microsoft, 1997 移植到 WIN32(Windows/95 和 Windows/NT);编写了所有缺少的库和消息目录代码以连接到 Windows。 Taga Nayuta, 1998 颜色 ls 添加。 [致谢](#__u81F4___u8C22_) ======================= Bryan Dunlap, Clayton Elwell, Karl Kleinpaste, Bob Manson, Steve Romig, Diana Smetters, Bob Sutterfield, Mark Verber, Elizabeth Zwicky 和俄亥俄州立大学的所有其他人寻求建议和鼓励 网络上所有的人,为了忍受,报告错误,并建议每个版本的新添加 Richard M. Alderson III, 写了 \`T in tcsh' 部分 8 May 2019 Astron 6.21.00
    概要
    描述
    参数列表处理
    启动和关闭
    编辑
    命令行编辑器 (+)
    完成和补全 (+)
    拼写更正 (+)
    编辑器命令 (+)
    词汇结构
    替换
    历史替代
    别名替换
    变量替换