Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German)
  • Search

bash-scripting: externe Befehle mit " ausführen

Support-Forum
Diskussionen rund um Installation, Betrieb und Anpassungen von Gentoo und dessen Paketen sowie dabei auftretenden (technischen) Problemen.
Deutsches Portal: www.gentoo.de
Post Reply
  • Print view
Advanced search
8 posts • Page 1 of 1
Author
Message
Christian99
Veteran
Veteran
Posts: 1773
Joined: Thu May 28, 2009 5:20 pm

bash-scripting: externe Befehle mit " ausführen

  • Quote

Post by Christian99 » Wed Dec 12, 2012 7:11 pm

Hi, ich versuch gerade einen wrapper für ffmpeg zu bauen, der mir Tipparbeit sparen soll. ich hab nur ein kleines Problem:
Ich möchte die übergebenen Dateinamen in "" setzen, damit diese auch Leerzeichen enthalten können.

ich baue mir den Befehl so zusammen (ffmpeg-optionen rausgekürzt)

Code: Select all

COMMAND="ffmpeg -i \"$infile\" [...] \"$outfile\""
und zum ausführen dann einfach nur

Code: Select all

$COMMAND
leider funktioniert das nicht. ffmpeg interpretiert die " als mit zum dateinamen gehörig (anscheinend). Fehlermeldung: "test.mkv": No such file or directory

wenn ich

Code: Select all

echo $COMMAND
mache und die Ausgabe kopiere und Einfüge und asuführe, dann funktioniert es.

wie muss ich jetzt die Anführungszeichen und wo escapen, oder was auch immer ich machen muss?

Schönen Dank
Christian
Top
toralf
Developer
Developer
User avatar
Posts: 3945
Joined: Sun Feb 01, 2004 2:58 pm
Location: Hamburg
Contact:
Contact toralf
Website

  • Quote

Post by toralf » Wed Dec 12, 2012 7:50 pm

Tja, wenn es nur Leerzeichen sind, müßtest Du evtl. einfach die escapen mittels

Code: Select all

echo "mi au" | sed 's/ /\\ /g'
, aber diese Befehlssequenze bei Deiner Lösung einzubauen läöuft auch auf die backslash/Escape-Hölle hinaus, fürchte ich.
Top
Christian99
Veteran
Veteran
Posts: 1773
Joined: Thu May 28, 2009 5:20 pm

  • Quote

Post by Christian99 » Wed Dec 12, 2012 8:00 pm

hm, wäre eine Möglichkeit, find ich aber unschön (nicht bös gemeint) weil das ja nur für Leerzeichen geht bzw ich bei allen anderen zeichen die escaped werden müssen das einzeln machen muss.

PS: sollte das nicht nur ein \ sein innerhalb von ' '? ;)
Top
bell
Guru
Guru
User avatar
Posts: 524
Joined: Tue Nov 27, 2007 8:48 am

  • Quote

Post by bell » Wed Dec 12, 2012 8:13 pm

Ich habe mir folgendes angewöhnt:

Code: Select all

function do_ffmpeg(){
   infile="$1"
   outfile="$2"
   ffmpeg -i "$infile" [...] "$outfile"
}

 do_ffmpeg inpputfile.avi outputfile.mpg
Damit umgeht man das Problem und der Code ist lesbarer.
Top
Christian99
Veteran
Veteran
Posts: 1773
Joined: Thu May 28, 2009 5:20 pm

  • Quote

Post by Christian99 » Wed Dec 12, 2012 8:44 pm

ok, danke, wenn man den befehl nicht von einer variable aus ausführt funktionierte es, wie es soll.
verstehen tu ich es aber nicht....
Top
toralf
Developer
Developer
User avatar
Posts: 3945
Joined: Sun Feb 01, 2004 2:58 pm
Location: Hamburg
Contact:
Contact toralf
Website

  • Quote

Post by toralf » Wed Dec 12, 2012 9:13 pm

Christian99 wrote:PS: sollte das nicht nur ein \ sein innerhalb von ' '? ;)
Nein, der Ausdruck ist schon korrekt so.
Wie jedoch schon bemerkt, es geht halt im dargestellten Beispiel nur für Leerzeichen.

Was ich mich jedoch frage, ist, ob geschweifte Klammern Dir helfen könnten, also etwas in der Art

Code: Select all

COMMAND="ffmpeg ... ${infile} "
Top
bell
Guru
Guru
User avatar
Posts: 524
Joined: Tue Nov 27, 2007 8:48 am

  • Quote

Post by bell » Wed Dec 12, 2012 9:54 pm

Das Problem ist nicht die Maskierung, sondern die anschließende Interpretation. Wenn Du dann $COMMAND ausführst, interpretiert die Shell die Zeichenkette nicht mehr. Die " werden also nicht mehr entfernt und er findet keine Datei die mit " beginnt und endet. Die Lösung ist "eval".
Beispiel:

Code: Select all

COMMAND="ls \"$HOME\""

echo $COMMAND
ls "/home/meinuser"

###soweit sogut

$COMMAND
ls: Zugriff auf "/home/meinuser" nicht möglich: Datei oder Verzeichnis nicht gefunden

### Klar, mit " gibt es auch nicht.

eval $COMMAND
;)
Top
Christian99
Veteran
Veteran
Posts: 1773
Joined: Thu May 28, 2009 5:20 pm

  • Quote

Post by Christian99 » Fri Dec 14, 2012 2:45 pm

Ok, vielen Dank, eigentlich hätt ich das wissen müssen, aber wenn man nicht regelmäßig shell-skripte schreibt ... ;)
Top
Post Reply
  • Print view

8 posts • Page 1 of 1

Return to “Deutsches Forum (German)”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Authors
Gentoo is a trademark of the Gentoo Foundation, Inc. and of Förderverein Gentoo e.V.
The contents of this document, unless otherwise expressly stated, are licensed under the CC-BY-SA-4.0 license.
The Gentoo Name and Logo Usage Guidelines apply.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy