如何在* nix中找到点命令`.`的帮助?


21

我需要寻找点命令的帮助,.例如in . ./my_script.sh(我的意思是第一点。)

我已经尝试使用man .和找到一个手册页man \.。如何显示一个手册页,其中解释了命令的使用.


14
@ C0deDaedalus:“。” 的规范名称。完全停止。人们所说的取决于他们的成长点。
RedGrittyBrick

5
跑步:help .
kenorb

2
但是,在文档中,它被称为dot。请参阅pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html上
Charles Duffy

11
@jamesqf .是一个命令,特别是shell内置的。在Bash中它相当于source
wjandrea

4
@jamesqf:.是POSIX,而不仅仅是bash。例如,它也在zsh和ksh中。
评论时间19年

Answers:


25

尝试使用man sh或者man bash手册页来查找正在使用的shell。(也许吧man $SHELL。)

这是官方不称为“点”命令,而是source命令。搜索单词source可能会有所帮助。

例如,bash手册页(搜索“each builtin command”),你会很快找到文档。

至于解释用途,我可以在这里做到这一点。我将把它作为source命令引用,认识到它可以缩写为你使用一些shell时的一段时间,并且有一些shell可能需要命令(因为dot可能被识别但是整个单词source可能不会是)。

如果使用该source命令,shell将从脚本文件中读取每一行,并尝试执行它。您需要对文件具有“读取”权限。(如果您具有“执行”权限,则无关紧要。)如果修改变量,则容易影响当前的shell。

另一方面,如果您只是尝试执行该文件,那么您的shell将要求操作系统处理此请求。这将需要“执行”权限。(在某些系统上,比如OpenBSD,你不需要“读取”权限。在其他系统上,包括许多Unix变种,你会。)文件可能需要以适当的头开始(例如#!/bin/sh),以便操作系统将此识别为脚本文件。操作系统将执行所请求的shell的副本,并告诉该shell运行脚本的内容。如果更改了shell环境(例如,变量获取新值,则更改工作目录(带  cd),重定向文件描述符(带有 exec),等等,它只会影响为脚本调用的子shell,并且不能修改调用脚本文件的父shell中的环境。


15
这只是source在bash中。在POSIX规范中,它被称为“点命令”(并且source不支持别名)。
查尔斯达菲

1
脚本需要读取权限,否则解释器无法访问它。请参阅脚本是否可执行但不可读?
wjandrea

1
执行脚本不会打开子shell,而只是打开一个普通的子进程,就像运行已编译的程序一样。看到这个答案“子壳是否与子壳相同?”
wjandrea

1
所以,我输入man bash然后是什么,/.?不是很有用。/source会有用,但为此你需要知道.并且source是同样的事情。
Joker_vD

1
我发现你的款“至于解释的使用......”有些误导,因为它意味着它可能.,它可能source,但@CharlesDuffy已经提到的,它总是 .在任何兼容POSIX的shell,只有具有别名source中一个壳。
汤姆费内克

79

首先你应该调用type .,你可能会得到类似的东西:

. is a shell builtin

Builtins是shell的一部分,它们没有自己的手册页。其中有些可能看起来有它们,例如,它echo是Bash内置的,但很可能/bin/echo在你的系统中有一个单独的可执行文件,在这种情况下man echo是指后者。这两个echo可能不是严格相同的。

你的shell可以通过help内置提供有关任何内置的信息; 尝试help helphelp type最后:

help .

Builtins也可能列在shell的手册页中。例如(在我的Debian中)Bash builtins直接覆盖man bash,但对于Zsh builtins man zsh告诉我运行man zshbuiltins。一般来说,炮弹可能会也可能不解释它们的内置物。


7
用于指向.内置shell的+1 ,并且应该将其标记为答案,因为OP要求how to find help for . in *nix ?
C0deDaedalus

7
+1用于type .演示某些命令是shell内置函数。
Roger Lipscombe

1
在大多数Debian上,Bash内置bash-builtins(1)函数也被提取到手册页面,这是一个更方便的大小。
Toby Speight

此外,调用“类型”仅在您使用内置“类型”的shell时才有效。如果你碰巧使用tcsh,“输入”。给出“type:Command not found”。
jamesqf

1
甚至是. --help作品
数字创伤

6

没有人提到它,因为它经常被遗忘。

你最大的线索来自有用的命令whatis

tim@musha ~ $ whatis .
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis source
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis bash
bash (1)             - GNU Bourne-Again SHell
tim@musha ~ $ whatis lynx
lynx (1)             - a general purpose distributed information browser for the World Wide Web
tim@musha ~ $ whatis linux
linux: nothing appropriate.
tim@musha ~ $ whatis whatis
whatis (1)           - display one-line manual page descriptions

编辑:

有些人在评论中指出,这不是一些发展 - 也许它是一个可安装的软件包,或启用了一些 - 我默认在gentoo中使用它;)

它包括精彩的 - 它告诉你哪个可执行文件被调用,whereis为你提供了你所命名的可执行文件的所有路径,以及它的手册页(如果它存在于多个路径中)。


1
良好的暗示,但它似乎无处不在。例如,在带有ksh的AIX中,whatis .返回man: 0703-307 . is not found.
aturegano

4
whatis .在Ubuntu 16.04上没有返回任何内容
Vadim Kotov

并且“。:没有什么合适的。” 在OpenSuSE上使用tcsh。
jamesqf

2
啊,从它自己的手册页:“whatis - 显示单行手册页描述。” 所以它似乎是一个非常短的版本的人。
Xen2050

更兼容的选项可能是:apropos(应该与运行“man -k”相同)。对于“。” 或者“来源”(这是“资源”一词的一部分)由于误报太多而不能很好地工作,但可能适用于你的其他例子(bash,lynx和whatis)。在Debian Linux上:“ whatis ..: nothing appropriate.在OpenBSD上给出了“ ”,它产生了47行输出。对于这个特定的例子(whatis .在Gentoo中使用“ ”),结果可能恰好是非常好的(意味着这种技术通常对许多其他示例场景不那么有用)。
TOOGAM

4

man source 将显示您需要的解释。

该点与source命令相同。

source 在当前shell而不是子shell中执行脚本(这是通常的方式)。

使用source该脚本中设置变量的脚本完成后得以保留。


2
什么发行版man source有效?不在我的Debian中,因此问题。
Kamil Maciorowski

1
它适用于CentOS 6.5。我猜这与bash的版本有关。在我的情况下是4.1.2(1)
jcbermu

@jcbermu,没有版本的bash为source上游提供单独的手册页- 这更像是CentOS所做的事情。
查尔斯达菲

在我的系统,man source给你man bash_builtins,这并不能说明什么,而是指你bash(1)
斯科特

1
在我的系统(Ubuntu LTS)man source给我source(3tcl)... type command然后如果命令是内置help command可能是正确的方式...
Hastur

0

.是shell source命令的同义词,所以在bash中,它的语法显示为......

help source

它的功能includeimport其他语言中的和命令完全相同,因为它读取目标文件并将其解释为它是当前脚本的一部分。因此,该文件将在当前脚本的其余部分中的命令之前完整地执行。

它通常应位于当前脚本的开头,并且通常用于加载变量和/或函数定义。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.