Eu faço isso em um script:
read direc <<< $(basename `pwd`)
e eu recebo:
Syntax error: redirection unexpected
em uma máquina ubuntu
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
enquanto eu não receber esse erro em outra máquina de suse:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Por que o erro?
Respostas:
O seu script faz referência
/bin/bash
ou/bin/sh
em sua linha de hash bang? O shell do sistema padrão no Ubuntu é dash , não bash , portanto, se você tiver#!/bin/sh
, seu script usará um shell diferente do esperado. O Dash não possui o<<<
operador de redirecionamento.fonte
Docker:
Eu estava recebendo esse problema do meu Dockerfile como havia:
No entanto, de acordo com esse problema , foi resolvido:
Solução:
Observe as aspas ao redor de cada parâmetro.
fonte
Se você estiver usando o seguinte para executar seu script:
Em seguida, você deseja usar o seguinte:
A razão para isso é que o Bash não é o shell padrão para o Ubuntu. Então, se você usar "sh", ele usará apenas o shell padrão; que na verdade é Dash. Isso acontecerá independentemente se você estiver
#!/bin/bash
no topo do seu script. Como resultado, você precisará especificar explicitamente para usarbash
como mostrado acima, e seu script deverá ser executado conforme o esperado.O Dash não suporta redirecionamentos da mesma forma que o Bash.
fonte
Você pode obter a saída desse comando e colocá-lo em uma variável. então use
heredoc
. por exemplo:pode ser escrito como:
e assim (é isso que você deseja):
Exemplo prático em
busybox
sobdocker
recipiente:fonte
echo 'text' | nc
que é ainda mais curto.faça da maneira mais simples,
Ou use o shell
fonte
Outro motivo para o erro pode ser se você estiver executando um trabalho cron que atualiza uma cópia de trabalho do subversion e, em seguida, tentou executar um script com versão que estava em estado de conflito após a atualização ...
fonte
Na minha máquina, se eu executar um script diretamente, o padrão é
bash
.Se eu executá-lo
sudo
, o padrão ésh
.É por isso que eu estava enfrentando esse problema quando usei
sudo
.fonte
No meu caso, o erro é porque eu coloquei ">>" duas vezes
eu apenas corrijo isso
fonte
Antes de executar o script, você deve verificar a primeira linha do script shell para o intérprete.
Por exemplo: se os scripts começarem com / bin / bash, execute o script usando o comando abaixo "bash script_name.sh"
se o script começar com / bin / sh, execute o script usando o comando abaixo "sh script_name.sh"
./sample.sh - Isso detectará o intérprete da primeira linha do script e será executado.
Diferentes distribuições Linux com diferentes shells como padrão.
fonte