Questão O que 'fonte' faz?


$ whatis source
source: nothing appropriate.
$ man source
No manual entry for source
$ source
bash: source: filename argument required
source: usage: source filename [arguments]

Ela existe e é executável. Por que não há documentação sobre isso no Ubuntu? O que isso faz? Como posso instalar documentação sobre isso?


486


origem


Relacionado: superuser.com/questions/176783/… - lesmana
você esqueceu $ type source  source is a shell built-in - bnjmn
Minha concha retornou $ whatis source  source (1) - bash built-in commands, see bash(1). Além disso, man source leva-me ao BASH_BUILTINS(1) páginas man. Isso está no Fedora btw, não tenho idéia de porque esses pacotes do Debian estão desdobrados (ou mal). - arielnmz
@lesmana, ótimo link. que resposta vinculada é a resposta mais completa a essa pergunta. - Scott
Tente "fonte de ajuda" - Jasser


Respostas:


source é um comando interno do shell bash que executa o conteúdo do arquivo passado como argumento, na concha atual. Tem um sinônimo em . (período).

Sintaxe

. filename [arguments]

source filename [arguments]

396



É source um comando específico bash ou outros shells também? (Eu estou pedindo para obter tags direito sobre a questão ...) - Jonik
Até onde sei, source estava presente na casca de Bourne e, portanto, provavelmente presente em todos os seus descendentes. en.wikipedia.org/wiki/Bourne_shell. Eu sei que nem todas as conchas têm source comando, menos certo sobre quais shells o contêm. - nagul
@nagul, source não estava presente no shell Bourne, é uma extensão do GNU que veio muito mais tarde. A sintaxe original e ainda portável (POSIX) é usar o comando "ponto", ou seja, . em vez de. Eu pessoalmente nunca uso source dado o fato de que é mais longo digitar e não tem valor agregado. Eu acho que o seu principal objetivo é tornar os scripts mais legíveis para iniciantes. - jlliagre
@jlliagre meu pessoal "explica por que tem fonte" é que source não é apenas mais descritivo, mas parece algo diferente de um erro de digitação. Eu tive pessoas pulando o período / ponto quando eu enviar comandos de tecnologia no e-mail. - Rich Homolka
Um uso comum para este comando é para um script de shell source em um "arquivo de configuração" que contém principalmente atribuições de variáveis. As atribuições de variáveis ​​controlam as coisas que o resto do script faz. Claro, um bom roteiro irá definir variáveis ​​para padrões sensíveis antes do sourceou, pelo menos, verifique os valores válidos. - LawrenceC


Seja cuidadoso! ./ e source estamos não exatamente o mesmo.

  • ./script executa o script como um arquivo executável, iniciando um novo shell para executá-lo
  • source script lê e executa comandos do nome do arquivo no concha atual meio Ambiente

Nota: ./script não é . script, mas . script == source script

https://askubuntu.com/questions/182012/is-there-a-difference-between-and-source-in-bash-after-all?lq=1


226



Você está misturando ./command e. roteiro. source-command é o mesmo que.-command. Usando ./meh diz executar script / binário chamado meh no diretório atual e não tem nada a ver com source /. -comando. Como explicado em resposta no seu link. - Joakim Elofsson
@JoakimElofsson É mencionado no link, mas vou modificar a resposta para evitar mal-entendidos. Por favor corrija isso. - damphat
Melhor resposta. Obrigado! - JedatKinports
É importante que a resposta aceita também aponte para esta, porque por um momento eu pensei que ./ == source == . - Daniel F


É útil conhecer o comando 'type':

> type source
source is a shell builtin

sempre que algo é um shell embutido é hora de fazer man bash.


81



Sempre saiba algo novo ao ler man )
Você também pode usar help {builtin-name}, isto é help source. - LawrenceC
help não funciona em todos os lugares (pelo menos em zsh). type faz. - kumar_harsh
Para amplificar: se você está usando bash, e se você sabe (talvez através de 'type') é um comando interno, então 'help' irá levá-lo diretamente para o parágrafo de documentação que você quer, sem percorrer 4.184 linhas de ' homem bash 'texto. - Ron Burk


. (um período) é um comando interno do shell bash que executa os comandos de um arquivo passado como argumento, no shell atual. 'source' é um sinônimo para '.'.

Da página do man do Bash:

