AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1526978
Accepted
WesternGun
WesternGun
Asked: 2024-09-16 21:00:06 +0800 CST2024-09-16 21:00:06 +0800 CST 2024-09-16 21:00:06 +0800 CST

Bash 5 - função fantasma: removida, mas ainda disponível no cache do Bash - exploração? bug?

  • 772

GNU Bash versão 5.1, WSL, Ubuntu 22.04.3 LTS.

$ bash -version
bash -version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
  1. Editar .bashrc, criar função foo:
foo() {
    echo 'GHOST'
}

salvar e sair

  1. Fonte .bashrc:
. .bashrc

Agora fooé uma função válida:

type foo
foo is a function
foo ()
{
    echo 'GHOST'
}
  1. Ligue foo(), ele irá imprimirGHOST

  2. Editar .bashrc, remover a função, fonte novamente

  3. foocomo uma função ainda disponível para chamada e type.

  4. Reinicie uma janela de terminal, ela agora deixa de existir.

  5. Claro que isso também acontece quando você renomeia uma função; e você continua chamando a versão antiga enquanto a repete pressionando UP para usar a que está no histórico.

Bug? Recurso? Exploração?

bash
  • 1 1 respostas
  • 31 Views

1 respostas

  • Voted
  1. Best Answer
    terdon
    2024-09-17T18:13:14+08:002024-09-17T18:13:14+08:00

    Nem um bug, nem um recurso, nem um exploit, mas simplesmente um resultado lógico de como as coisas funcionam. Sourcing .bashrcnão é nada especial ou mágico. Ele não recria sua configuração de shell ou reinicia sua sessão. Não é diferente de sourcing de qualquer outro arquivo, .bashrcé apenas o nome padrão para o arquivo de inicialização do shell, mas mesmo isso pode ser alterado usando bash --rcfile whateverou definindo BASH_ENVpara shells não interativos.

    Então, quando você faz o source .bashrc, isso não remove nada, apenas adiciona ao que você já tem. É como ler um livro: depois de ler um livro, ler outro livro não remove o que você aprendeu no primeiro, apenas adiciona a ele. A única diferença real é que, no caso do bash, qualquer coisa no novo arquivo source que contradiga algo no antigo substituirá o antigo. Se, portanto, em vez de excluir, foo()você adicionasse uma função diferente foo(), então esta nova substituiria a antiga.

    A propósito, isso não é nenhuma forma de cache. Você só tem um processo em execução e diz para ele importar coisas novas. As coisas novas são importadas, qualquer coisa que tenha o mesmo nome nas coisas novas será redefinida para os novos valores, qualquer coisa não mencionada nas coisas novas não será tocada.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve