O que será novo no bash 5

29

Eu estava apenas passando pelo repositório oficial do bash (geralmente não faço isso) por algo não relacionado, mas notei que o bash 5 já estava na versão beta. Eu estava curioso sobre o que será novo no bash 5, mas não consegui encontrar nenhuma informação. Alguém pode resumir as alterações entre as versões 4.4 e 5 do Bash

akabhirav
fonte
6
É ali mesmo no CHANGESarquivo: git.savannah.gnu.org/cgit/bash.git/tree/...
Muru

Respostas:

21

As alterações feitas bashentre as versões 4.4 e 5.0 (lançadas em 01-01-2019) podem ser encontradas no NEWSarquivo na bashdistribuição de origem.

Aqui está um link para ele (as alterações são muito numerosas para serem listadas aqui).

Kusalananda
fonte
Uma breve visão mostra o termo loadable builtins. Será que bashseguem o novo padrão criado pela ksh93encontrar aprimorados builtins via PATH, em vez de lhes dar sempre prioridade?
schily
O @schily bash4.4 e mais tarde os usa BASH_LOADABLES_PATHe carrega a partir daí enable -f builtin-name.
Kusalananda
Bem, isso parece se aplicar ao momento em que o comando é carregado. E quanto ao tempo passado isso? enableparece uma reimplementação do ksh93comando, builtinmas perde o recurso para associar um caminho a cada comando interno, o qual ksh93geralmente é predefinido /usr/ast/bin/<name>e permite ter um controle refinado sobre todos os buiiltins.
schily
@Kusalananda como posso obter uma nova festança 5.0
Ankur Loriya
@AnkurLoriya Você espera até que o distribuidor Unix o envie como um pacote ou você mesmo o compila a partir de fontes. As fontes e as instruções de instalação estão disponíveis na página GNU Bash .
Kusalananda
14

Se você, como eu, está procurando mais os recursos das manchetes do que o changelog completo, esta postagem do mantenedor Chet Ramey aborda isso. Aqui está a seção interessante:

Esta versão corrige vários bugs pendentes no bash-4.4 e apresenta vários novos recursos. As correções de erros mais significativas são uma revisão geral de como as variáveis ​​nameref são resolvidas e vários erros potenciais de memória fora dos limites descobertos por meio de difusão. Há várias alterações na expansão de $ @ e $ * em vários contextos em que a divisão de palavras não é realizada para estar em conformidade com uma interpretação padrão do Posix, e alterações adicionais para resolver casos de canto para conformidade com o Posix.

Os novos recursos mais notáveis ​​são várias novas variáveis ​​de shell: BASH_ARGV0, EPOCHSECONDS e EPOCHREALTIME. O builtin `histórico 'pode remover intervalos de entradas do histórico e entende argumentos negativos como compensações do final da lista do histórico. Existe uma opção para permitir que variáveis ​​locais herdem o valor de uma variável com o mesmo nome no escopo anterior. Há uma nova opção de shell que, quando ativada, faz com que o shell tente expandir os subscritos de matriz associativa apenas uma vez (esse é um problema quando eles são usados ​​em expressões aritméticas). A opção de shell `globasciiranges 'agora está ativada por padrão; pode ser desativado por padrão no momento da configuração.

Existem algumas alterações incompatíveis entre o bash-4.4 e o bash-5.0. As alterações na maneira como as variáveis ​​nameref são resolvidas significam que alguns usos do namerefs se comportarão de maneira diferente, embora eu tenha tentado minimizar os problemas de compatibilidade. Por padrão, o shell define apenas BASH_ARGC e BASH_ARGV na inicialização se o modo de depuração estendido estiver ativado; foi uma supervisão que ele foi definido incondicionalmente e causou problemas de desempenho quando os scripts receberam um grande número de argumentos.

Ele também se refere a esses dois arquivos, caso você queira mais:

Jacktose
fonte
5

O builtin `histórico 'pode remover intervalos de entradas do histórico e entende argumentos negativos como compensações do final da lista do histórico.

Exemplo de exclusão de um intervalo:

history -d 123-130

ou excluindo os últimos 10:

history -d -10--1

Trecho do Bash 5 Man Page :

'história'

As opções, se fornecidas, têm os seguintes significados:

'-d OFFSET' Exclua a entrada do histórico na posição OFFSET. Se OFFSET for positivo, deve ser especificado como aparece quando o histórico é exibido. Se OFFSET for negativo, ele será interpretado como relativo a um maior que a última posição do histórico, portanto, os índices negativos são contados a partir do final do histórico, e um índice de '-1' refere-se ao comando 'history -d' atual.

'-d START-END' Exclui as entradas do histórico entre as posições START e END, inclusive. Valores positivos e negativos para START e END são interpretados como descrito acima.

Veja minha resposta relacionada: Excluir um intervalo do histórico do bash

David Hatch
fonte