Was ist das nützlichste Skript, das Sie für den Alltag geschrieben haben? [geschlossen]


132

Ich frage mich nur, welche kleinen Skripte / Programme die Leute hier geschrieben haben, die einem im Alltag helfen (auch bekannt als nicht arbeitsbezogen).

Alles geht, bahnbrechend oder nicht. Für mich ist es im Moment ein kleines Python-Skript, um das Lauftempo bei gegebener Entfernung und verstrichener Zeit zu berechnen.


Ich habe einige wirklich coole arbeitsbezogene gesehen, aber nicht so viele "alltägliche" Skripte. Andererseits, wenn etwas bei der Arbeit Ihr Leben ruiniert und Sie es mit einem ordentlichen Skript repariert haben, wen soll ich dann beurteilen?
Kyle Walsh

10
Eine dieser Edelsteinfragen, bei denen sich der Stapelüberlauf lohnt. Eine Richtlinie, die vorschlägt, dass sie geschlossen wird, sollte nicht vorhanden sein, und jeder Mod, der dafür gestimmt hat, sie zu schließen, sollte keine sein.
Bill K

Dies ist eine für mich: github.com/codeforester/base . Dieses Framework hat meine Produktivität als SRE / DevOps-Person sprunghaft gesteigert und gleichzeitig den Zusammenhalt und die Zusammenarbeit im Team erhöht.
Codeforester

Antworten:


116

Mein oSchlüssel fiel auf meinem Laptop ab; Also schrieb ich ein Programm, das zwei 0Tastenanschläge innerhalb von 200 MS voneinander als o, zwei 0Tastenanschläge innerhalb von 700 MS voneinander als 0und ersetzt und den Rest ignoriert. So konnte ich meinen Laptop benutzen, bevor ich die Tastatur austauschen konnte.

Beeindruckend; Ich wusste nicht, dass dies so beliebt sein würde: p

Wie - Microsoft stellt eine nette kleine API-Funktion namens Hooks zur Verfügung .

Mit diesem Haken; Ich konnte einen "Filter" schreiben, der genau das tat, wofür ich ihn brauchte (Hinweis: Wenn Sie 1 mit Ihren Rückruffenstern zurückgeben, wird der Tastenanschlag nicht verarbeitet).

Der Grund, warum ich darüber Bescheid weiß, ist nicht, dass ich einen Keylogger geschrieben habe, sondern dass ich vor einiger Zeit einen Programm-Smiler für Synergy geschrieben habe.

Und ja. Ich habe ein anderes Programm geschrieben, das alphanumerische Tasten gegen eine zufällige alphanumerische Taste ausgetauscht hat, und ja; es war wirklich lustig: D.


1
Ich hätte vielleicht daran gedacht, nur auf die exponierte
Warren

2
Ich frage mich, warum ich nicht daran gedacht habe ... Ich habe das gleiche Prblem ... :-(
Asterit

1
Das erinnert mich an diesen XKCD-Comic: xkcd.com/196
JesperE

59
HA! Y00u wird 0000 nicht mehr in der Lage sein, 00n einen Standard-Keyb00ard einzugeben, ohne Ihre Finger neu zu trainieren! G0000d Glück!
Doug L.

107
Die große Frage ist, wie Sie es geschafft haben, dieses Programm zu schreiben, ohne den Buchstaben 'o' zu verwenden.
e.James

115

Ich habe den Code nicht mehr, aber das vielleicht nützlichste Skript, das ich geschrieben habe, war, ob Sie es glauben oder nicht, in VBA. Ich hatte einen nervigen Kollegen, der eine so kurze Zündschnur hatte, dass ich ihn als Kirschbombe bezeichnete. Er wurde oft wütend, wenn Kunden anriefen und dann aufstanden und anfingen, mich über die Kabinenwand hinweg anzuschimpfen, was meine Produktivität und Moral beeinträchtigte.

Ich hatte immer Microsoft Excel geöffnet. Wenn er dies tat, ging ich mit der Alt-Tab-Taste zu Excel und dort in der Symbolleiste befand sich ein neues Symbol mit dem Bild einer Kirschbombe. Ich würde diskret darauf klicken ... und nichts würde passieren.

Kurz danach bekam ich jedoch einen Anruf und sagte etwas wie "Ja, ja, das klingt schlecht. Ich sollte besser einen Blick darauf werfen." Und dann stand ich auf, entschuldigte mich bei der Kirschbombe und ging weg.

Was passiert ist, ist, dass wir NetWare verwendet haben und ein primitives Nachrichtensystem eingebaut war. Wenn ich auf die Schaltfläche klickte, sendete ein kleines VBA-Skript eine NetWare-Nachricht an meine Freunde und teilte ihnen mit, dass die Cherry Bomb wieder dabei war und sie bitte ruf mich an. Er hat es nie herausgefunden :)


94
Sie wissen, dass Sie ein Programmierer sind, wenn Sie ein Programm schreiben, um aus einer schwierigen sozialen Situation herauszukommen.
Cadoo

7
Genial! Das ist Social Engineering vom Feinsten!
Beska

1
Hoffen wir, dass Cherry Bomb StackOverflow nicht verwendet :)
Pedro Luz

94

