Warum funktioniert mkdir -p nicht in einem Skript, das von checkinstall aufgerufen wird?

7

Ich versuche, Quartal zu kompilieren und es mit checkinstall .

Wenn ich den Standard ./configure & amp; & amp; machen & amp; & amp; sudo make install, alles geht gut.

%Vor%

Aber wenn ich checkinstall verwende, scheitert es an einer mkdir -p , die vollkommen in Ordnung sein sollte. Die Art, wie es fehlschlägt, ist genau so, als ob die Option -p nicht gegeben wäre. Dies ist die Checkinstall-Befehlszeile, die ich verwende:

%Vor%

Dies ist der Fehler:

%Vor%

Dies ist der relevante Teil des Skripts:

%Vor%

Ich verstehe nicht, warum exec da ist - garantiert das nicht, dass der Rest des Skripts (nach dem esac ) niemals ausgeführt wird? (Wenn if test übergibt, dann nimmt das Skript an, dass mkdir -p korrekt funktioniert, also kann es das echte mkdir -p beenden, ansonsten implementiert der Rest des Skripts das richtige mkdir -p Verhalten.) Ich auch nicht verstehe, warum es "$*" im Echo und "$@" in der nächsten Zeile verwendet, aber es scheint keine Rolle zu spielen - sie sind beide dasselbe, da dieses Skript mit nur einem Argument aufgerufen wird. (Erklärte Tom im Kommentar)

Wenn ich zwei Zeilen zwischen echo und exec hinzufüge, die mkdir -p -- "$@" und dann echo "Now doing the exec mkdir..." haben, dann funktioniert das so - besser, aber immer noch verwirrend:

%Vor%

Nun, die Tatsache, dass die mkdir-Zeile zweimal funktioniert hat, sagt mir, dass es kein Berechtigungsproblem ist (abgesehen davon würde das eine andere Diagnose als mkdir erzeugen, und das wird als sudo ausgeführt und es funktioniert tatsächlich /var/tmp/... nicht die reale /usr/local/... ). Ich denke, was passiert, ist, dass der erste Aufruf von mkdir (den ich hinzugefügt habe) tatsächlich nur das Quarter -Verzeichnis erstellt und ausbucht, und wenn das zweite mkdir ausgeführt wird, kann das devices -Unterverzeichnis erstellt werden, da das Viertel Verzeichnis ist schon da. Aber warum würde mkdir so arbeiten ???

Meine Problemumgehung besteht darin, das Skript mkinstalldirs irgendwie zu patchen, aber ich bin wirklich neugierig, warum das bricht!

Dies ist ein Ubuntu 10.10 guest, der in VirtualBox auf Win7 läuft, checkinstall version 1.6.2 installiert durch apt-get.

BEARBEITEN: Ich habe einige Tests durchgeführt, um zu sehen, was in dieser Umgebung funktioniert und was nicht funktioniert ...

%Vor%

Seltsam, dass -p für relative Pfadnamen, aber nicht für absolute Pfadnamen funktioniert. Oder vielleicht ist die korrekte Unterscheidung, dass -p außerhalb des "chroot" -Baums arbeitet (wenn es wirklich chroot benutzt), aber nicht innerhalb von chroot.

Ich habe auch überprüft, dass es trotz des Fehlers in der Lage ist, die erste Verzeichnisebene zu erstellen.

Immer noch ein Mysterium.

    
Dan 11.02.2011, 23:34
quelle

3 Antworten

2

mkdir -p funktioniert nicht so wie es sollte, weil es eine checkinstall-Version von mkdir ist, nicht das "wahre" mkdir. Muss ein Fehler in checkinstall sein, der es ein bisschen anders funktioniert.

Dieser Patch funktioniert um den Fehler:

%Vor%     
Dan 12.02.2011, 11:59
quelle
21

Verwenden Sie

%Vor%

sollte das beheben. Oder

%Vor%

in /etc/checkinstallrc und versuchen Sie es erneut.

    
Name 26.10.2011 09:32
quelle
0
%Vor%     
Daps0l 02.11.2014 13:47
quelle

Tags und Links