2016-04-18 10 views
0

Für das RTOS Ich schreibe (http://www.distortos.org) Ich muss find als Teil des Build-Konfigurationsprozess (von make menuconfig Ziel) ausführen. Für Windows gehe ich davon aus, dass MSYS2 installiert ist, also verfügbar ist. Das einzige Problem mit dieser speziellen Datei ist, dass Windows auch solche Datei in C:/Windows/system32 hat (angeblich ist es etwas in der Nähe von grep). Je nach der Reihenfolge der Ordner in Ihrer Umgebungsvariablen PATH erhalten Sie das eine oder andere, wenn Sie versuchen, die Datei nur mit dem Namen aufzurufen.Ist es portabel, die ausführbare Datei mit dem vollständigen Pfad "/ bin/..." aufzurufen?

Ich habe festgestellt, dass dieses Programm als /bin/find aus dem Makefile oder in Shell-Skript sowohl in Windows als auch auf (meinem) Linux aufrufen. Was am wichtigsten ist - es so zu tun, ruft immer von MSYS2 auf, egal wie die Reihenfolge der Ordner in PATH ist. Also frage ich mich - ist es in Ordnung, find auf diese Weise zu nennen, oder vielleicht ist es nicht tragbar und ich hatte einfach Glück, dass es für mich funktioniert?

+1

Der Inhalt von '/ bin' und'/usr/bin' variiert etwas willkürlich von einem System zum anderen. Historisch gesehen enthielt '/ bin' ausführbare Dateien, die zu Beginn des Bootvorgangs benötigt wurden, und'/usr/bin' befand sich oft auf einer separaten Partition, aber das ist größtenteils veraltet. Manchmal ist man ein Symlink zum anderen. –

Antwort

1

Es wäre wahrscheinlich tragbarer, es als /usr/bin/find zu bezeichnen. Zum Beispiel auf Fedora /bin ist eigentlich ein symbolischer Link auf /usr/bin, also entweder funktioniert:

bash-4.3$ ls -l /bin/find 
-rwxr-xr-x. 1 root root 222608 Dec 28 18:26 /bin/find 
bash-4.3$ ls -l /usr/bin/find 
-rwxr-xr-x. 1 root root 222608 Dec 28 18:26 /usr/bin/find 

Aber auf einer aktuellen Ubuntu:

[email protected]:/# ls -l /bin/find 
ls: cannot access /bin/find: No such file or directory 
[email protected]:/# ls -l /usr/bin/find 
-rwxr-xr-x. 1 root root 229992 Jan 6 2014 /usr/bin/find 
+0

Ja, es funktioniert auch mit '/ usr/bin/find' (ich habe diese Variante zuerst überprüft), aber ich weiß nicht, welcher Ort besser ist ... Auf meinem Linux'/bin' ist auch ein Symlink zu '/usr/bin', der echte Ordner, in dem 'find.exe' in MSYS2 ist, wird auch als'/usr/bin' (von 'what find') gemeldet und ist wirklich wie' C: \ msys64 \ usr \ bin '. –

+1

Ich schätze, ich vermutete, dass/usr/bin/find empirisch besser ist. – larsks

1

würde ich nicht hart codierte den Pfad zu find und stattdessen empfehlen Weisen Sie Windows-Benutzer an, dass sie Ihr Skript in der MSYS2-Umgebung ausführen müssen. MSYS2 wird seine eigenen bin-Verzeichnisse am Anfang des Pfades platzieren, so dass find immer die MSYS2-Version anstelle der Microsoft-Version erhält.

Wenn Sie den Pfad zu find fest codieren, dann machen Sie die Dinge spröder als sie sein müssen.