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 / 1504452
Accepted
Tms91
Tms91
Asked: 2024-02-23 18:33:19 +0800 CST2024-02-23 18:33:19 +0800 CST 2024-02-23 18:33:19 +0800 CST

Devo colocar funções em .bashrc, .bash_aliases ou .profile

  • 772

Eu li este tópico sobre onde colocar aliases.

Agora, vamos supor que meu comando personalizado seja bastante elaborado (recebe argumentos na entrada, é composto de vários comandos executados um após o outro, quero preservá-lo em várias linhas para maior clareza, envolve aspas, aspas duplas, etc.), então quero defini-lo como uma função, por exemplo

sshdev_system_loop () {
        while true; do
          echo "[$(date +'%Y-%m-%d %H:%M:%S')] Trying to log into ststem $2 as user $1 ."
          timeout 10 ssh $1@$2
        done
}

devo colocá-lo dentro .bash_aliasesou no final .bashrcou dentro .profile?

Por um lado, não quero incluí-lo, .bash_aliasespois "estragará" a lista de

alias alias_name='command/list of commands'

e por outro lado, .bashrcparece um arquivo administrado pelo sistema operacional, então não quero adicionar nada a ele.

Então, qual é a prática recomendada para adicionar funções como comandos personalizados no Ubuntu?

command-line
  • 2 2 respostas
  • 844 Views

2 respostas

  • Voted
  1. Best Answer
    terdon
    2024-02-23T20:28:26+08:002024-02-23T20:28:26+08:00

    Depende em grande parte de você e de como você usa seu computador. bash_aliasesnão é um arquivo padrão, é algo que o Ubuntu adiciona ao sistema. Se você olhar o padrão do Ubuntu .bashrc( /etc/skel/.bashrc), verá:

    if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
    fi
    

    O Ubuntu se configura para originar (ler) esse arquivo (o .meio é ler o arquivo no shell atual), se ele existir. Portanto, se você está planejando migrar sua configuração para outro lugar, não use bash_aliasesnada.

    Se você se preocupa apenas com o Ubuntu, usar bash_aliasesou bashrcé a mesma coisa. Ambos serão lidos ao mesmo tempo, já que um origina o outro, então a escolha de qual usar fica a seu critério.

    Dito isto, o .bashrcarquivo foi totalmente projetado para ser editado pelo usuário e não para ser administrado pelo sistema operacional, portanto, sinta-se à vontade para editá-lo. Tradicionalmente, você colocaria aliases e funções em ~/.profile, no entanto, já que .bashrcé lido toda vez que você inicia um novo shell interativo sem login, enquanto .profileé lido apenas por shells de login interativos. Na prática, em um sistema gráfico moderno, isso significa que .bashrc(e .bash_aliasesno Ubuntu) é lido toda vez que você abre um novo terminal, enquanto .profileserá lido somente quando você fizer login .bashrc. muito longo para ser lido todas as vezes. No entanto, em sistemas modernos, isso realmente não faz nenhuma diferença perceptível. Nossas máquinas são rápidas o suficiente para ler arquivos maiores sem nenhum problema.

    Outra consideração é que .profilee .bashrcsão lidos por diferentes tipos de shell, login e não login, respectivamente, conforme mencionado acima. Veja minhas respostas aqui e aqui para mais detalhes sobre isso. A questão é que em sistemas tradicionais, ao executar um shell sem login, .profilenão é lido. no entanto, o Ubuntu, assim como seu pai, o Debian, tem uma linha especial em suas .profilefontes .bashrc:

    $ grep -A1 bashrc /etc/skel/.profile 
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
        fi
    

    Tudo isso significa que você pode adicionar funções aos seus arquivos .bashrcou .bash_aliasesconforme desejar, e eles ainda estarão disponíveis para login em shells. Você pode querer usar .profileem vez disso, mas fique à vontade para usar .bashrc. É para isso que serve: para o usuário definir coisas extras para seu shell.

    Algumas referências úteis:

    • Qual é o propósito do .bashrc e como funciona?
    • Diferença entre Shell de login e Shell sem login?
    • Sequência de scripts originados no login
    • Por que os scripts em /etc/profile.d/ estão sendo ignorados (aliases bash em todo o sistema)?
    • 12
  2. Artur Meinild
    2024-02-23T21:27:19+08:002024-02-23T21:27:19+08:00

    Uma pequena variação na excelente resposta de Terdon:

    Eu escolhi a solução para adicionar um novo bloco ao meu .bashrccom o seguinte conteúdo:

    if [[ -f ~/.bash_functions ]]
    then
      . ~/.bash_functions
    fi
    

    Como você pode ver, o princípio é exatamente o mesmo do for .bash_aliases, exceto que prefiro ter minhas funções definidas em um arquivo separado .bash_functions.

    Então, há ainda outra reviravolta nisso. Quando defino minha função, faço assim:

    # Go up in directory structure
    _up() {
      local d=""
      local limit="$1"
    
      # Default to limit of 1
      if [ -z "$limit" ] || [ "$limit" -le 0 ]; then
        limit=1
      fi
    
      for ((i=1;i<=limit;i++)); do
        d="../$d"
      done
    
      cd "$d"
    }
    

    E então, eu realmente faço referência à função no meu .bash_aliasesarquivo:

    alias up='_up'
    

    Dessa forma, minha função aparece na lista de alias quando eu apenas executo alias, mas como começa com _, sei que é uma função definida em .bash_functions.

    • 8

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