Ein Bash-Skript wurde aufgerufen , sodass ich Folgendes eingeben kann, wenn ich in bin /a/very/deeply/nested/path/somewhereund N Verzeichnisse "nach oben" gehen möchte :up N

#!/bin/bash
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
    P=$P/..
done
cd $P

Beispielsweise:

/a/very/deeply/nested/path/somewhere> up 4
/a/very> 

NB von gmatt:

Wenn Sie die oben genannte großartige Arbeit abarbeiten, können Sie sie zu einer Back-Funktion erweitern, indem Sie Folgendes in Ihren Bashrc einfügen:

function up( )
{
LIMIT=$1
P=$PWD
for ((i=1; i <= LIMIT; i++))
do
    P=$P/..
done
cd $P
export MPWD=$P
}

function back( )
{
LIMIT=$1
P=$MPWD
for ((i=1; i <= LIMIT; i++))
do
    P=${P%/..}
done
cd $P
export MPWD=$P
}

4
+1 Absolut f ‚ing brilliant! Ich werde das viel benutzen !
wzzrd

12
Warum sollten Sie leicht lesbaren Code durch schwer lesbaren Code ersetzen? Läuft Ihr Computer schneller, wenn Sie weniger Quellcodezeilen haben?
Beska

3
gnud: meinen sauberen und klaren code durch müll ersetzen? Nein Danke.
Foxdonut

2
brillant! Ich habe dies um eine backMethode erweitert, sodass Sie bei jedem Verbrauch leicht hin und her gehen können. Um es zu benutzen, füge dies in dein bashrc ein (sorry wegen der Shit-Formatierung): function up () {LIMIT = $ 1 P = $ PWD für ((i = 1; i <= LIMIT; i ++)) do P = $ P / .. erledigt cd $ P export MPWD = $ P} Funktion zurück () {LIMIT = $ 1 P = $ MPWD für ((i = 1; i <= LIMIT; i ++)) erledigt P = $ {P% / ..} erledigt cd $ P export MPWD = $ P}
ldog

2
Bin ich verrückt? Wie zum Teufel funktioniert das? CD in einem Skript wird dort CD, aber wenn das Skript existiert, sind Sie wieder im selben / ursprünglichen Verzeichnis! Funktioniert meine Bash anders als Ihre?
JohnnyB

67

Super Remote Reset-Taste.
Ein Rack mit spezieller Simulationshardware (damals, als ein Raum voller VME-Kisten weniger als Ihre GPU leistete), den ein Benutzer auf der anderen Seite der Welt in den frühen Morgenstunden abstürzen würde. Es dauerte eine Stunde, um ins Labor und durch die Sicherheitskontrolle zu gelangen.

Wir durften uns jedoch nicht mit dem Super Special Controller verbinden oder die Hardware modifizieren. Die Lösung war eine alte DEC-Workstation mit einem Epson-Nadeldrucker. Kleben Sie ein Plastiklineal auf den Papiereinzugsknopf und positionieren Sie den Drucker in der Nähe der Reset-Taste.
Melden Sie sich als regulärer Benutzer beim WS an (kein Root zulässig, alle externen Ports gesperrt), drucken Sie ein Dokument mit 24 leeren Zeilen - wodurch der Papiereinzugsknopf gedreht und das Lineal über den Reset der Super-Spezialhardware gedrückt wurde .


Fantastische Geschichte! Ich bin mir nicht sicher, ob ich dir glauben soll oder nicht;)
Greg Whitfield

Es wurde schließlich durch ein Leistungsschalterrelais ersetzt, das an die DTR-Leitung an der seriellen Schnittstelle angeschlossen war - dies erforderte jedoch Root-Zugriff. Und ich hätte DEC WS sagen sollen, weil dort Ultrix lief.
Martin Beckett

Wow, die Anstrengungen, die wir unternehmen, um die Sicherheit zu gewährleisten!
Chris Ballance


5
Wenn wir damals CD-Fächer gehabt hätten, wäre es eine einfachere Lösung gewesen
Martin Beckett

63

Unter Windows XP habe ich einen AT-Job festgelegt, um diesen Befehl täglich in C: \ auszuführen

dir /s /b * > dirlist.txt

Hier wird der vollständige Pfad aller Dateien auf dem Laufwerk C aufgelistet. Wann immer ich dann eine Datei finden muss, kann ich verwenden findstr. Dies ist besser als die Windows Explorer-Suche, da reguläre Ausdrücke auf dem gesamten Pfad abgeglichen werden können. Beispielsweise:

findstr ".jpg" dirlist.txt
findstr /i /r "windows.*system32.*png$" dirlist.txt

Dies ist eine sehr schnelle Lösung zum Einrichten und ideal, wenn Sie eine neue Windows-Installation und keine Internetverbindung haben.

Wenn Sie innerhalb bestimmter Dateitypen nach einem Muster suchen müssen, listen Sie zuerst alle Dateien auf, die Sie überprüfen müssen, und suchen Sie dann in ihnen. Um beispielsweise ein Java- oder Python-Programm zu finden, das ein Bild umdreht, können Sie Folgendes tun:

findstr "\.java \.py" dirlist.txt > narrowlist.txt
findstr /i /r /f:narrowlist.txt "flip.*image"

