Percebi que meu script bash em desenvolvimento precisa de testes completos da linha 1, linha por linha
Sessão mate-terminal iniciada
Tela dividida verticalmente, lado esquerdo do script bash de edição do emacs, lado direito do comando watch do referido script bash, para que as edições de um lado se tornem instantaneamente visíveis no lado direito, tudo de uma só vez - o fim da mudança manual de tela para tela ou de local de trabalho para local de trabalho
script bash, bloco variável, definindo matriz associativa
*script não funciona, mensagem de erro 'Erro de sintaxe: "(" inesperado' *
pesquisando, descobrindo que esse erro acontece, se o shell for incapaz de trabalhar com arrays associativos - sh não pode fazer isso, bash pode fazer isso
tela final, de volta ao bash puro, executando o script bash, testemunhando como funciona bem
Pergunta: Há algo que possa ser feito para que o comando da tela dependa do shell "bash" em vez de "sh"? Alguma opção causando essa mudança? --shell=bash? Isso é basicamente o que é necessário.
ATUALIZAR
Constantino AB está certo. Acontece que: é tecnicamente necessário colocar o shebang em nenhum outro lugar, mas na linha 1 de um script, não importa o que aconteça. Claro, logo no início da linha, tornando-o o primeiro conjunto de caracteres de todo o arquivo. E provavelmente basicamente definido apenas na linha 1, fazendo com que todo o resto esteja na linha 2 ou em linhas posteriores.
Meu erro foi que eu - é claro - configurei o shebang para bash - mas na linha 11, depois de uma seção de comentários de 10 linhas, portanto, não na linha 1.
Exemplo:
ANTES
emacs /tmp/test-script.sh (definir executável, salvo da seguinte forma)
# Super important stuff in need of being mentioned at the top
#!/bin/bash
declare -A asso_array=(
[var1]=""
[var2]="Seems to work"
[var3]="Test"
[var4]=""
)
echo ${asso_array[@]}
echo "Hello World!"
assista /tmp/test-script.sh
Every 2.0s: /tmp/test-script.sh Sat Jan 20 14:02:11 2024
/tmp/test-script.sh: 4: /tmp/test-script.sh: Syntax error: "(" unexpected
DEPOIS
emacs /tmp/test-script.sh (definir executável, salvo da seguinte forma)
#!/bin/bash
# Super important stuff in need of being mentioned at the top
declare -A asso_array=(
[var1]=""
[var2]="Seems to work"
[var3]="Test"
[var4]=""
)
echo ${asso_array[@]}
echo "Hello World!"
Nota: Assim que - e somente então - você colocar o shebang na linha 1, o ponto final do caminho - neste caso "bash" - será destacado!
assista /tmp/test-script.sh
Every 2.0s: /tmp/test-script.sh Sat Jan 20 14:05:11 2024
Test Seems to work
Hello World!
Então, lição aprendida, recapitule:
Shebang PRIMEIRO! NÃO IMPORTA O QUE!
É uma necessidade técnica para scripts bash.
Desvie-se e o script bash basicamente estará fadado a falhar.
Você precisa marcar seu script como script bash
Isso é feito iniciando-o com a " linha shebang" correta , neste caso
Isso informa ao sistema que o script é executado pelo bash, e não por qualquer outra coisa, quando é executado.
A resposta atualmente aceita pressupõe que o OP está tentando executar um script BASH, o que é verdade. No entanto, a pergunta do OP por si só pergunta sobre
screen
, para responder à pergunta por si só e não à situação do OP: