Как мне найти помощь для точечной команды `.` в * nix?


21

Мне нужно найти помощь для команды точки, .например, в . ./my_script.sh(я имею в виду первую точку.)

Я уже пытался найти справочную страницу, используя man .и man \.. Как я могу отобразить справочную страницу, в которой объясняется использование команды .?


14
@ C0deDaedalus: каноническое название для "." ПОЛНАЯ ОСТАНОВКА. То, что люди называют это, зависит от того, где они были воспитаны.
RedGrittyBrick

5
Просто беги:help .
kenorb

2
В документах это называется dot. См. Формальную спецификацию на pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html
Чарльз Даффи,

11
@jamesqf .- это команда, в частности встроенная оболочка. В Bash это эквивалентно source.
wjandrea

4
@jamesqf: .это POSIX, а не только bash. Например, это также в zsh и ksh.
MSalters

Ответы:


79

Прежде всего, вы должны вызвать type ., вы, вероятно, получите что-то вроде:

. is a shell builtin

Встроенные компоненты являются частью вашей оболочки, у них нет собственных страниц руководства. Некоторые из них могут показаться, что они есть, например, echoвстроенный в Bash, но, скорее всего, есть отдельный исполняемый файл, как /bin/echoв вашей системе, и в этом случае man echoотносится к последнему . Эти два echo, вероятно, не являются строго эквивалентными.

Ваша оболочка может предоставлять информацию о любой встроенной функции через helpвстроенную систему; попробовать help help, help typeи , наконец:

help .

Встроенные файлы также могут быть перечислены на странице руководства вашей оболочки. Например, (в моем Debian) встроенные функции Bash включены непосредственно man bash, но для встроенных Zsh-команд man zshмне нужно запустить man zshbuiltins. В общем, раковины могут или не могут объяснить их встроенные функции.


7
+1 для указания, что .это встроенная оболочка, и это должно быть помечено как ответ, потому что OP спрашивает how to find help for . in *nix ?.
C0deDaedalus

7
+1 для использования, type .чтобы продемонстрировать, что некоторые команды являются встроенными командами оболочки.
Роджер Липскомб

1
В большинстве Debian встроенные функции Bash также извлекаются на bash-builtins(1)страницу руководства, которая имеет более удобный размер.
Тоби Спейт

Кроме того, вызов «type» работает, только если вы используете оболочку, которая имеет встроенный «type». Если вы используете tcsh, введите "type". дает тип: Команда не найдена.
jamesqf

1
Даже . --helpработает
Digital Trauma

25

Попробуйте использовать man shили man bashили справочную страницу для любой оболочки, которую вы используете. (Возможно man $SHELL.)

Официально это называется не команда «точка», а sourceкоманда. Поиск слова sourceможет быть полезным.

например, bash man page (поиск по "каждой встроенной команде"), и вы быстро найдете документацию.

Что касается объяснения использования, я могу сделать это прямо здесь. Я просто буду называть это sourceкомандой, признавая, что ее можно сокращать до периода, когда вы используете некоторые оболочки, и с некоторыми оболочками эта команда может потребоваться (потому что точка может быть распознана, но все слово sourceможет не быть).

Если вы используете sourceкоманду, ваша оболочка прочитает каждую строку из файла сценария и попытается выполнить ее. Вам нужно разрешение на чтение файла. (Неважно, есть ли у вас разрешения на «выполнение».) Если вы изменяете переменную, это может повлиять на вашу текущую оболочку.

Если, с другой стороны, вы просто пытаетесь выполнить файл, то ваша оболочка попросит операционную систему выполнить этот запрос. Это потребует разрешения «выполнить». (В некоторых системах, таких как OpenBSD, для этого вам не понадобятся разрешения на «чтение». В других системах, включая многие варианты Unix, вам это понадобится.) Возможно, файл должен начинаться с соответствующего заголовка (например, #!/bin/sh), чтобы рабочая Система распознает это как файл сценария. Операционная система выполнит копию запрошенной оболочки и скажет этой оболочке запустить содержимое скрипта. Если среда оболочки изменяется (например, переменная получает новое значение, рабочий каталог изменяется (с помощью  cd), дескриптор файла перенаправляется (с помощью exec) и т. д.), это повлияет только на вложенную оболочку, которая была вызвана для сценария, и не может изменить среду в родительской оболочке, которая вызывала файл сценария.


15
Это только sourceв bash. В спецификации POSIX это называется «команда точки» (и sourceпсевдоним не поддерживается).
Чарльз Даффи

1
Сценарию нужны разрешения на чтение, иначе интерпретатор не сможет получить к нему доступ. См. Может ли скрипт быть исполняемым, но не читаемым?
wjandrea

1
Выполнение сценария не открывает вложенную оболочку, а представляет собой обычный дочерний процесс, аналогично запуску скомпилированной программы. См. Этот ответ на вопрос «Является ли вложенная оболочка тем же, что и дочерняя оболочка?»
wjandrea

1
Итак, я печатаю man bashи что тогда /.? Не очень полезно. /sourceбыло бы полезно, но для этого вам нужно знать это .и sourceто же самое.
Joker_vD

1
Я нашел свой пункт « Что касается объяснения использования ...» немного вводит в заблуждение, так как это означает , что она может быть .и это может быть source, но , как @CharlesDuffy уже упоминалось, это всегда . в любой POSIX-совместимой оболочке и имеет только псевдоним sourceв одна оболочка.
Том Фенек,

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, который дает вам все пути к исполняемому файлу, который вы называете, и его man-страниц (если он существует в нескольких путях).


1
Хороший намек, но, кажется, он работает не везде. Например, в AIX с помощью ksh whatis .возвращаетсяman: 0703-307 . is not found.
aturegano

4
whatis .ничего не возвращает на Ubuntu 16.04
Вадим Котов

И ".: Ничего не подходит". на 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переменных, установленных внутри скрипта, сохраняется после его завершения.


2
В каком дистрибутиве (ах) man sourceработает? Не в моем Debian, отсюда и вопрос.
Камиль Мачоровски

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

Это .синоним команды оболочки, sourceпоэтому в bash ее синтаксис отображается как ...

help source

Он работает точно так же, как includeи importкоманды в других языках, в том смысле, что он читает целевой файл и интерпретирует его, как если бы он был частью текущего скрипта. Таким образом, этот файл будет выполняться полностью перед командами в остальной части текущего сценария.

Обычно он должен находиться в начале текущего скрипта и чаще всего используется для загрузки переменных и / или определений функций.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.