8
Alter, was für eine großartige Idee.
Epaga

10
Genau das macht das Unix-Lokalisierungsprogramm
Mark Baker,

4
@Mark Was zeigt, dass selbst wenn Sie mit Windows arbeiten müssen, Sie eine Menge nützlicher Dinge von Unix lernen können
Liam

1
Ich habe eines dieser Skripte für meinen Ordner "Dokumente" erstellt, das ich scheinbar nie organisiert habe :-)
September 2008

1
und dort benutzte ich die Google Desktop-Suche: D
trotz

38

Ich habe ein Python-Skript, das automatisch ausgeführt wird, wenn ich meine Digitalkamera anschließe.

Es kopiert alle Bilder von der Karte in der Kamera, sichert sie und lädt sie dann auf Flickr hoch.


Das Upload-to-Flickr-Stück stammt von uploadr.py (was ich nicht gutschreiben kann).

Hier ist der Python-Code zum Entladen der Kamera. Es wird durch SRCDIR wiederholt und benennt jedes Bild mit Datum und Uhrzeit, bevor die Bilder nach DESTDIR kopiert werden.

#!/usr/bin/python

import os
import string
import time
import shutil

###################################################
__SRCDIR__ = "/mnt/camera"
__DESTDIR__ = "/home/pictures/recent"
###################################################
def cbwalk(arg, dirname, names):
    sdatetime = time.strftime("%y%m%d%H%M")
    for name in names:
        if string.lower(name[-3:]) in ("jpg", "mov"):
            srcfile = "%s/%s" % (dirname, name)
            destfile = "%s/%s_%s" % (__DESTDIR__, sdatetime, name)
                    print destfile
            shutil.copyfile( srcfile, destfile)
###################################################
if __name__ == "__main__":
    os.path.walk(__SRCDIR__, cbwalk, None)

Teilen Sie den Code, und ich werde eine Up-Abstimmung teilen :)
Auch Mien

40
Dies wird großartig funktionieren, bis Sie die besonderen Bilder vergessen, die Sie in der Nacht zuvor gemacht haben ...
Ed Guiness

Das Ganze ist eigentlich ein zweistufiger Prozess. Im ersten Schritt werden die Dinge von der Kamera entfernt und umbenannt. Im zweiten Schritt werden Sie gefragt, ob Sie auf Flickr hochladen möchten. Das liegt mehr daran, dass das Hochladen meine Bandbreite zerstört, als daran, dass ich mir Sorgen darüber mache, was ich hochlade.
Mark Biek

5
Wie löst man das Bit "Run on Plug-In" aus?
ijw


32

Vor ein paar Jahren habe ich mit Hilfe einiger Win32-APIs eine Winforms-App geschrieben, um mich für eine Stunde vollständig von meinem Computer auszuschließen, damit ich gezwungen bin, Sport zu treiben. Weil ich faul war? Nein ... weil ich ein persönliches Fitnessziel hatte. Manchmal braucht man nur einen kleinen Kick, um loszulegen :)


16

Ich habe ein Python-Skript geschrieben, das zu allen von mir gelesenen Web-Comics geht und alle neuen Comics herunterlädt. Ich führe das nur einmal am Tag aus, und es ist nicht erforderlich, jede Site einzeln zu besuchen. Besuchen Sie einfach den Ordner / Comics /. ;)


Hmmm. Wenn es sich um werbefinanzierte Comics handelt, würde ich mir Sorgen machen, dass Sie nicht "bezahlen", indem Sie das Risiko eingehen, die Anzeigen zu sehen :-)
Matthew Scouten

2
@Matthew - Ich verstehe Ihren Standpunkt, aber ich verstehe nicht, warum das Betrachten einer Werbung ein moralisches / ethisches Problem ist. In diesem Fall müssen die Autoren von No-Script- und Popup-Blockern viel erklären. ;)
Zwiebelritter

1
Ich habe kein Problem mit Popup-Blockern, da Popups eine missbräuchliche Art der Anzeigenschaltung sind. Es ist nicht gerade eine moralische Frage, sondern eher eine Frage der Fairness. Ich verwende auf den meisten Websites einen Adblocker, deaktiviere ihn jedoch für bestimmte Websites, die ich häufig besuche und unterstützen möchte. Das Abrufen der Comics mit einem Python-Skript (und das Sehen der Site überhaupt nicht) fühlt sich für mich überfordert an, aber ich konnte Ihnen nicht genau sagen, wo sich die Zeile befindet.
Matthew Scouten

14

Mein .cmd-Backup-Skript. Es läuft jede Nacht auf meinem Server und benennt die Sicherungsdateien nach dem Wochentag. Eine ganze Woche Backups hat mich (und meine Familie) viele Male gerettet:

:: Backup args:
:: / V Überprüfen? (ja Nein)
:: / R Zugriff auf Eigentümer einschränken? (ja Nein)
:: / RS Wechselspeicher? (ja Nein)
:: / HC Hardwarekomprimierung (ein / aus)
:: / M Sicherungstyp (normal / kopieren / differenziell / inkrementell / täglich)
:: / L Protokolldateityp (f / s / n)
:: / D "Beschreibung"
:: / J "Jobname"
:: / F "Dateiname"

