nicht gefunden-Fehler beim einfügen"#! /bin/sh
Habe ich angefangen zu lernen, Linux-shell-scripting, wenn ich schrieb dieses Skript bekam ich eine Fehlermeldung,
./my_script: 4: read: Illegal option -n
./my_script: 5: ./my_script: [[: not found
Fand ich heraus, weil seine #!/bin/sh Linie, kann ich immer noch das Skript ausführen, ohne dass die Linie, aber es wird nicht ausgeführt-codes wie /n
#!/bin/sh
# Shell installer for gurb customizer. by Naveen Gamage.
OS=$(lsb_release -si)
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VER=$(lsb_release -sr)
grabninstall() {
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
}
echo "Installer for GRUB CUSTOMIZER\n"
echo "GURB CUSTOMIZER"
echo "A tool for editing and configuring boot menu (GRUB2/BURG).\n"
read -p "Do you want to install Grub Customizer for $OS ${VER} [$ARCH] ? (Y/n) " -n 1
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "The installer is downloading and installing GRUB Customizer!";
echo "This action may require your password.\n";
grabninstall
else
echo "user quit"
echo "Installation was unsuccessful."
fi
Ich bin dabei auf Ubuntu 12.10.
und die sh gibt diese Ausgabe
/bin/sh
irgendeine Idee, wo ich falsch gemacht habe?
- Tut
ls -l /bin/sh
Punkt zubash
? - ja, lrwxrwxrwx 1 root root 4. Mai 13 16:01 /bin/sh -> Strich
dash
!=bash
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie mit
/bin/sh
um das Skript auszuführen und auf Ihrem system/bin/sh -> dash
. Dies bedeutet, dassdash
ist bei der Ausführung Ihrer Skripts. Diedash
shell nicht unterstützt[[
, aberbash
tut. So ändern Sie die erste Zeile im Skript (genannt Shebang) von#!/bin/sh
zu#!/bin/bash
.Alternativ verwenden Sie nicht
[[
im Skript. Verwenden Sie nur mit Unterstützung vondash
.Siehe auch das Ubuntu-Seite auf welche Konstrukte werden nicht unterstützt
dash
.echo ""
echo -e
so drucken Sie eine leere Zeile. z.B.echo -e "hello\nworld"
echo
drucken einer leeren Zeile (ohne Argumente). Verwenden Sie nichtecho
mit Argumenten (z.B.echo -n
/echo -e
) wenn Portabilität ist ein wichtiges Anliegen, verwenden Sieprintf
statt (link).