Як знайти допомогу для команди "." У * nix?


21

Мені потрібно знайти допомогу для .такої команди , як у . ./my_script.sh(я маю на увазі перший пункт.)

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


14
@ C0deDaedalus: канонічна назва для ". є ПОВНИЙ СТОП. Те, що люди називають, залежить від того, де їх виростили.
RedGrittyBrick

5
Просто запустіть:help .
kenorb

2
У документах, однак, це називається dot. Дивіться офіційну специфікацію на веб-
Чарльз Даффі

11
@jamesqf .- це команда, зокрема вбудована оболонка. У Bash це рівнозначно source.
wjandrea

4
@jamesqf: .це POSIX, а не просто баш. Наприклад, це також в zsh і ksh.
MSalters

Відповіді:


25

Спробуйте скористатися man shабо man bashдовідковою сторінкою для будь-якої оболонки, яку ви використовуєте. (Можливо man $SHELL.)

Це офіційно називається не командою «точка», а sourceкомандою. Пошук слова sourceможе бути корисним.

наприклад, сторінка bash man (пошук "кожної вбудованої команди"), і ви швидко знайдете документацію.

Що стосується пояснення використання, я можу це зробити прямо тут. Я просто буду називати це sourceкомандою, визнаючи, що її можна скоротити лише до періоду, коли ви використовуєте деякі оболонки, і з деякими оболонками, яка може знадобитися командою (бо крапка може бути розпізнана, але все слово sourceможе не бути).

Якщо ви використовуєте sourceкоманду, ваша оболонка прочитає кожен рядок із файлу сценарію та спробує виконати її. Вам потрібні дозволи "прочитати" файл. (Не має значення, якщо у вас є "виконати" дозволи.) Якщо ви зміните змінну, це схильне впливати на вашу поточну оболонку.

Якщо, з іншого боку, ви просто спробуєте виконати файл, тоді ваша оболонка попросить операційну систему подбати про цей запит. Для цього знадобляться дозволи "виконати". (У деяких системах, таких як OpenBSD, для цього вам не знадобляться дозволи на "читання". У інших системах, включаючи безліч варіацій Unix, вам знадобиться.) Файлу, можливо, потрібно буде починати з відповідного заголовка (наприклад, #!/bin/sh), тому операційна система розпізнає це як файл сценарію. Операційна система виконає копію запитуваної оболонки і скаже цій оболонці для запуску вмісту скрипту. Якщо середовище оболонки змінено (наприклад, змінна отримує нове значення, робочий каталог змінюється (з  cd), дескриптор файлу перенаправляється (з exec) і т. д.), він впливатиме лише на під-оболонку, яку викликали для сценарію, і не може змінити середовище в батьківській оболонці, яка викликала файл сценарію.


15
Це лише sourceв баші. У специфікації POSIX вона називається "команда точки" (а sourceпсевдонім не підтримується).
Чарльз Даффі

1
Сценарію потрібні дозволи на читання, інакше перекладач не може отримати доступ до нього. Див. Чи може сценарій бути виконаним, але не читабельним?
wjandrea

1
Виконання сценарію не відкриває підрозділ, а просто звичайний дочірній процес, як і запуск компільованої програми. Дивіться цю відповідь на тему "Чи підрозрядник те саме, що і дочірня оболонка?"
wjandrea

1
Отже, я набираю man bashі що тоді /.,? Не дуже корисно. /sourceбуло б корисно, але для цього вам слід знати це .і sourceте саме.
Джокер_vD

1
Я знайшов ваш абзац "Що стосується пояснення використання ..." трохи оманливим, оскільки це означає, що це може бути .і воно може бути source, але як уже згадувалося @CharlesDuffy, він завжди . знаходиться в будь-якій оболонці, сумісній POSIX і має лише псевдонім sourceу одна оболонка.
Том Фенех

79

Перш за все, ви повинні закликати type ., ви, ймовірно, отримаєте щось на кшталт:

. is a shell builtin

Вбудовані частини вашої оболонки, вони не мають власних сторінок з інструкціями. Деякі з них можуть здатися, що вони є, хоча, наприклад echo, це вбудований в Bash, але, швидше за все, є окремий виконуваний файл, як /bin/echoу вашій системі, і в цьому випадку man echoвідноситься до останнього . Ці два echos, ймовірно, не є абсолютно рівнозначними.

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

help .

Вбудовані також можуть бути вказані на сторінці керівництва вашої оболонки. Напр. (У моєму Debian) Bash вбудовані вбудовані безпосередньо в man bash, але для Zsh вбудовані man zshпідказує мені запустити man zshbuiltins. Як правило, оболонки можуть чи не пояснюють їх вбудовані елементи.


7
+1 для вказівки, що .є вбудованою оболонкою, і це слід позначити як відповідь, тому що ОП запитує how to find help for . in *nix ?.
C0deDaedalus

7
+1 для використання type .для демонстрації того, що деякі команди є вбудованими оболонками.
Роджер Ліпскомб

1
У більшості Debian, вбудовані в Bash також витягуються на сторінку bash-builtins(1)керівництва, яка має більш зручний розмір.
Toby Speight

Крім того, виклик "type" працює лише в тому випадку, якщо ви використовуєте оболонку, яка має вбудований "type". Якщо ви випадково використовуєте tcsh, "наберіть". дає "type: Command not found."
jamesqf

1
Навіть . --helpпрацює
Digital Trauma

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;)

Він включає чудові, які - вказують на те, який виконавчий файл називається, і який дає вам всі шляхи до виконуваного вами імені, і це сторінки сторінки (якщо вони існують у кількох шляхах).


1
Хороший натяк, але, здається, він працює не скрізь. Наприклад, у AIX з ksh whatis .повертаєтьсяman: 0703-307 . is not found.
aturegano

4
whatis .нічого не повертає на Ubuntu 16.04
Вадим Котов

І ".: Нічого підходящого." на OpenSuSE за допомогою tcsh.
jamesqf

2
Так, із власної чоловічої сторінки: "Що - відобразити однорядкові описи сторінки вручну". Тож, здається, це дуже-дуже коротка версія людини.
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, мабуть, належним чином ...
Хастур,

0

.Є синонімом оболонки sourceкоманди і тому в Баш , його синтаксис відображається ...

help source

Він функціонує точно так само, як includeі importкоманди іншими мовами тим, що він читає цільовий файл і інтерпретує його так, ніби він був частиною поточного сценарію. Таким чином, цей файл буде виконаний у повному обсязі перед командами в решті поточного сценарію.

Зазвичай це має бути на початку поточного сценарію і найчастіше використовується для завантаження змінних та / або визначень функцій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.