Wie markiere ich Batch-Dateien als ausführbare Dateien in Bash / Cygwin?


4

In meinem Bestreben, meine Erfahrung in meiner Windows 7-Umgebung zu verbessern, habe ich cygwin installiert und Mintty als mein Befehlszeilenschnittstellentool verwendet. Das war schön und führt mich zurück zu meinen produktiveren Tagen in einer Unix-Umgebung.

Es gibt jedoch eine ärgerliche Sache, dass ich nicht richtig arbeiten kann. Stapeldateien (d. H. * .Bat) werden in der Befehlszeile nicht automatisch vervollständigt und bei Verwendung von ls --color auch nicht in der richtigen Farbe angezeigt. Ich habe das aufgespürt (glaube ich), dass die Fledermausdateien als rw-r - r-- angezeigt werden. Ich kann so etwas wie ./run_my_batch_file.bat über die Befehlszeile ausführen, und die Batchdatei wird ordnungsgemäß ausgeführt, aber ich muss den vollständigen Dateinamen eingeben, da die automatische Vervollständigung dies nicht übernimmt.

Ich habe versucht, 'chmod 750' (sowie verschiedene andere Dateimodi) auszuführen, um die Batch-Datei so zu ändern, dass sie das 'x'-Bit enthält, aber ihre Modus-Bits haben sich nicht geändert. Ich bin mir ziemlich sicher, dass ich das darauf zurückführen kann, dass ich meine lokalen Laufwerke mit der Option 'noacl' mounte. Hier ist die relevante Zeile aus meiner fstab:

none /cygdrive cygdrive binary,posix=0,user,noacl 0 0

Ich habe die 'noacl' eingefügt, da ohne sie die Dateimodus-Bits alles durcheinander zu sein scheinen. Hier ist ein Beispielprotokoll ohne den Parameter 'noacl'.

-r-x------+ 1 Administrators Domain Users 209K Jul 18 16:46 some.dll
-rwx------+ 1 Administrators Domain Users 867K Aug 22 11:21 binary_filea
-rwx------+ 1 Administrators Domain Users 736K Aug 28 18:02 binary_fileb
-rwx------+ 1 Administrators Domain Users 736K Aug 28 17:43 binary_filec
-rwx------+ 1 Administrators Domain Users  14K Jan 21  2010 cache_00.bak
-r-x------+ 1 Administrators Domain Users 354K Jun  6 22:42 cdb.exe
-rwx------+ 1 Administrators Domain Users   22 Mar 14 08:05 cleanup_scratch_folder.bat
drwx------+ 1 Administrators Domain Users    0 Mar  3 14:59 code
-rwx------+ 1 Administrators Domain Users 1.8K Aug 12 14:34 config.txt
-rwx------+ 1 Administrators Domain Users   52 Aug 28 19:05 console_history
-rwx------+ 1 Administrators Domain Users 3.8M Aug 23 09:46 copy_files.bat

(Beachten Sie, dass das oben aufgeführte Verzeichnis von meinem Laufwerk / cygdrive / d stammt - einem lokalen NTFS-Dateisystem). Das schien ziemlich durcheinander zu sein, also entschied ich mich für die Mount-Option "noacl", um genaue Dateimodi für die Dateien in meinen Verzeichnissen zu erhalten.

Ein letzter Hinweis: Ich habe das vollständige Paket zur Bash-Vervollständigung installiert. Ich habe kurz nachgesehen, ob ich eines der Vervollständigungspakete modifizieren kann, um zumindest einen Teil meiner Anforderungen zu erfüllen (dies ist die automatische Vervollständigung von Batch-Dateien), aber ich habe dort nichts gefunden, was relevant wäre.

Daher kann ich bei meinen Fragen die Modi für Batch-Dateidateien so ändern, dass sie 'x' enthalten, damit ich die Bash-Befehlszeile ordnungsgemäß vervollständigen kann (und auch die richtige Verzeichnisfarbe für sie erhalten, da es sich um ausführbare Dateien handelt). Auto-Vervollständigung ist wichtiger FWIW.

Vielen Dank.


Ob Sie es glauben oder nicht, wenn Sie ohne die noacl Option, sehen Sie genaue Berechtigungen. Der Teufel steckt im Detail. Die Dateien, die Sie in Ihrer Verzeichnisliste anzeigen, gehören sämtlichen Gruppenadministratoren (ja, Gruppen können der primäre Eigentümer von Dateien in Windows sein). Das Nachlaufen + on the permissions bedeutet, dass es Berechtigungen gibt, die im klassischen UNIX nicht codiert werden können rwxrwxrwx Syntax. Diese Berechtigungen sind in der ACL (Access Control List) verschlüsselt. Sie können die vollständige ACL für eine Datei oder ein Verzeichnis anzeigen, indem Sie Folgendes eingeben icacls FILE.
Fran

Zu Ihrer Information, die "Berechtigungen, die im klassischen UNIX nicht codiert werden können rwxrwxrwx "Syntax", auf die ich in meinem vorherigen Kommentar verweise, sind Dinge wie das ACE, das SYSTEM die vollständige Kontrolle über Ihre Dateien gewährt setfacl Befehl: setfacl -s user::rw-,group::r--,other:r-- FILE Das -s Option zu setfacl bedeutet, dass die ACL auf genau das eingestellt wird, was angezeigt wird, und die vorhandene ACL ersetzt wird. Cygwins setfacl wird dies tun, indem geerbte ACLs entfernt werden.
Fran

Antworten:


2

Ich bin mir der Antwort auf Ihre Frage nicht sicher, aber hier sind ein paar Dinge, die helfen könnten:

  • Überprüfen Sie, dass die PATHEXT Umgebungsvariable enthält .BAT.
  • Lesen Sie über die noacl Möglichkeit Hier . Es scheint, dass Sie es vielleicht besser machen, um zu entfernen noacl, und verbringen Sie einige Zeit damit, die richtigen Berechtigungen zu erhalten.
  • Fragen Sie auf der Cygwin Mailing-Liste . Es gibt viele Experten, die Ihre Frage mit ziemlicher Sicherheit beantworten können.

0

Für diejenigen, die verwendet noacl Optionen (die einzige vernünftige Option, um außerhalb von Cygwin zu leben) fügen einen Doppelpunkt hinzu : als erste Zeile Ihrer Batch-Datei.

Offizielle Dokumente sagen:

Es werden Dateien mit bestimmten Endungen (.exe, .com, .lnk) angenommen   ausführbar sein. Dateien, deren erste beiden Zeichen   "#!", "MZ" oder ": \ n" werden ebenfalls als ausführbar angesehen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.