SETLOCAL

:: Stellen Sie sicher, dass Netzwerklaufwerke bereitgestellt sind
CALL C: \ bat \ configs \ MapShares-home.cmd
Echo auf

heute einstellen =% DATE: ~ 0,3%
if% today% == Mon set gestern = 0Sonntag
if% today% == Di gestern eingestellt = 1Montag
if% today% == Mi set gestern = 2Dienstag
if% today% == Do gesetzt gestern = 3Mittwoch
if% today% == Fr gesetzt gestern = 4Donnerstag
if% today% == Sa set gestern = 5Freitag
if% today% == So untergegangen gestern = 6Samstag

setze configsDir =% ~ dp0
setze storePath = C: \ mybackups

:: (zB: Montag C Dateien)
set title =% gestern% backup set


echo% DATE %% TIME %% title%> "% storePath% \% gestern% _backup.log"

CALL BackupConfigs.bat

:: Neue BKF-Datei erstellen
Rufen Sie C: \ WINDOWS \ system32 \ ntbackup.exe backup ^ auf
    "@% configsDir% \ daily.bks" ^
    / V: ja / R: nein / RS: nein / HC: aus / M normal / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% gestern% .bkf" ^
    >> "% storePath% \% gestern% _backup.log"

echo% DATE %% TIME% Completed >> "% storePath% \% gestern% _backup.log"

Kopieren Sie "% storePath% \% gestern% .bkf" "V: \ Backups \ NEPTUNE"

CALL C: \ bat \ clean-temps.bat

defragmentieren -v C:> "% storePath% \% gestern% _defrag.log"

:: Backup-Verzeichnisse anzeigen
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::Pause


2
Einige nette .cmd-Datei-Tricks. Ich wusste, dass Sie '^' verwenden können, um Umleitungen und Pipes zu vermeiden, aber ich wusste nicht, dass Sie es auch für die Fortsetzung von Leitungen verwenden können. Cool :)
Patrick Cuff

Die Welt braucht weniger .bat-Skripte, nicht mehr! :-)
JesperE

2
Und die Konsequenz ist, dass die Welt weniger Windows benötigt. Bis dahin ist dies der kleinste gemeinsame Nenner. Ich teile dieses Skript, weil Millionen von Menschen es so verwenden können, wie es ist.
Chris Noe

14

"backup.sh", das den Inhalt eines Verzeichnisses tariert und an mein Google Mail-Konto sendet.


Das ist cool. Obwohl ich keine Computer unter meinen Zehnern habe, die SMTP-Setup haben. Traurig.
mxcl

Könnten wir bitte den Code haben?
Kostas

14

Ich habe ein Skript geschrieben, das jeden Tag in meinem Team verwendet wurde. Als ich für Intel gearbeitet habe, hatten wir eine App, die mit einer Zugriffsdatenbank sprach, um einen Speicherauszug mit Registerinformationen abzurufen (ich habe an der Validierung von Chipsätzen gearbeitet). Diese Informationen (aus einer SQL-Abfrage) werden in eine CSV-Datei, eine HTML-Datei und eine Excel-Datei kopiert. Der gesamte Vorgang dauerte fast 2 Stunden. Kein Witz. Keine Ahnung, warum es so lange gedauert hat. Wir fingen eine Stunde vor dem Mittagessen an, gingen zum Mittagessen und kamen dann zurück.

Ich dachte, dass es einen besseren Weg geben muss, dies zu tun. Ich habe mit dem Team gesprochen, das die Registrierungsdatenbank verwaltet und den SQL-Code von ihnen erhalten hat. Ich habe dann ein Perl-Skript geschrieben, das die Daten erfasst und in die Formate CSV, HTML und Excel ausgegeben hat. Laufzeit? Etwa 1-2 Sekunden. Eine große Geschwindigkeitsverbesserung.

Ich habe auch ein paar Skripte geschrieben, als ich 2006 im Irak stationiert war (ich habe 9 Jahre in der Nationalgarde gedient - bin im Dezember rausgekommen). Wir haben diese alte App namens ULLS-G (Unit Level Logistics System - Ground) verwendet, die in ADA geschrieben wurde und ursprünglich unter DOS lief. Sie haben es genug gehackt, um es unter Windows XP in einer Befehlsshell auszuführen. Dieses System hatte keine Mausschnittstelle. Alles war über die Tastatur und es hatte keine Batch-Funktionalität. Nehmen wir also an, Sie wollten Lizenzen für alle Fahrzeugbetreiber ausdrucken? Nun ... wir hatten 150 Soldaten in unserer Einheit, also hat es lange gedauert. Nehmen wir an, jeder hat sich für ein neues Fahrzeug qualifiziert und Sie wollten es zu allen Fahrerqualifikationen hinzufügen? Du musstest es eins nach dem anderen tun.

