Robię to w skrypcie:
read direc <<< $(basename `pwd`)
i otrzymuję:
Syntax error: redirection unexpected
w maszynie ubuntu
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
podczas gdy nie otrzymuję tego błędu w innej maszynie suse:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Skąd ten błąd?
Odpowiedzi:
Czy twój skrypt zawiera odniesienie do
/bin/bash
lub/bin/sh
w linii skrótu? Domyślną powłoką systemową w Ubuntu jest myślnik , a nie bash , więc jeśli masz,#!/bin/sh
twój skrypt będzie używał innej powłoki niż się spodziewasz. Dash nie ma<<<
operatora przekierowania.źródło
Doker:
Otrzymałem ten problem z mojego pliku Dockerfile, tak jak miałem:
Jednak zgodnie z tym problemem został rozwiązany:
Rozwiązanie:
Zwróć uwagę na cudzysłowy wokół każdego parametru.
źródło
Jeśli używasz następujących narzędzi do uruchamiania skryptu:
Zamiast tego będziesz chciał użyć następującego:
Powodem tego jest to, że Bash nie jest domyślną powłoką dla Ubuntu. Tak więc, jeśli użyjesz "sh", użyje po prostu domyślnej powłoki; czyli właściwie Dash. Stanie się tak niezależnie od tego, czy masz
#!/bin/bash
u góry skryptu. W rezultacie będziesz musiał jawnie określić użycie,bash
jak pokazano powyżej, a twój skrypt powinien działać zgodnie z oczekiwaniami.Dash nie obsługuje przekierowań tak samo jak Bash.
źródło
Możesz pobrać dane wyjściowe tego polecenia i umieścić je w zmiennej. następnie użyj
heredoc
. na przykład:można zapisać tak:
i tak (właśnie tego chcesz):
Praktyczny przykład
busybox
poddocker
kontenerem:źródło
echo 'text' | nc
który jest jeszcze krótszy.zrób to prościej,
Lub użyj muszli
źródło
Innym powodem błędu może być to, że uruchamiasz zadanie cron, które aktualizuje kopię roboczą subversion, a następnie próbowałeś uruchomić wersjonowany skrypt, który był w stanie konfliktu po aktualizacji ...
źródło
Jeśli uruchamiam skrypt bezpośrednio na moim komputerze, wartość domyślna to
bash
.Jeśli uruchomię go z
sudo
, domyślnie jest tosh
.Dlatego napotkałem ten problem, kiedy użyłem
sudo
.źródło
W moim przypadku błąd jest spowodowany dwukrotnym wstawieniem „>>”
po prostu poprawiam to jako
źródło
Przed uruchomieniem skryptu należy sprawdzić pierwszą linię skryptu powłoki pod kątem interpretera.
Np .: jeśli skrypty zaczynają się od / bin / bash, uruchom skrypt za pomocą poniższego polecenia „bash nazwa_skryptu.sh”
jeśli skrypt zaczyna się od / bin / sh, uruchom go za pomocą poniższego polecenia „sh nazwa_skryptu.sh”
./sample.sh - wykryje interpreter z pierwszej linii skryptu i uruchomi się.
Różne dystrybucje Linuksa, które domyślnie mają różne powłoki.
źródło