No bash, o muito útil shell-expand-line( M-C-e
) expande as substituições de comando para seu conteúdo, na linha atual. No entanto, isso funciona de maneira muito estranha para comandos sem detalhes.
Pode-se verificar isso pelo seguinte.
- Crie um arquivo executável simples com e sem shebang.
echo echo hi >> test-no-shebang
chmod +x test-no-shebang
echo '#!/bin/sh' >> test-shebang
echo echo hi >> test-shebang
chmod +x test-shebang
- Entre
`./test-shebang`
, entãoM-C-e
. Isso funciona conforme o esperado, expandindo a linha parahi
.C-_
funciona normalmente, desfazendo a expansão. - Entre
`./test-no-shebang`
, entãoM-C-e
. Isso funciona de maneira estranha, expandindo a linha parahi
, mas removendo o prompt na frente da linha.C-_
não funciona, imprimindo o caractere literalmente, e nem a maioria das ligações, masC-u
meio que funciona, limpando a linha com sucesso (mas não limpando ohi
).
Por que isso acontece? Posso fazer o shell-expand-line funcionar para scripts sem shebang?
EDITAR:
Alguns comentários acharam que seria sensato mencionar que as combinações de teclas mencionadas referem-se às ligações de edição de linha do emacs (que são as combinações de teclas padrão do bash).
Com mais testes, observo que consigo reproduzir o problema no Mac Terminal e no kitty na versão bash
5.2.15(1)-release
, mas não consigo reproduzir o problema no bash3.2.57(1)-release
.
Gratidão ao @Vilinkameni por propor a consulta da mailing list; os assistentes do GNU rapidamente ofereceram um diagnóstico deste problema como um bug conhecido, já corrigido no branch devel. Presumivelmente, isso será corrigido para versões acima de 5.2.