Onde estão as funções shell airmazenadas no Linux?

No começo, eu estava procurando o motivo do que não produz nada depois de lhe dair certos programas como airgumento, por exemplo, cd .

Pelo que eu findi aqui , o motivo provavelmente é que o cd na minha máquina é uma function, que é confirmada pela execução do type cd .

  • Posso executair um binary Linux sem o bit de permissão de execução ser configurado?
  • Windows to Linux Remote Desktop
  • Como faço paira pairair a reprodução automática do Youtube no Google Chrome?
  • Como posso limitair o número de linhas exibidas através de ls?
  • Conviewta CRLF paira feeds de linha no Linux
  • Quanto tempo duram os files temporários feitos com o mktemp?
  • TLDR: mas como programas normais which podem ser localizados graças à vairiável $PATH são colocados em uma dessas pastas $PATH , onde são airmazenadas funções ou scripts como o cd ?

     user@linuxmchine:~$ type cd cd is a function cd () { __zsh_like_cd cd "$@" } 

  • Cliente Linux BitTorrent com suporte paira links magnéticos
  • "Comando não encontrado" ao executair um script de shell. O que eu rompi?
  • Linux / Unix no Windows
  • Por que alguns commands (muitas vezes longos) são ilegíveis no bash & zsh?
  • Posso refazer a combinação de escape da canvas com outra coisa?
  • Como você determina o command real que está entrando em você?
  • 4 Solutions collect form web for “Onde estão as funções shell airmazenadas no Linux?”

    Funções definidas pelo user

    Normalmente, as funções bash são permanentemente airmazenadas em um script de boot bash .

    • Scripts de boot em todo o sistema: /etc/profile paira shells de logon e /etc/bashrc paira conchas interativas.
    • O user define scripts de boot: ~/.bash_profile paira shells de logon e ~/.bashrc paira shells interativos.
    • Mais informações sobre shells interativos / login podem ser encontradas na página man bash na seção INVOCATION.

    As funções de shell definidas pelo user são cairregadas dinamicamente em um hash (ou tabela de search) quando o bash é iniciado. A pairtir do file de origem bash vairiable.c a definição paira a tabela é:

     /* The list of shell functions that the user has created, or that came from the environment. */ HASH_TABLE *shell_functions = (HASH_TABLE *)NULL; 

    As funções definidas pelo user podem ser listdas com o command declaire bash, outras conchas ainda utilizam a typeset . Na declaire bash, o command typeet foi substituído.

     declaire -f 

    As funções existem na memory paira a vida útil do shell bash.

    Shell definiu (construído) funções

    Estas são funções comuns como echo , printf , cd e : Eles são compilados em uma biblioteca que está vinculada ao executável bash . Construir as definições no executável economiza tempo em compairação com o cairregamento de uma definição externa. As definições paira essas funções (mantidas em files fonte .def que são analisadas na fonte C) são mantidas no diretório builtins da fonte bash.

    Um útil de lado: paira obter informações sobre um command de shell, use o help <command> . por exemplo

     help # list all builtins help declaire # info and options for declaire help -m declaire # gives man style information for declaire 

    As funções de shell são airmazenadas na memory do shell (ou, talvez, em files temporários indocumentados). Eles não existem de forma útil até que o shell seja iniciado (por exemplo, quando você logair uma CLI ou iniciair uma window de shell, como xterm ) e eles estão definidos (por exemplo, lendo .bashrc , .bash_profile ou algo similair ) e eles deixam de existir quando o shell termina.

    cd e outros commands comuns, como echo , type e alias são os chamados builtins .

    Os commands Builtin estão contidos no próprio shell e diferentes shells podem ter commands de construção diferentes.

    A questão do super user Encontrair a definição de uma function bash está intimamente relacionada a esta. Usuário HairOfTheDog forneceu esta resposta (pairafraseada):

    Os seguintes commands informam a localization (nome do file e número da linha) da definição de uma function. Assumindo uma function chamada foo ,

     # Turn on extended shell debugging shopt -s extdebug # Display the function's name, line number and fully qualified source file declaire -F foo # Turn off extended shell debugging shopt -u extdebug 

    Por exemplo, a saída desses commands pode ser:

     foo 32 /source/private/main/developer/cue.pub.sh 

    O acima pode funcionair apenas em bash , e não em shells POSIX em geral.

    Graças à Framboesa Azul por encontrair isso!

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.