Was macht 'bash -c'?

76

Ich folgte dem folgenden Tutorial: http://davidtsadler.com/archives/2012/06/03/how-to-install-magento-on-ubuntu/

Irgendwann wurde mir gesagt, ich solle den folgenden Befehl ausführen:

sudo bash -c "cat >> /etc/apache2/sites-available/magento-store.com <<EOF
<VirtualHost *:80>

  ServerName  localhost.magento-store.com
  ServerAlias www.localhost.magento-store.com

  DocumentRoot /home/dev/public_html/magento-store.com/public

  LogLevel warn
  ErrorLog  /home/dev/public_html/magento-store.com/log/error.log
  CustomLog /home/dev/public_html/magento-store.com/log/access.log combined

</VirtualHost>
EOF"

Was hat dieser Befehl getan und wie kann ich das abbrechen?

Ich habe den Computer neu gestartet und es scheint, dass er noch läuft. Ich schaute hinein .bashrcund .profilefand es innen nicht.

giannisapi
quelle
Der Befehl sollte sofort ausgeführt und ausgeführt worden sein. Um es rückgängig zu machen, müssen Sie die magento-store.comDatei bearbeiten .
Flimm
davidtsadler.com/archives/2012/06/03/… scheint kaputt zu sein. Weder davidtsadler.comnoch www.davidtsadler.comscheint in DNS zu sein.
Peter Mortensen

Antworten:

69

Zitat aus man bash:

-c Zeichenfolge Wenn die Option -c vorhanden ist, werden Befehle aus der Zeichenfolge gelesen.
Wenn nach der Zeichenfolge Argumente stehen, werden diese den Positionsparametern zugewiesen, beginnend mit $ 0.

Der von Ihnen angegebene Befehl würde den Text in heredoc (dh den Text in tag) an die Datei anhängen .VirtualHost/etc/apache2/sites-available/magento-store.com

devnull
quelle
15
Wie unterscheidet sich das von ohne -c?
Stimmen
17
@ tjt263 Wenn Sie in solchen Fällen -c praktisch nicht verwenden, können Sie stundenlang debuggen, um verschiedene Anführungszeichen auf verschiedene Weise zu umgehen, und Dinge, die immer noch nicht funktionieren.
Labyrinth
5
Beachten Sie auch, dass Befehle, die von aufgerufen bash -cwerden, zum Singlethreading gezwungen werden. Beispiel: "bash -c 'ffmpeg -threads 4 -i input.mov output.mp4'"ruft ffmpeg auf, kann jedoch nur einen Kern verwenden, obwohl Sie den Parameter "threads" angegeben haben
Christian
2
@Christian warum? das scheint sehr unvernünftig.
user60561
8
@Christian Dieses Verhalten ist nicht dokumentiert und stimmt auch nicht mit dem tatsächlichen Verhalten überein
user60561
7

Die Handbuchseite für Bash (z. B. man bash) besagt, dass die -cOption die Befehle über eine Zeichenfolge ausführt. dh alles in den Anführungszeichen.

Licht und Licht
quelle
1

Schauen Sie sich die Manpages an, entweder auf Ihrem Computer oder im Internet, wie diese hier .

Zitat:

-c string
     If the -c option is present, then commands are read from string.
     If there are arguments after the string, they are assigned to the positional
     parameters, starting with $0.
Segeltürme
quelle