2015-12-22 5 views
5

Auf der Kommandozeile, bekomme ich diese:

$ FOO=foo 
$ echo $FOO 
foo 
$ echo $$FOO 
11971FOO 

Hier löst $$ an die PID der Schale als erwartet und „FOO“ wörtlich gedruckt.

Nun versuchte einige Skripte zu verstehen und zu debuggen, finde ich folgende:

#!/bin/bash 
FILE1=/path/to/file/1 
FILE2=/path/to/file/2 
echo $$FILE1 >> $$FILE2 

Das Skript in Frage stammt von einem Scripts für ein Debian-Paket. Soll es vorverarbeitet werden, bevor es laufen kann?

Update:

%postinstall <script.sh 

Im resultierenden deb-Paket liest die postinst Skript:

#!/bin/bash 
FILE1=/path/to/file/1 
FILE2=/path/to/file/2 
echo $FILE1 >> $FILE2 

Das Skript ist Teil eines Pakets mit epm und lesen Sie über die folgende Richtlinie gebaut Die Verarbeitung erfolgt also entweder durch epm oder dpkg.

+0

Für mich sieht dies wie eine Möglichkeit aus, ein Verzeichnis zu erstellen, dessen Name nicht mit einem vorhandenen kollidiert. – fedorqui

+1

Wenn das ein tatsächliches Skript ist, dann ist es fast sicher, dass es nachbearbeitet wird. Es ist jedoch unmöglich, dies ohne mehr Kontext zu sagen. – chepner

+1

Er, vorverarbeitet. – chepner

Antwort

2

Dieses scheinbar ein Merkmal der EPM Paketierungsprogramm ist. Zitiert the documentation:

Beachten Sie, dass alle in der Listendatei angegebenen Befehle wird die Variable Expansion von EPM bereitgestellt verwenden, so müssen Sie alle Dollarzeichen zitieren ($) Zeichen in Ihre Befehle. Zum Beispiel wird "$ foo" durch den Wert von "foo" ersetzt, aber "$$ foo" wird zu "$ foo".

0

$$ druckt die Prozess-ID, die 11971 in Ihrem Fall ist.

Da Sie ein FOO nach diesen echo Dumps nur FOO nach 11971 so erhalten Sie

11971FOO 

Um genau zu sein es der Prozess-ID der Shell bash ist, in dem die Sitzung ausgeführt . Um dies zu überprüfen, könnten Sie Folgendes tun:

kill -9 11971 

, die die aktuelle Sitzung beenden wird. Das folgende Skript im Normalfall

#!/bin/bash 
FILE1=/path/to/file/1 
FILE2=/path/to/file/2 
echo $$FILE1 >> $$FILE2 

wird keiner Vorverarbeitung unterzogen. Es hält auf die Datei anhängen

current_shell_process_id_FILE2 

im aktuellen Verzeichnis mit dem Inhalt

current_shell_process_idFILE1 
+10

Das OP hat klargestellt, dass sie bereits wissen, was' $$' für sich bedeutet. –

+0

@TomFenech: Meine Antwort aktualisiert. – sjsam

+0

@sjsam Vielen Dank für Ihre Antwort. Ich verstehe das. Ich frage mich, ob die zitierten Zeilen etwas anderes im Kontext eines Postinstall-Skripts tun. – Jan