Ich konnte einen ODBC-Treiber für die SAGE-Datenbank finden (was ULLS-G verwendete) und schrieb Perl-Skripte, die mit der SAGE-Datenbank kommunizieren konnten. Dinge, die über eine Stunde dauerten, dauerten nur noch wenige Sekunden. Ich habe auch meine Skripte und den Treiber für die Berichterstellung verwendet. Wir mussten jeden Morgen alle Informationen dem Bataillon melden. Andere Einheiten schrieben die Informationen jeden Morgen von Hand ein. Ich habe ein Excel-Makro erstellt, das denselben Treiber verwendet und mit der SAGE-Datenbank gesprochen und die Excel-Tabelle auf diese Weise aktualisiert hat. Es ist das komplizierteste und einzige Excel-Makro, das ich je geschrieben habe. Es hat sich ausgezahlt, weil sie mir die Army Commendation Medal verliehen haben. Also ja, ich habe eine Medaille beim Militär für das Schreiben von Perl-Skripten bekommen :) Wie viele können das sagen? ;)


13

Ich bin Privatpilot. Ich habe ein paar Skripte geschrieben, die Wetterinformationen für lokale Flughäfen von aviationweather.gov erhalten. Sie waren nützlich für eine schnelle Antwort auf die Frage "Ist heute ein guter Tag zum Fliegen?"


Ich hoffe für Ihre Passagiere, dass Ihr Skript gut fehlschlägt, wenn aviationweather.gov sein Layout ändert und Ihren Parser kaputt macht!
MatthieuP

1
Könnten Sie bitte das Skript teilen?
JJD

12

Ein Greasemonkey-Skript, das offensichtlich dumme [*] Kommentare von der Spieleseite Kotaku.com entfernt.

[*] Wie durch häufige Rechtschreibfehler, Großbuchstaben, übermäßige Verwendung von "LOL" und ähnliche Heuristiken festgestellt.


6
Cool. Ich möchte die regulären Ausdrücke extrahieren und zufällige Anweisungen generieren, die nur aus Ausdrücken bestehen, die mit einem oder mehreren übereinstimmen.
Gnud

11

alias dir = 'ls -al' ist mein bevorzugtes Lieblingsskript.


4
eww ... Ich möchte oft den anderen Weg gehen ...
chills42

1
Sie müssen sich fragen, warum die Leute anfangen, Antworten auf Fragen mit einem subjektiven Tag abzustimmen ... was ist der verdammte Punkt?
Greg Whitfield

Ja, das ist kritisch :)
Nick

11

Ein HTML-Scraper mit Thread, mit dem Sie alle verfügbaren Untertitel für Serien / Filme von einer Website herunterladen können, die nur schwer zu verwenden ist (Sie müssen nach einer Suche viermal klicken, um zur Download-Seite zu gelangen, um weitere Anzeigen anzuzeigen). Jetzt stelle ich einfach die Suchkriterien ein und drücke auf Download.


2
Er wird es teilen und die Seite würde es herausfinden :). Besser manchmal nicht teilen ...
Camilo Díaz Repka

11

Ein Perl-Skript, das meine lokale Craigslist nach ausgewählten Kategorien in eine SQL-Datenbank kratzt, die ich dann abfragen kann.

V2 aktualisiert die Datenbank mit einem Timer und benachrichtigt mich, wenn ich eine Übereinstimmung mit einer der Abfragen habe, wodurch mir im Grunde ein Hintergrundagent für CL zur Verfügung gestellt wird.


8

Umbenennen von Massendateien per Drag & Drop.

Vor langer Zeit habe ich ein kleines VBScript erstellt, das eine RegEx akzeptiert und Dateinamen entsprechend ersetzt. Sie würden einfach eine Reihe von Dateien oder Ordnern darauf ablegen. Ich fand das im Laufe der Jahre sehr nützlich.

gist.github.com/15824 (Achtung, die Kommentare sind auf Deutsch)


Scheint albern, eine Beschreibung ohne Code abzustimmen.
Chris Noe

Der Code wäre etwas zu viel für die Website. Vielleicht war "klein" etwas untertrieben. Es ist 170 LOC.
Tomalak

Ich könnte das Skript irgendwo hochladen und den Link hier posten, wenn Sie interessiert sind.
Tomalak

8

Ein schnelles und schmutziges Python-Skript, das alle 5 Sekunden das DNS für google.com nachschlug und einmal piepste, wenn es erfolgreich war, und zweimal, wenn es fehlschlug.

Ich schrieb dies in einer Zeit, in der ich mit einem sehr schuppigen Heimnetzwerk leben musste. Dadurch konnte ich sofort den Zustand des Netzwerks erkennen, selbst als ich mit beiden Händen voller Netzwerkkabel und einer Taschenlampe im Mund mit dem Kopf voran unter dem Schreibtisch durch den Raum ging.


5 Sekunden? Muss wirklich nervig geworden sein.
Ponkadoodle

Nun ja, es hat mich nach ungefähr 30 Minuten zu Fledermäusen getrieben. Die Idee war, möglichst zeitnahes Feedback zu erhalten. Normalerweise konnte ich Dinge in ungefähr 10 Minuten reparieren.
Matthew Scouten

8

Dies ist von einem Beitrag in meinem Blog vor ein paar Monaten von einer Idee, die ich für cool hielt, zu einem der besten kleinen Hacks geworden, die ich in letzter Zeit gehustet habe. Ich zitiere es hier vollständig:

==================

