Что значит `. / путь / команда` делать? (Пробел после точки, абсолютный путь)

7

Из этого руководства по завершению Bash мы узнаем, что для того, чтобы Bash выполнил автозаполнение, нужно выполнить . /etc/etc/bash_completion.d/foobar( запишите пробел после. ), чтобы завершение Bash работало.

$ /etc/bash_completion.d/ssh
bash: /etc/bash_completion.d/ssh: Permission denied
$ . /etc/bash_completion.d/ssh
$ ls -l /etc/bash_completion.d | grep ssh
-rw-r--r-- 1 root root   297 Jan 28 18:04 ssh

Это .ярлык для sourceкоманды? Если нет, то что это? Это невозможно Google для, man sourceвозвращает ничего, и apropos sourceи info sourceдать так много ненужной информации , что я не могу сказать , если то , что я ищу в там. Как я мог бы даже начать RTFM, чтобы найти ответ на этот вопрос сам?

dotancohen
источник
Прочтите bashсправочную страницу, так как это встроенная команда, ищите объяснение источника, ее трудно пропустить.
Энтон
3
"Является .ли ярлык для исходной команды?" - это действительно наоборот: .это команда и sourceпсевдоним совместимости (для совместимости с csh). Обратите внимание, что sourceне существует только в стандартной оболочке POSIX bourne ..
Селада
Часто, когда это просто, оно остается скрытым ... Это может быть так же просто, как написать « помощь »: посмотрите ниже ;)
Hastur

Ответы:

14

Да .идентично sourceфункции.

Как всегда, первая ссылка - это man bashстраница руководства, где вы можете подтвердить свое первоначальное предположение, выполнив поиск/ source

... функция оболочки или скрипт, выполняемый с помощью .или источника ...

это первая ссылка, но чуть дальше вы найдете раздел Команды Shell Builtin

. filename [arguments]
source filename [arguments]
Чтение и выполнение команд из имени файла в текущей среде оболочки и возвращение состояния выхода последней команды, выполненной из имени файла. Если имя файла не содержит косую черту, имена файлов в PATH используются для поиска каталога, содержащего имя файла. Файл, который ищется в PATH, не обязательно должен быть исполняемым. Когда bash не находится в режиме posix, текущий каталог ищется, если в PATH не найдено ни одного файла. Если опция sourcepath для встроенной команды shopt отключена, PATH не ищется. Если предоставляются какие-либо аргументы, они становятся позиционными параметрами при выполнении имени файла. В противном случае позиционные параметры не изменяются. Статус возврата - это статус последней команды, вышедшей из скрипта (0, если команды не выполняются), и false, если имя файла не найдено или не может быть прочитано.

Тот факт, что это встроенная функция bash, является причиной того, что источник не имеет своей собственной страницы руководства, поэтому по поводу сбоя.

HBruijn
источник
Спасибо, я никогда бы не подумал выполнить man bash, но я добавлю это к моим методам «попробуй перед публикацией». Похоже, что эта страница займет у меня месяцы, чтобы полностью ее осмыслить и разобраться, я в хорошем настроении!
Dotancohen
Как всегда первая ссылка есть man bash? Я уверен, что если у меня возникнут проблемы с sshкомандой, это не сильно мне поможет. Это больше ссылка последней инстанции.
Anthon
Если вы пишете сценарии bash и исследуете автозаполнение, то да, конечно. Но это может быть голос опыта.
HBruijn
Команда dot была в оболочке Bourne и стандартизирована в оболочке POSIX. Исходная команда была аналогом в оболочке C и добавлена ​​в Bash (и не стандартизирована POSIX).
Джонатан Леффлер
для bash buildins вы можете использовать help, как в help sourceилиhelp .
Carlos Campderrós
4

Ваши ответы вкратце:

  1. . absolute_path/mycommand Исходный файл сценария, mycommandкоторый находится в каталоге absolute_path/. Для дальнейших ссылок читайте здесь
  2. Да . и sourceэквивалентны.
  3. При необходимости спросите helpу bash shellсебя. У вас будет ответ за встроенные команды.

Несколько слов.
Часто самый простой способ тоже самый неуловимый: мы не думали, что можем обратиться helpк самой оболочке , когда команды определены внутри.
С type .и type sourceмы можем заметить, что это встроенные команды.

Hastur@Cthulhu:~> type . source  
. is a shell builtin  
source is a shell builtin

Как только мы это узнаем, helpмы сможем получить некоторую информацию о них.
Команда helpбез параметра из подсказки дает нам:

GNU bash, версия 4.1.2 (1) ...
Эти команды оболочки определены внутри .
Введите, helpчтобы увидеть этот список. Введите , help nameчтобы узнать больше о функции имени .
Используйте, info bashчтобы узнать больше о оболочке в целом.
Используйте man -k' orinfo ', чтобы узнать больше о командах, которых нет в этом списке.

Между тем, help .как и help sourceвы получите такую ​​же идентичные помощь:

source: source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

«Очевидным является то, что никогда не видели, пока кто-то не выразит это просто». K.Gibran

Hastur
источник
1

Эта точка "." означает чтение и выполнение команд из аргумента имени файла в текущем контексте оболочки. Это эквивалентно источнику. Этот стиль из оболочки Bourne, пожалуйста, обратитесь к http://ss64.com/bash/source.html

user94000
источник