[Bash] String aus Shell Script erhalten

Yuuri

Fleet Admiral
Registriert
Okt. 2010
Beiträge
13.923
Hallo zusammen,

ich versuche gerade mittels nem Bash Script die Ausgabe auf eine Variable zu schreiben.

Ich hab mir ein Script prompt geschrieben, was prinzipiell ein Wrapper für read -p ist. Will ich nun einen Prompt haben und die Eingabe erhalten klappt dies natürlich nicht, weil ich auch den Prompt selbst erhalte.
Code:
ANSWER=`prompt -d "y/n" "Alles korrekt?"`

// Ausgabe vor Eingabe

> 

// Ausgabe nach Eingabe

> test
ANSWER = Alles korrekt?
[y/n] test

// Was zu erwarten wäre

Alles korrekt?
[y/n] > test
ANSWER = test
Wäre auch alles kein Problem, wenn ich wüsste, wie ich im Wrapper auf eine übergebene Variable schreiben könnte (o.ä.).

Das hat mir nicht wirklich geholfen, da ich jedes Mal nen Syntax Fehler erhalte
Code:
eval "$2='das ist ein test'" // ./prompt: Zeile 80: =das ist ein test: Kommando nicht gefunden.
und nicht glaube, dass dies auch für Scripte funktioniert und ich auch bezweifel, dass es mit einer dynamischen Parameterzahl funktionieren wird.

Gibts ein Äquivalent wie in PowerShell Write-Host, was zwar was ausgibt, aber nicht in der Rückgabe steht? Dann könnte ich es natürlich wie oben einfach abgreifen.

Wie bekomm ich also meinen String an die richtige Stelle?



LG
 
Mit einem bash-Script "myprompt" das wie folgt aussieht:

Code:
#!/bin/bash

>&2 echo $1
read -p "$2 > " in
echo $in

erhalte ich bei einem Aufruf mittels

Code:
ANSWER=`./myprompt "Alles korrekt?" "[y/n]"` ; echo $ANSWER

vor der Eingabe

Code:
Alles korrekt?
[y/n] >

und nach der Eingabe

Code:
Alles korrekt?
[y/n] > test
test

Aber mal ganz ketzerisch gefragt: Warum machst Du das nicht mit Perl?


HTH

BigNum
 
Um deine Frage kurz und knapp zu beantworten (und damit das wesentliche aus BigNums Antwort zu extrahieren): Gib den Prompt-String nach stderr aus.
 
Leider nur ein Workaround, aber ich werds morgen mal versuchen.
BigNum schrieb:
Aber mal ganz ketzerisch gefragt: Warum machst Du das nicht mit Perl?
Wozu? Ich will einfach n kleines Script haben, was mir bspw. Datenbankimporte regelt. Und bevor ich den Query mit dem kompletten Dump absetze, würd ich gern nochmal ne Gegenprüfung mit den Parametern vor dem Schirm haben und nen kleinen Prompt, ob der Vorgang wirklich ausgeführt werden soll. Kommt halt ein wenig blöd, wenn wirklich mal ne Kundenwebseite aufgrund irgendeines dummen Fehlers down sein sollte. ;)
Ergänzung ()

Funktioniert soweit, danke. Nur ist es eben leider ein Workaround. Farbigen Text kann ich somit leider vergessen. :( Mit Farben bekomm ich logischerweise leider die Escape Sequenzen mit in der Rückgabe. Gibts denn keine Lösung dafür?
 
Zuletzt bearbeitet:
Klar: Stell sicher, dass du farbige Ausgaben nur auf Terminals und nicht auf Pipes machst. Isatty(3) oder in Skripten test(1) hilft weiter:
Code:
[ -t 1 ] && echo "color"
 
Das hilft mir aber nur beim direkten Aufruf, oder?
Code:
prompt -f red -b green "foo?"
Gibt mir in der Konsole den entsprechend farbigen Output.
Code:
#!/usr/bin/env bash

ANSWER=$(prompt -f red -b green "foo?")

echo ":$ANSWER:"
Gibt mir keinerlei Farben. Die Farben werden mittels tput setaf gesetzt.
 
Zurück
Oben