Ich verbringe viel Zeit in Bash. Für Uneingeweihte ist bash ein System, das Sie auf den meisten Unix-Computern und zum Glück auf einigen Fenstern und jedem Mac finden. Auf den ersten Blick ist es nicht mehr als eine Befehlszeilenschnittstelle und daher für die meisten Benutzer, die solche Dinge als Anachronismus betrachten, den sie lieber vergessen würden, vom Radar verschwunden.

Ich mache fast alles in Bash. Ich lese meine E-Mail von einer Befehlszeile, weshalb ich markierte E-Mails meide. Ich navigiere in Verzeichnissen, bearbeite Dateien, nehme an der täglichen Überprüfung und Zustellung des Quellcodes teil, suche nach Dateien, suche in Dateien, starte meinen Computer neu und durchsuche gelegentlich sogar Webseiten über die Befehlszeile. Bash ist das Herz und die Seele meiner digitalen Existenz.

Das Problem ist, dass ich normalerweise ungefähr 6 Bash-Fenster gleichzeitig geöffnet habe. Bei der heutigen Arbeit hatte ich einen Webserver, einen anderen, der an meiner Datenbank herumfummelte, einen dritten, vierten und fünften, der verschiedene Dateien bearbeitete, während ein sechster durch meinen Computer lief und versuchte, die Namen aller Dateien auf dem System aufzuzeichnen. Warum? Weil es praktisch ist, ein solches Archiv durchsuchen zu können, wenn Sie wissen möchten, wo Sie ein Objekt anhand des Dateinamens finden können.

Wenn Sie dies tun, werden in Ihrer Steuerleiste viele Fenster mit dem Namen "bash" angezeigt. Das ist in Ordnung, wenn Sie nur einen von ihnen haben, aber seine Qual, wenn Sie 6 oder mehr haben ... und zwei Dutzend andere Dinge, die vor sich gehen. Ich habe drei Monitore unter dem gleichzeitigen Befehl eines Tastatur / Maus-Paares und ich habe immer noch das Bedürfnis nach mehr. In jedem dieser Fenster sind mehrere Bash-Terminals geöffnet.

Also habe ich das zusammengeschmissen. Platzieren Sie diese Zeilen zunächst in Ihrem .bash_profile:

  export PROMPT_COMMAND='export TRIM=`~/bin/trim.pl`'
  export PS1="\[\e]0;\$TRIM\a\]\$TRIM> "
  trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG

Ich habe Dutzende von Absätzen darüber geschrieben, wie das alles funktioniert und warum es so eingerichtet ist, wie es ist, aber Sie sind nicht wirklich interessiert. Vertrau mir. Es gibt ein ganzes Kapitel eines Buches darüber, warum ich ...in dieser dritten Zeile "CMD = ; echo ..." gemacht habe. Viele Leute (einschließlich Bluehost, wo meine andere Domain gehostet wird) verwenden immer noch eine alte Version von Bash mit großen Fehlern im Umgang mit Fallen, also bleiben wir dabei. Sie können das CMD entfernen und durch $ BASH_COMMAND ersetzen, wenn Sie in Ihrer Bash-Version aktuell sind und Lust auf Recherchen haben.

Wie auch immer, das erste Skript, das ich benutze, ist hier. Es wird eine nette Eingabeaufforderung erstellt, die Ihren Computernamen und Ihr Verzeichnis enthält und auf eine angemessene Länge reduziert ist:

                       ============trim.pl===========
  #!/usr/bin/perl

  #It seems that my cygwin box doesn't have HOSTNAME available in the 
  #environment - at least not to scripts - so I'm getting it elsewhere.
  open (IN, "/usr/bin/hostname|");
  $hostname = <IN>;
  close (IN);
  $hostname =~ /^([A-Za-z0-9-]*)/;
  $host_short = $1;

  $preamble = "..." if (length($ENV{"PWD"})>37);

  $ENV{"PWD"} =~ /(.{1,37}$)/;
  $path_short = $1;

  print "$host_short: $preamble$path_short";

                        ==============================

Oben in diesem Blog-Beitrag befindet sich eine Warnung, die Sie jetzt lesen sollten, bevor Sie dumme Fragen stellen wie: "Warum haben Sie die Umgebungsvariable HOSTNAME nicht einfach über @ENV verwendet?" Einfach: Weil das nicht für alle Systeme funktioniert, auf denen ich es ausprobiert habe.

Nun zum wirklich coolen Teil. Erinnern Sie sich an Zeile 3 des Zusatzes .bash_profile?

  trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG

Die Skriptausgabe von trim.pl wird im selben Container wie zuvor ausgegeben und sowohl an die Eingabeaufforderung als auch an den Fenstertitel gedruckt. Diesmal wird jedoch der gerade eingegebene Befehl hinzugefügt! Aus diesem Grund möchten Sie dies nicht alles in Ihrem .bashrc tun: Jedes Skript, das Sie ausführen (auf meinem Computer ist der Mensch einer von ihnen), löst dieses Ding in jeder Zeile aus. Die Leistung des Menschen wird durch das, was wir hier tun, ernsthaft verstümmelt. Wir spielen nicht gerade gut mit dem Terminal.