. filename [arguments]
source filename [arguments]
       Read  and  execute  commands  from filename in the current shell
       environment and return the exit status of the last command  exe‐
       cuted from filename.  If filename does not contain a slash, file
       names in PATH are used to find the  directory  containing  file‐
       name.   The  file  searched  for in PATH need not be executable.
       When bash is  not  in  posix  mode,  the  current  directory  is
       searched  if no file is found in PATH.  If the sourcepath option
       to the shopt builtin command is turned  off,  the  PATH  is  not
       searched.   If any arguments are supplied, they become the posi‐
       tional parameters when  filename  is  executed.   Otherwise  the
       positional  parameters  are unchanged.  The return status is the
       status of the last command exited within the  script  (0  if  no
       commands  are  executed),  and false if filename is not found or
       cannot be read.

34





'fonte' é a versão longa de '.' comando. No prompt bash, pode-se fazer:

source ~/.bashrc

recarregar sua configuração de bash (alterada?) para o bash atual em execução.

Versão curta seria:

. ~/.bashrc

A página man:

. filename [arguments]
source filename [arguments]
    Read and execute commands from filename in the current shell environment and
    return the exit status of the last command executed from filename. If 
    filename does not contain a slash, file names in PATH are used to find the
    directory containing filename. The file searched for in PATH need not be
    executable. When bash is not in posix mode, the current directory is
    searched if no file is found in PATH. If the sourcepath option to the short
    builtin command is turned off, the PATH is not searched. If any arguments
    are supplied, they become the positional parameters when filename is
    executed. Otherwise the positional parameters are unchanged. The return 
    status is the status of the last command exited within the script (0 if no
    commands are executed), and false if filename is not found or cannot be
    read. 

20



Essa deve ser a resposta aceita. - Peter Mortensen


source comando executa o script fornecido (permissão executável é não obrigatório) no atual ambiente shell, enquanto ./ executa o fornecido executável roteiro em um Novo Concha.

source comando tem um sinônimo . filename.

Para deixar isso mais claro, dê uma olhada no seguinte script, que define o alias.

criar alias

#! /bin/bash

alias myproject='cd ~/Documents/Projects/2015/NewProject'

Agora temos duas opções para executar este script. Mas com  uma opção, o alias desejado para o shell atual pode ser criado entre essas duas opções.

Opção 1: ./make_alias

Torne o script executável primeiro.

chmod +x make_alias

Executar

./make_alias

Verificar

alias

Saída

**nothing**

Ops! O alias desapareceu com o novo shell.

Vamos com a segunda opção.

Opção 2: source make_alias

Executar

source make_alias

ou

. make_alias

Verificar

alias

Saída

alias myproject='cd ~/Documents/Projects/2015/NewProject'

Sim Alias ​​está definido.


17





Em caso de dúvida, a melhor coisa a fazer é usar o info comando:

[root@abc ~]# info source

BASH BUILTIN COMMANDS
       Unless otherwise noted, each builtin command documented in this section
       as accepting options preceded by - accepts -- to signify the end of the
       options.   The  :, true, false, and test builtins do not accept options
       and do not treat -- specially.  The exit, logout, break, continue, let,
       and  shift builtins accept and process arguments beginning with - with-
       out requiring --.  Other builtins that accept  arguments  but  are  not
       specified  as accepting options interpret arguments beginning with - as
       invalid options and require -- to prevent this interpretation.
       : [arguments]
              No effect; the command does nothing beyond  expanding  arguments
              and  performing any specified redirections.  A zero exit code is
              returned.

        .  filename [arguments]
       source filename [arguments]
              Read and execute commands from filename  in  the  current  shell
              environment  and return the exit status of the last command exe-
              cuted from filename.  If filename does not contain a slash, file
              names  in  PATH  are used to find the directory containing file-
              name.  The file searched for in PATH  need  not  be  executable.
              When  bash  is  not  in  posix  mode,  the  current directory is
              searched if no file is found in PATH.  If the sourcepath  option
              to  the  shopt  builtin  command  is turned off, the PATH is not
              searched.  If any arguments are supplied, they become the  posi-
              tional  parameters  when  filename  is  executed.  Otherwise the
              positional parameters are unchanged.  The return status  is  the
              status  of  the  last  command exited within the script (0 if no
              commands are executed), and false if filename is  not  found  or
              cannot be read.

5



Você poderia fornecer mais do que apenas RTFM? - Peter Mortensen


Digite o comando "help source" no seu shell.

Você receberá uma saída assim:

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.

3