Wie markiere ich Batchdateien als ausführbare Dateien in bash / cygwin?

1892
Mark

Um meine Erfahrung in meiner Windows 7-Umgebung zu verbessern, habe ich cygwin installiert und mit mintty als Befehlszeilenschnittstellentool angefangen. Das war schön und bringt mich zurück zu meinen produktiveren Tagen in einer Unix-Umgebung.

Es ist jedoch eine nervige Sache, dass ich scheinbar nicht richtig arbeiten kann. Stapeldateien (z. B. * .bat) werden in der Befehlszeile nicht automatisch vervollständigt und auch nicht richtig gefärbt angezeigt, wenn ls --color verwendet wird. Ich habe dies (glaube ich) auf die Tatsache aufgespürt, dass die Bat-Dateien als rw-r - r-- angezeigt werden. Ich kann so etwas wie ./run_my_batch_file.bat von der Kommandozeile aus machen und die Batch-Datei wird ordnungsgemäß ausgeführt, aber ich muss den vollständigen Dateinamen eingeben, andernfalls wird sie nicht automatisch abgeschlossen.

Ich habe versucht, 'chmod 750' (sowie verschiedene andere Dateimodi) auszuführen, um die Batchdatei 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 dies der Tatsache zuschreiben kann, dass ich meine lokalen Laufwerke mit der Option 'noacl' mounte. Hier ist die relevante Zeile aus meinem Fstab:

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

Ich füge das 'noacl' ein, denn ohne es scheinen die Dateimodus-Bits alles durcheinander zu bringen. Hier ist ein Beispiel 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 obige Verzeichnis aus meinem / cygdrive / d-Laufwerk stammt - einem lokalen NTFS-Dateisystem). Das schien ziemlich durcheinander zu sein, also habe ich die 'noacl'-Mount-Option gewählt, um genaue Dateimodi für die Dateien in meinen Verzeichnissen zu erhalten.

Noch ein letzter Hinweis: Ich habe das vollständige Bash-Komplettierungspaket installiert. Ich habe kurz nachgeschaut, ob ich eines der Abschlusspakete modifizieren könnte, um zumindest einen Teil von dem zu erhalten, was ich will (was die automatische Fertigstellung der Batchdatei ist), aber ich habe nichts gefunden, was dort relevant wäre.

Daher kann ich bei meinen Fragen die Dateimodi der Batch-Datei ordnungsgemäß ändern, sodass sie 'x' enthält, sodass ich die Bereinigung der bash-Befehlszeile abschließen kann (und auch die richtige Verzeichnisfarbe, da es sich um ausführbare Dateien handelt). Autovervollständigung ist wichtiger FWIW.

Vielen Dank.

4
Ob Sie es glauben oder nicht, wenn Sie ohne die Option `noacl` mounten, sehen Sie genaue Berechtigungen. Der Teufel steckt im Detail. Die Dateien, die Sie in Ihrer Verzeichnisliste anzeigen, befinden sich alle im Besitz von Gruppenadministratoren (ja, Gruppen können der primäre Eigentümer von Dateien in Windows sein). Das nachfolgende "+" der Berechtigungen bedeutet, dass es Berechtigungen gibt, die in der klassischen UNIX-Syntax "rwxrwxrwx" nicht codiert werden können. Diese Berechtigungen sind in der ACL (Access Control List) codiert. Sie können die vollständige ACL für eine Datei oder ein Verzeichnis anzeigen, indem Sie "icacls FILE" eingeben. Fran vor 11 Jahren 0
Zu Ihrer Information, die "Berechtigungen, die nicht in der klassischen UNIX-Syntax" rwxrwxrwx "codiert werden können", auf die ich mich in meinem vorherigen Kommentar beziehe, sind Dinge wie das ACE, das SYSTEM die vollständige Kontrolle über Ihre Dateien gewährt. Nichts hindert Sie daran, diese zusätzlichen Berechtigungen mit dem Befehl `setfacl` zu entfernen:` setfacl -s user :: rw-, group :: r -, other: r-- FILE` Die `-s`-Option für` setfacl` bedeutet Um die ACL auf genau das zu setzen, was angezeigt wird, ersetzen Sie die vorhandene ACL. Cygwins `setfacl` tut dies, indem ererbte ACLs entfernt werden. Fran vor 11 Jahren 0

2 Antworten auf die Frage

2
Andrew Schulman

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

  • Überprüfen Sie, ob die PATHEXTUmgebungsvariable Folgendes enthält .BAT.
  • Lesen Sie hier die noaclOption . Es scheint, dass Sie möglicherweise besser entfernen und einige Zeit damit verbringen, die richtigen Berechtigungen zu erhalten.noacl
  • Fragen Sie in der Cygwin-Mailingliste nach . Es gibt viele Experten, die Ihre Frage fast sicher beantworten können.
0
gavenkoa

Wenn Sie noaclOptionen verwenden (die einzige vernünftige Option, um außerhalb von Cygwin zu leben), fügen Sie einen einzelnen Doppelpunkt :als erste Zeile Ihrer Stapeldatei hinzu.

Offizielle Dokumente sagen:

Dateien, die in bestimmten Erweiterungen (.exe, .com, .lnk) enden, werden als ausführbar angesehen. Dateien, deren erste beiden Zeichen "#!", "MZ" oder ": \ n" sind, werden ebenfalls als ausführbar betrachtet.