Um den Befehl zu erfassen, den Sie gerade eingegeben haben, nehmen wir den Verlauf der Bash und würfeln ihn ein wenig:

                        ===========hist.pl============
#!/usr/bin/perl

while (<STDIN>)
{
        $line = $_
}

chomp $line;
$line =~ /^.{27}(.*)/;
print $1;
                        ==============================

Jetzt habe ich ein paar Millionen Fenster und sie sagen Dinge wie:

  castro: /home/ronb blog
  Ron-D630: /C/ronb/rails/depot script/server
  Ron-D630: /C/ronb/rails/depot mysql -u ron -p
  Ron-D630: /C/ronb/rails/depot find . > /C/ronb/system.map
  Ron-D630: /C/ronb/rails/depot vi app/views/cart.html.erb
  Ron-D630: /C/perforce/depot/ p4 protect
  Ron-D630: /C/perforce/depot/ p4 sync -f
  Ron-D630: /C/perforce/depot/

An der fröhlichen kleinen Leiste am unteren Bildschirmrand kann ich jetzt auf einen Blick erkennen, welche welche ist. Und da wir PS1 eingestellt haben, wird der Befehlsname erneut durch die Ausgabe von trim.pl ersetzt, sobald die Ausführung eines Befehls abgeschlossen ist.

UPDATE (am selben Tag): Dieses Zeug (die .bash_profile-Einträge) hat mich in aller Munde gebracht, als ich es in meinem .bashrc ausprobiert habe. Ihre .bashrc wird von nicht interaktiven Skripten ausgeführt, wenn Sie bash als Sprache aufrufen. Ich habe das getroffen, als ich versucht habe, einen Mann zu benutzen. Alle Arten von Müll (der vollständige Text meiner .bashrc plus Fluchtzeichen) wurden oben auf der Manpage angezeigt. Ich würde vorschlagen, dieses Juwel mit einem schnellen "Mann-Mann" -Aufruf an der Kommandozeile zu testen, sobald Sie alles zusammen haben.

Ich denke, es ist Zeit für mich, den benutzerdefinierten Müll aus meinem .bashrc zu ziehen und ihn dort abzulegen, wo er hingehört ...

Zufällig habe ich an einem Punkt in diesem Prozess "Mannfalle" eingegeben.


8

An meinem früheren Arbeitsplatz waren die Bürozeiten lächerlich. Es war eine Softwarefirma und mein Chef wurde gelutscht. Er gab uns gegen 17:30 Uhr Arbeit (genau dann, wenn es Zeit war, nach Hause zu gehen) und ließ uns den Job bis nach 23:00 Uhr beenden (weit nach unseren idealen produktiven Stunden). Oder er würde nervige Probleme in Code finden, der noch in Bearbeitung war.

Also habe ich eine Batch-Datei und ein Skript erstellt, die meinen Computer zu einer zufälligen Zeit zwischen 19:00 und 20:00 Uhr ausschalten. Es hatte einen 1-Minuten-Timer für den Fall, dass ich nach Stunden bleiben würde und den Abschaltvorgang abbrechen musste.

Aber ich würde meinen Schreibtisch vor 17:00 Uhr verlassen, damit er mich nicht finden konnte, um mich zu behalten, wenn er um die Kasse herum Müll wegwerfen wollte. Wenn er an meinen Schreibtisch kam und meinen Computer anschaute, würde er denken, ich wäre immer noch in der Speisekammer oder im nahe gelegenen Minimarkt, um ein paar Chips oder ähnliches zu holen. Aber wenn es um diese Zeit aus war, rief er mein Handy an und sagte mir, ich solle zurück ins Büro.

Ich habe auch geplant, dass das BIOS auf meinem Computer meinen Computer gegen 8:00 Uhr oder 9:00 Uhr einschaltet, falls ich mich faul fühle und gegen 10:00 Uhr oder 11:00 Uhr spazieren gehen möchte. Wenn ich erwischt würde, wie ich zu meinem Schreibtisch gehe, würde er fragen: "Wo warst du den ganzen Morgen?" Und ich würde sagen "Ich war bei einem Treffen mit dem Marketing-Team." oder "Ich war gerade beim Frühstück."

dummer Hund


7

Ich habe in einem Technologie-Sommercamp gearbeitet, und wir mussten diese Aufzeichnungen für jedes der Kinder in der Gruppe am Ende der Woche verfassen, die sie dann als Andenken erhielten und mit nach Hause nahmen. Normalerweise bestanden diese aus einer Reihe allgemeiner Sätze und ein bis zwei personalisierten Sätzen. Ich habe ein Python-Skript geschrieben, das eine dieser Aufzeichnungen aus einer Reihe von vordefinierten Sätzen zusammensetzt und dem Benutzer erlaubt, in der Mitte einige personalisierte Sätze hinzuzufügen. Dies sparte mir und anderen Beratern, die ich in das Geheimnis einweihte, sehr viel Zeit. Obwohl so viel davon automatisiert war, sahen unsere Aufzeichnungen immer noch besser aus als viele der "ehrlichen", weil wir mehr Zeit in die personalisierten Teile investieren konnten.


6
#! /bin/bash
# check to see if site is up
#   if it is, don't worry
#   if it's down, restart apache after get a process listing
#
# v.1 Warren M Myers - initial stab
#     31 Aug 06
#

