Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Script om alle scriptbestanden op te sporen en uitvoerbaar te maken  (gelezen 2115 keer)

Offline Bloom

  • Lid
Ik heb al mijn bestanden en data op een fileserver staan (Linux natuurlijk, in mijn geval Debian Stable). Er is ook een 'bin'-directory die gekoppeld wordt aan desktopsystemen om een bende scripts en handigheidjes te kunnen uitvoeren. Dat gebeurt allemaal via NFS.

Nu heb ik het probleem (en ik heb nog geen oorzaak kunnen vinden) dat opeens alle bestanden die uitvoerbaar zouden moeten zijn, dat ineens niet meer zijn. Nu staan er bij sommige scritpbestanden ook gewone databestanden en het is natuurlijk niet de bedoeling, dat die uitvoerbaar gemaakt worden. We willen geen Windows-toestanden met uitvoerbare data.

Het hieronder staande script spoort alle scriptbestanden op in en onder ~/bin/ en maakt ze uitvoerbaar.

#!/bin/bash
echo Vind scriptbestanden en maak ze uitvoerbaar
for f in $(find ~/bin/ -type f); do
        line=$(head -n 1 "${f}")
        if [[ "${line}" == "#!/bin/"* ]]; then
                echo "script: ${f}"
                chmod +x "${f}"
        fi
done 2>/dev/null

Ik deel de code voor wat hij waard is. Je kunt er maar plezier van hebben.

Offline Nero

  • Lid
Re: Script om alle scriptbestanden op te sporen en uitvoerbaar te maken
« Reactie #1 Gepost op: 2016/09/10, 20:16:36 »
Wat als je het volledige if-statement vervangt door deze oneliner?head -1 "${f}" | grep -q '^#! */bin/' && echo "script: ${f}" && chmod +x "${f}"Daarmee bereik je ook de scripts die een spatie hebben na de shebang.


Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Script om alle scriptbestanden op te sporen en uitvoerbaar te maken
« Reactie #3 Gepost op: 2016/09/11, 17:53:06 »
Let op dat scripts ook kunnen beginnen met #!/usr/bin/env. Python of Perl scripts bijv.
Dan krijg je dit:
#!/usr/bin/env perl
#!/usr/bin/env python
#!/usr/bin/env bash

Maar goed, als dit je zelfgeschreven scripts zijn dan zal je vast wel weten of je dit gebruikt :)
« Laatst bewerkt op: 2016/09/11, 17:55:00 door Johan van Dijk »

Offline Bloom

  • Lid
Re: Script om alle scriptbestanden op te sporen en uitvoerbaar te maken
« Reactie #4 Gepost op: 2016/09/12, 07:18:44 »
Dat kun je oplossen door te controleren op een aanwezigheid van een shebang met het woord "bin" erin:
head -1 "${f}" | grep -q '^#!*bin/' && echo "script: ${f}" && chmod +x "${f}"
of door het oorspronkelijke if-bevel als volgt te modificeren:
if [[ "${line}" == "#!"*"bin/"* ]]; then