ERRCOD='7'
WHEN=`date +%d%b%y`
REPT="~/psaux.$WHEN.txt"
STARS='********************'

curl -I http://www.shodor.org > /var/tmp/curlret.txt

if [ "$?" = "$ERRCOD" ]; then
    # return was unable to connect to host: save ps -aux; mail report
    ps -aux > $REPT
    echo $STARS
    echo 'curl return results'
    echo
    cat curlret.txt
    echo
    echo $STARS
    echo 'ps -aux results'
    cat $REPT
    echo
    echo $STARS
    echo 'restarting apache'
    /etc/init.d/apache2 restart
    echo 'apache restarted'
    echo
    echo "ps -aux results saved in $REPT"
fi

rm -f /var/tmp/curlret.txt

6

Ein Greasemonkey-Skript zum Hinzufügen eines Kontrollfelds "Drücken Sie diese Taste viel" zu einem Online-Spiel.


6

Ein kleines Skript, das einige beliebte Websites auf Anzeigen überwacht, die meinen Fähigkeiten entsprechen, und mir eine E-Mail per E-Mail sendet.


6

Ich benutze dies als automatisch geladene Funktion. Ich kann einfach "mycd" eingeben und eine Liste von Verzeichnissen wird angezeigt, in die ich häufig cd. Wenn ich die Nummer kenne, kann ich einfach so etwas wie "mycd 2" sagen. Um der Liste ein Verzeichnis hinzuzufügen, geben Sie einfach "mycd / tmp / foo / somedirectory" ein.

function mycd {

MYCD=/tmp/mycd.txt
touch ${MYCD}

typeset -i x
typeset -i ITEM_NO
typeset -i i
x=0

if [[ -n "${1}" ]]; then
   if [[ -d "${1}" ]]; then
      print "${1}" >> ${MYCD}
      sort -u ${MYCD} > ${MYCD}.tmp
      mv ${MYCD}.tmp ${MYCD}
      FOLDER=${1}
   else
      i=${1}
      FOLDER=$(sed -n "${i}p" ${MYCD})
   fi
fi

if [[ -z "${1}" ]]; then
   print ""
   cat ${MYCD} | while read f; do
      x=$(expr ${x} + 1)
      print "${x}. ${f}"
   done
   print "\nSelect #"
   read ITEM_NO
   FOLDER=$(sed -n "${ITEM_NO}p" ${MYCD})
fi

if [[ -d "${FOLDER}" ]]; then
   cd ${FOLDER}
fi

}

Wenn ich "mycd" ausführe, erhalte ich: "-bash: print: Befehl nicht gefunden". Wenn ich "mycd / folder /" verwende, wird /tmp/mycd.txt nichts hinzugefügt. Habe ich einige falsche Einstellungen?
Léo Léopold Hertz 준영

Ah, ja, vielleicht möchten Sie die 'print'-Anweisungen durch' echo 'ersetzen. ;-)
wzzrd

@wzzrd Wie demütigend;) Sehr coole Funktion, @Ethan Post. Ich danke Ihnen für das Teilen!
Léo Léopold Hertz 준영

5

Ich möchte meine Fotos in einem Verzeichnis speichern, das auf dem Aufnahmedatum basiert. Aus diesem Grund habe ich ein Programm geschrieben, das eine Speicherkarte nach Bildern durchsucht, Ordner auf meiner Festplatte erstellt, die anhand der Datumsangaben der Bilder benötigt werden, und diese dann kopiert.


Möchten Sie das Skript hier hinzufügen? Ich würde diese Funktionalität lieben, ich mache das gleiche!
Pharaun

Es ist eine AC # -App, kein Skript, fürchte ich.
Valerion

Verwenden Sie die auf den Fotos gespeicherten Exif-Informationen? Könnten Sie bitte das Skript teilen?
JJD

5

Schrieb ein Skript, um auf meine Startschaltfläche zu klicken, dann in einer halben Sekunde erneut darauf zu klicken und alle 30 Sekunden zu wiederholen.

Hält mich während der Arbeit online markiert, und ich kann die eigentliche Arbeit auf meinem persönlichen Laptop direkt daneben erledigen. Nicht von Arbeitssoftware festgefahren.

Sag es nicht dem Chef :)


Ha ha ha, gutes Zeug. +1 für Ehrlichkeit und Unehrlichkeit! :)
Kyle Walsh

4

Verschiedene Verknüpfungen zu den Befehlen "net start" und "net stop", damit ich Dienste starten und stoppen kann, ohne in die Dienste-MMC gehen zu müssen


4

Ein Shell-Skript zum Ausführen rotierender Sicherungen mit rsync. Es unterstützt auch die Ausführung beliebiger untergeordneter Programme, um andere Aktivitäten vor dem Sichern zu unterstützen (z. B. das Herunterladen köstlicher Lesezeichen).

http://gist.github.com/6806


4

Eine kleine Anwendung, die alle "X" ms für "Y" Zeit mit der linken Maustaste klickt (oder doppelklickt). Dieser Trinkvogel muss nicht mehr im Kernkraftwerk arbeiten! ;)

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.