Qual è la sceneggiatura più utile che hai scritto per la vita di tutti i giorni? [chiuso]


132

Mi chiedo solo quali piccoli script / programmi hanno scritto qui le persone che aiutano nella vita di tutti i giorni (ovvero non legate al lavoro).

Tutto va bene, rivoluzionario o no. Per me in questo momento, è un piccolo script Python per calcolare il ritmo di corsa data la distanza e il tempo trascorso.


Ne ho visti alcuni davvero interessanti legati al lavoro, ma non così tanti script relativi alla "vita quotidiana". Poi di nuovo, se qualcosa al lavoro ti sta rovinando la vita e l'hai risolto con una sceneggiatura ordinata, allora chi sono io per giudicare?
Kyle Walsh,

10
Una di quelle domande gioiello che valgono la pena di overflow dello stack. Qualsiasi linea guida che suggerisce che dovrebbe essere chiusa non dovrebbe essere lì, qualsiasi mod che abbia votato per chiuderlo non dovrebbe esserlo.
Bill K,

Questo è uno per me: github.com/codeforester/base . Questo framework ha aumentato la mia produttività come persona SRE / DevOps a passi da gigante, aumentando al contempo la coesione e la collaborazione del team.
codeforester

Risposte:


116

La mia ochiave è caduta sul mio laptop; così ho scritto un programma che sostituisce due 0sequenze di tasti entro 200 MS l'una dall'altra o, due 0sequenze di tasti entro 700 MS l'una dall'altra 0e ignora il resto; così ho potuto usare il mio laptop prima di andare in giro a sostituire la tastiera.

Wow; Non sapevo che sarebbe stato così popolare: p

Per quanto riguarda come - Microsoft espone una piccola funzionalità API chiamata Hooks .

Usando quel gancio; Sono stato in grado di scrivere un "filtro" che ha fatto quello che mi serviva (suggerimento: se si restituisce 1 con le finestre di callback non elaborerà la sequenza di tasti).

Il motivo per cui ne sono a conoscenza in realtà non è perché stavo scrivendo un keylogger, ma perché ho scritto un programma su Synergy qualche tempo fa.

E sì. Ho scritto un altro programma che ha scambiato i tasti alfanumerici con un tasto alfanumerico casuale e sì; è stato davvero divertente: D


1
Potrei aver pensato di scrivere semplicemente sul resto esposto delle chiavi, ma questo è sicuramente un modo interessante per
aggirarlo

2
Vorrei sapere perché non pensavo f ... Sto avendo lo stesso problema ... :-(
asterite,

1
Questo mi ricorda questo fumetto di XKCD: xkcd.com/196
JesperE,

59
HA! Y00u non sarà in grado di t00 digitare 00n una tastiera standard di nuovo con 00 ma riqualificando le dita! G0000d Fortuna!
Doug L.,

107
La grande domanda è come sei riuscito a scrivere quel programma senza usare la lettera 'o'?
e.James

115

Non ho più il codice, ma probabilmente lo script più utile che ho scritto era, che ci crediate o no, in VBA. Avevo un fastidioso collega che aveva una miccia così corta che l'ho chiamato Cherry Bomb. Si arrabbiava spesso quando i clienti chiamavano, si alzavano e cominciavano a urlarmi contro il muro del cubicolo, uccidendo la mia produttività e il mio morale.

Ho sempre avuto Microsoft Excel aperto. Quando l'avrebbe fatto, avrei fatto alt-tab su Excel e lì, sulla barra degli strumenti, c'era una nuova icona con l'immagine di una bomba ciliegia. Vorrei fare clic con discrezione su questo ... e non accadrebbe nulla.

Tuttavia, poco dopo avrei ricevuto una telefonata e avrei detto qualcosa del tipo "sì, sì, suona male. Dovrei dare un'occhiata." E poi mi alzavo, mi scusavo con la Cherry Bomb e me ne andavo.

Quello che è successo è che abbiamo usato NetWare e aveva un sistema di messaggistica primitivo incorporato. Quando ho cliccato il pulsante, un piccolo script VBA avrebbe inviato un messaggio NetWare ai miei amici, dicendo loro che la Cherry Bomb era di nuovo lì e avrebbero per favore chiamami. Non l'ha mai capito :)


94
Sai di essere un programmatore quando scrivi un programma per uscire da una situazione sociale imbarazzante.
Cadoo,

7
Eccezionale! Questa è ingegneria sociale al suo meglio!
Beska,

1
Speriamo che Cherry Bomb non usi StackOverflow :)
Pedro Luz,

94

È stato richiamato uno script bash in modo che se sono dentro /a/very/deeply/nested/path/somewheree voglio andare su " N " directory, posso digitare :up N

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

Per esempio:

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

NB di gmatt:

Lavorando sull'ottimo lavoro sopra riportato, può essere esteso a una funzione back inserendo quanto segue nel tuo bashrc:

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 Assolutamente f 'ing brillante! Lo userò molto !
domenica

12
Perché sostituiresti un codice di facile lettura con un codice di difficile lettura? Il tuo computer funziona più rapidamente se hai meno linee di codice sorgente?
Beska,

3
gnud: sostituire il mio codice pulito e chiaro con immondizia? No grazie.
foxdonut,

2
brillante! L'ho esteso per includere un backmetodo, quindi ogni volta che lo usi puoi usare indietro per spostarti facilmente avanti e indietro. Per usarlo mettilo nel tuo bashrc (scusami per la formattazione di merda): function up () {LIMIT = $ 1 P = $ PWD per ((i = 1; i <= LIMIT; i ++)) fai P = $ P / .. fatto cd $ P esportazione MPWD = $ P} indietro funzione () {LIMIT = $ 1 P = $ MPWD per ((i = 1; i <= LIMIT; i ++)) do P = $ {P% / ..} fatto cd $ P export MPWD = $ P}
ldog

2
sono pazzo? come diavolo funziona? cd in uno script verrà inserito lì, ma quando lo script esiste, si torna nella stessa directory / originale! il mio bash funziona in modo diverso da tutti i tuoi?
johnnyB,

67

Pulsante di ripristino super remoto.
Un rack di hardware di simulazione super speciale (ai tempi in cui una stanza piena di casse VME faceva meno della tua GPU) che un utente dall'altra parte del mondo si sarebbe schiantato nelle prime ore del mattino. Ci sono voluti un'ora per entrare in laboratorio e attraverso la sicurezza.

Ma non ci è stato permesso di collegarci al controller super speciale o modificare l'hardware. La soluzione era una vecchia workstation DEC con una stampante a matrice di punti epson, un nastro con un righello di plastica sulla manopola di alimentazione della carta, posizionare la stampante vicino al pulsante di ripristino.
Accedere a WS come utente normale (nessuna radice consentita, tutte le porte esterne bloccate), stampare un documento con 24 righe vuote - che ruotava la manopola di alimentazione della carta e il righello premeva sul ripristino sull'hardware super speciale .


Storia fantastica! Non sono sicuro di crederti o meno;)
Greg Whitfield

Alla fine è stato sostituito da un relè dell'interruttore di alimentazione collegato alla linea DTR sulla porta seriale, ma ciò ha richiesto l'accesso come root. E avrei dovuto dire DEC WS perché stava eseguendo Ultrix.
Martin Beckett,

Wow, le lunghezze che facciamo per ottenere dalla sicurezza!
Chris Ballance,


5
Se avessimo avuto vassoi CD in quei giorni sarebbe stata una soluzione più semplice,
Martin Beckett,

63

Su Windows XP, ho impostato un lavoro AT per eseguire questo comando quotidianamente in C: \

dir /s /b * > dirlist.txt

Questo elenca il percorso completo di tutti i file sull'unità C. Quindi ogni volta che devo trovare un file, posso usarlo findstr. Questo batte usando la ricerca di Windows Explorer poiché consente la corrispondenza delle espressioni regolari sull'intero percorso. Per esempio:

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

Questa è una soluzione molto veloce da configurare, ottima se ti ritrovi con una nuova installazione di Windows e nessuna connessione a Internet.

Se è necessario cercare alcuni tipi di file in alcuni modelli, innanzitutto elencare tutti i file che è necessario controllare, quindi cercare al loro interno. Ad esempio, per trovare un programma Java o Python che capovolga un'immagine, è possibile farlo:

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

8
amico, che bella idea.
Epaga,

10
Questo è esattamente ciò che fa il programma di localizzazione unix
Mark Baker,

4
@Mark Il che dimostra che anche se devi lavorare con Windows, puoi imparare moltissime cose utili da unix
Liam,

1
Ho creato uno di questi script per la mia cartella "Documenti", che non riesco mai a tenere organizzata :-)
sep332

1
e lì stavo usando la ricerca di Google Desktop: D
inspite

38

Ho uno script Python che viene eseguito automaticamente quando collego la mia fotocamera digitale.

Copia tutte le immagini dalla scheda sulla fotocamera, le esegue il backup e quindi le carica su Flickr.


Il pezzo da caricare a Flickr proviene da uploadr.py (di cui non posso prendermi il merito).

Ecco il codice Python per scaricare la videocamera. Richiama tramite SRCDIR e nomina ciascuna immagine con la data e l'ora prima di copiarle su DESTDIR.

#!/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)

Condividi il codice e condividerò un voto
positivo

40
Funzionerà alla grande fino al giorno in cui dimenticherai quelle foto speciali che hai scattato la sera prima ...
Ed Guiness,

L'intera cosa è in realtà un processo in due fasi. Il primo passo scarica le cose dalla fotocamera e le rinomina. Il secondo passaggio ha un prompt che chiede se si desidera caricare su Flickr. Questo è più perché il caricamento uccide la mia larghezza di banda che perché sono preoccupato per quello che sto caricando.
Mark Biek il

5
Come si attiva il bit "run on plug in"?
ijw,


32

Alcuni anni fa ho scritto un'app Winforms con l'aiuto di alcune API Win32 per bloccarmi completamente fuori dal mio computer per un'ora in modo da costringermi ad andare a fare esercizio fisico. Perché ero pigro? No ... perché avevo un obiettivo di fitness personale. A volte hai solo bisogno di un calcio per iniziare :)


16

Ho scritto una sceneggiatura di Python che andrebbe su tutti i fumetti web che ho letto e scaricare eventuali nuovi fumetti. Lo eseguo una volta al giorno e non è necessario visitare ogni sito singolarmente, basta visitare la cartella / Comics /. ;)


hmmm. Se questi sono fumetti supportati da pubblicità, mi preoccuperei che tu non "paghi"
correndo

2
@Matthew - Vedo il tuo punto, ma non vedo perché non guardare una pubblicità sia un problema morale / etico. In tal caso, gli autori di No-Script e dei blocchi popup hanno molte spiegazioni da fare. ;)
Onion-Knight,

1
Non ho alcun problema con i blocchi popup, perché i popup sono un modo abusivo di visualizzare annunci pubblicitari. Non è esattamente una questione morale, più una questione di equità. Uso un blocco annunci nella maggior parte dei siti, ma lo spengo per alcuni siti che visito frequentemente e che desidero supportare. Recuperare i fumetti con una sceneggiatura di Python (e non vedere mai il sito) mi sembra eccessivo, ma non saprei dirti esattamente dove si trovi.
Matthew Scouten,

14

Il mio script di backup .cmd. Funziona sul mio server ogni notte e nomina i file di backup in base al giorno della settimana. Una settimana intera di backup ha salvato me (e la mia famiglia) molte volte:

:: Argomenti di backup:
:: / V Verifica? (si No)
:: / R Limitare l'accesso al proprietario? (si No)
:: / RS Memoria rimovibile? (si No)
:: / HC Compressione hardware (on / off)
:: / M Tipo di backup (normale / copia / differenziale / incrementale / giornaliero)
:: / L Tipo di file di registro (f / s / n)
:: / D "Descrizione"
:: / J "Nome lavoro"
:: / F "Nome file"

SETLOCAL

:: assicurarsi che siano montate le unità di rete
CHIAMA C: \ bat \ configs \ MapShares-home.cmd
echo su

impostato oggi =% DATA: ~ 0,3%
se% oggi% == lun impostato ieri = 0 domenica
se% oggi% == martedì impostato ieri = 1mondo
se% oggi% == mer impostato ieri = 2 martedì
se% oggi% == Gio fissato ieri = 3 mercoledì
se% oggi% == ven impostato ieri = 4 giovedì
se% oggi% == Sab impostato ieri = 5 venerdì
se% oggi% == Sole tramontato ieri = 6 sabato

imposta configsDir =% ~ dp0
set storePath = C: \ mybackups

:: (es: file Monday C)
set title =% ieri% set di backup


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

CHIAMA BackupConfigs.bat

:: Crea un nuovo file BKF
chiama C: \ WINDOWS \ system32 \ ntbackup.exe backup ^
    "@% configsDir% \ daily.bks" ^
    / V: sì / R: no / RS: no / HC: spento / M normale / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% ieri% .bkf" ^
    >> "% storePath% \% ieri% _backup.log"

echo% DATE%% TIME% Completato >> "% storePath% \% ieri% _backup.log"

copia "% storePath% \% ieri% .bkf" "V: \ Backups \ NEPTUNE"

CHIAMATA C: \ bat \ clean-temps.bat

defrag -v C:> "% storePath% \% ieri% _defrag.log"

:: visualizza le directory di backup
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::pausa


2
Alcuni trucchi di file .cmd lì. Sapevo che avresti potuto usare '^' per sfuggire al reindirizzamento e alle pipe, ma non sapevo che potresti usarlo anche come continuazione della linea. Cool :)
Patrick Cuff,

Il mondo ha bisogno di meno script .bat, non di più! :-)
JesperE,

2
E il corollario è che il mondo ha bisogno di meno Windows. Fino ad allora, questo è il minimo denominatore comune. Condivido questo script perché milioni di persone possono usarlo, così come è.
Chris Noe,

14

"backup.sh" che analizza il contenuto di una directory e lo invia al mio account Gmail.


Adesso va bene. Anche se non ho un computer fuori dalle mie decine che hanno installato smtp. Purtroppo.
mxcl,

Potremmo avere il codice per favore?
Kostas,

14

Ho scritto una sceneggiatura che è stata utilizzata ogni giorno nella mia squadra. Quando lavoravo per Intel, avevamo un'app che parlava con un database di accesso per acquisire un dump di informazioni sul registro (ho lavorato sulla convalida dei chipset). Prenderebbe queste informazioni (da una query SQL) e le scaricherà in un file CSV, file HTML e file Excel. L'intero processo è durato quasi 2 ore. Nessun scherzo. Non ho idea del perché ci sia voluto così tanto tempo. Lo avremmo avviato un'ora prima di pranzo, andavamo a pranzo e poi tornavamo.

Ho pensato che ci doveva essere un modo migliore per farlo. Ho parlato con il team che ha gestito il database del registro e ottenuto da loro il codice SQL. Ho quindi scritto uno script perl che ha acquisito i dati e li ha emessi nei formati CSV, HTML ed Excel. Runtime? Circa 1-2 secondi. Un grande miglioramento della velocità.

Ho anche scritto alcune sceneggiature mentre ero in servizio in Iraq nel 2006 (ho prestato servizio nella Guardia Nazionale per 9 anni - sono uscito a dicembre). Abbiamo usato questa vecchia app chiamata ULLS-G (Unit Level Logistics System - Ground) che è stata scritta in ADA e originariamente eseguita su DOS. Lo hanno hackerato abbastanza da dove sarebbe stato eseguito su Windows XP in una shell dei comandi. Questo sistema non aveva un'interfaccia del mouse. Tutto era tramite tastiera e non aveva funzionalità batch. Supponiamo quindi che tu voglia stampare le licenze per tutti gli operatori del veicolo? Bene ... avevamo 150 soldati nella nostra unità, quindi ci è voluto molto tempo. Supponiamo che tutti si siano qualificati su un nuovo veicolo e tu volessi aggiungerlo alle qualifiche dell'operatore? Dovevi farlo uno per uno.

Sono stato in grado di trovare un driver ODBC per il database SAGE (quello usato da ULLS-G) e quindi ho scritto script perl che sono stati in grado di parlare con il database SAGE. Quindi le cose che hanno richiesto più di un'ora, ora hanno impiegato solo pochi secondi. Ho anche usato i miei script e il driver per i rapporti. Abbiamo dovuto riferire tutte le informazioni fino al battaglione ogni mattina. Altre unità scrivevano le informazioni a mano ogni mattina. Ho preparato una macro di Excel che parlava usando lo stesso driver, ho parlato con il database SAGE e ho aggiornato il foglio di calcolo Excel in quel modo. È la macro di Excel più complicata e unica che abbia mai scritto. Ha dato i suoi frutti perché mi hanno assegnato la medaglia di elogio dell'esercito. Quindi sì, ho ricevuto una medaglia nell'esercito per aver scritto script perl :) Quanti possono dirlo? ;)


13

Sono un pilota privato. Ho scritto un paio di script che ottengono informazioni meteo per gli aeroporti locali da aviationweather.gov. Sono stati utili per una rapida risposta alla domanda "Oggi è una buona giornata per volare?"


Spero per i tuoi passeggeri che la tua sceneggiatura fallisca bene se aviationweather.gov cambia il suo layout e rompe il tuo parser!
MatthieuP,

1
Potresti condividere la sceneggiatura, per favore?
JJD

12

Uno script di Greasemonkey che rimuove ovviamente i commenti stupidi [*] dal sito di gioco Kotaku.com.

[*] Come identificato da errori di ortografia comuni, scrittura in maiuscolo, uso eccessivo di "LOL" ed euristica simile.


6
Freddo. Ho voglia di estrarre i regexp e generare istruzioni casuali costituite solo da espressioni corrispondenti a uno o più di essi.
Gnud,

11

alias dir = 'ls -al' è il mio script preferito preferito.


4
eww ... Mi ritrovo spesso a voler andare dall'altra parte ...
brividi42

1
Devi chiederti perché le persone iniziano a votare le risposte alle domande con un tag soggettivo ... qual è il punto straziante?
Greg Whitfield,

Sì, questo è fondamentale :)
Nick,

11

Un raschietto HTML filettato per scaricare tutti i sottotitoli disponibili per serie / film da un sito che è un dolore da usare (devi fare clic come 4 volte dopo una ricerca per accedere alla pagina di download, solo per visualizzare più annunci). Ora ho appena inserito i criteri di ricerca e premo download.


2
Lo condividerà e il sito lo scoprirà :). Meglio non condividere a volte ...
Camilo Díaz Repka,

11

Uno script perl che gratta la mia Craigslist locale, per categorie selezionate, in un database SQL su cui posso quindi interrogare.

V2 di questo aggiorna il DB con un timer e mi avvisa se ho una corrispondenza su una qualsiasi delle query, sostanzialmente fornendomi un agente in background per CL.


8

Ridenominazione di file di massa tramite trascinamento della selezione.

Tempo fa ho creato un piccolo VBScript che accetta un RegEx e sostituisce i nomi dei file di conseguenza. Dovresti semplicemente rilasciare un mucchio di file o cartelle su di esso. L'ho trovato molto utile nel corso degli anni.

gist.github.com/15824 (Attenzione, i commenti sono in tedesco)


Sembra sciocco votare una descrizione senza codice.
Chris Noe,

Il codice sarebbe un po 'troppo per il sito Web. Forse "piccolo" era un po 'riduttivo. Sono 170 LOC.
Tomalak,

Potrei caricare lo script da qualche parte e pubblicare il link qui se sei interessato.
Tomalak,

8

Uno script Python rapido e sporco che ha cercato il DNS per google.com ogni 5 secondi e ha emesso un segnale acustico una volta se ha avuto successo e due volte se ha fallito.

L'ho scritto durante un periodo in cui dovevo vivere con una rete domestica altamente instabile. Mi ha permesso di conoscere istantaneamente lo stato della rete anche mentre ero prima sotto la scrivania attraverso la stanza con entrambe le mani piene di cavo di rete e una torcia in bocca.


5 secondi? Deve essere diventato davvero fastidioso.
Ponkadoodle,

Beh, sì, mi ha spinto i pipistrelli dopo circa 30 minuti. L'idea era quella di avere il feedback più vicino possibile in tempo reale. Di solito potrei sistemare le cose in circa 10 minuti.
Matthew Scouten,

8

Questo, da un post sul mio blog qualche mese fa, è passato dall'idea che pensavo fosse cool a uno dei migliori piccoli hack che ho tossito nella memoria recente. Lo cito per intero qui:

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

Trascorro molto tempo a Bash. Per i non iniziati, bash è un sistema che troverai sulla maggior parte delle macchine unix e, per fortuna, alcune finestre e tutti i Mac là fuori. A prima vista, non è altro che un'interfaccia a riga di comando, e quindi fuori dal radar della maggior parte degli utenti che vedono cose come un anacronismo che preferiscono dimenticare.

Faccio quasi tutto in bash. Ho letto la mia e-mail da una riga di comando, motivo per cui evito e-mail contrassegnate. Navigo nelle directory, modifico i file, mi occupo del checkout e della consegna del mio codice sorgente quotidiano, cerco file, eseguo ricerche all'interno dei file, riavvio la macchina e occasionalmente sfoglio pagine Web dalla riga di comando. bash è il cuore e l'anima della mia esistenza digitale.

Il problema è che tendo ad aprire circa 6 finestre bash alla volta. Oggi al lavoro, ne avevo uno che eseguiva un web server, un altro che armeggiava con il mio database, un terzo, un quarto e un quinto che modificavano file diversi, mentre un sesto stava macinando via attraverso la mia macchina cercando di registrare i nomi di ogni file sul sistema. Perché? Perché è utile poter cercare in un tale archivio se si desidera sapere dove trovare un oggetto per nome file.

Quando lo fai, finisci con molte finestre nella barra di controllo chiamate semplicemente "bash". Questo va bene se ne hai solo uno, ma è un'agonia quando ne hai 6 o più .... e altre due dozzine di cose in corso. Ho tre monitor sotto il comando simultaneo di una coppia tastiera / mouse e sento ancora il bisogno di più. Ognuna di quelle finestre ha diversi terminali bash aperti.

Quindi l'ho messo insieme. Innanzitutto, posiziona queste righe nel tuo .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

Ho esaminato e scritto decine di paragrafi su come tutto questo funziona ed esattamente perché è impostato così com'è, ma non sei veramente interessato. Fidati di me. C'è un intero capitolo di un libro sul perché ho fatto "CMD = ...; echo ..." su quella terza riga. Molte persone (incluso bluehost, dove è ospitato il mio altro dominio) stanno ancora usando e la vecchia versione di bash con importanti bug nel modo in cui gestisce le trappole, quindi ne siamo bloccati. Puoi rimuovere il CMD e sostituirlo con $ BASH_COMMAND se sei aggiornato sulla tua versione bash e hai voglia di fare ricerche.

Comunque, il primo script che uso è qui. Crea un bel prompt che contiene il nome e la directory del tuo computer, suddivisi per una lunghezza ragionevole:

                       ============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";

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

C'è un avvertimento nella parte superiore di questo post sul blog che dovresti leggere ora prima di iniziare a fare domande stupide come "Perché non hai semplicemente usato la variabile d'ambiente HOSTNAME tramite @ENV?" Semplice: perché non funziona con tutti i sistemi su cui l'ho provato.

Ora per la parte davvero interessante. Ricorda la riga 3 dell'aggiunta .bash_profile?

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

Sta scaricando l'output dello script trim.pl nello stesso contenitore di prima, stampando sia il prompt dei comandi che il titolo della finestra, ma questa volta sta aggiungendo il comando che hai appena digitato! Ecco perché non vuoi fare tutto questo nel tuo .bashrc: qualsiasi script che esegui (sulla mia macchina, man è uno di questi) attiverà questa cosa su ogni riga. la produzione dell'uomo viene seriamente confusa da ciò che stiamo facendo qui. Non stiamo esattamente giocando bene con il terminale.

Per afferrare il comando che hai appena digitato, prendiamo la storia di Bash e la tagliamo un po ':

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

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

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

Quindi ora ho un bazillion di finestre in corso e dicono cose come:

  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/

Dalla piccola barra felice nella parte inferiore dello schermo, ora posso dire quale è quale a colpo d'occhio. E poiché abbiamo impostato PS1, non appena un comando termina l'esecuzione, il nome del comando viene nuovamente sostituito dall'output di trim.pl.

AGGIORNAMENTO (stesso giorno): questa roba (le voci .bash_profile) mi ha fatto venire l'inferno quando l'ho provato nel mio .bashrc. Il tuo .bashrc viene eseguito da script non interattivi ogni volta che invochi bash come lingua. L'ho colpito quando stavo cercando di usare l'uomo. Tutti i tipi di immondizia (il testo completo del mio .bashrc, oltre ai caratteri di escape) sono apparsi nella parte superiore della pagina man. Suggerirei di provare questa gemma con una rapida invocazione "man man" alla riga di comando una volta che avrai messo tutto insieme.

Immagino sia tempo per me di estrarre la spazzatura personalizzata dal mio .bashrc e metterlo dove appartiene ...

Per inciso, mi sono ritrovato a scrivere "trappola per uomo" ad un certo punto di questo processo.


8

Nel mio precedente posto di lavoro gli orari di ufficio erano ridicoli. Era una società di software e il mio capo è stato risucchiato. Ci avrebbe dato il lavoro intorno alle 17:30 (proprio quando era tempo di tornare a casa) e ci avrebbe fatto finire il lavoro fino alle 23:00 (oltre le nostre ore produttive ideali). Oppure avrebbe trovato fastidiosi problemi nel codice che era ancora in corso.

Così ho creato un file batch e uno script che spegnevano il mio computer in modo casuale tra le 19:00 e le 20:00. Aveva un timer da 1 minuto nel caso in cui restassi dopo ore e avessi bisogno di interrompere il processo di spegnimento.

Ma avrei lasciato la mia scrivania prima delle 17:00, quindi non riusciva a trovarmi per trattenermi se voleva scaricare le cazzate all'ora del checkout. Se venisse alla mia scrivania e vedesse il mio computer acceso, penserebbe che fossi ancora nella zona della dispensa o al minimarket vicino per prendere delle patatine o qualcosa del genere. Ma se fosse stato spento in quel periodo, avrebbe chiamato il mio cellulare e mi avrebbe detto di tornare in ufficio.

Ho anche programmato che il BIOS sulla mia macchina accendesse la macchina intorno alle 8:00 o alle 9:00 nel caso in cui mi sentissi pigro e volessi passeggiare verso le 10:00 o le 11:00. Se fossi stato sorpreso a camminare sulla mia scrivania, mi avrebbe chiesto "dove sei stato tutta la mattina?" E direi "Ero ad un incontro con il team di marketing". o "Ero fuori a fare colazione".

cane stupido


7

Lavoravo in un campo estivo tecnologico e alla fine della settimana dovevamo comporre questi articoli per ciascuno dei ragazzi del gruppo, che avrebbero poi ricevuto e portati a casa come ricordo. Di solito, consistevano in un gruppo di frasi generiche e da una a due frasi personalizzate. Ho scritto una sceneggiatura in pitone che ha creato uno di questi scritti da una serie di frasi fisse e ho permesso all'utente di aggiungere un paio di frasi personalizzate nel mezzo. Ciò ha permesso di risparmiare moltissimo tempo per me e altri consiglieri che ho lasciato conoscere il segreto. Anche se gran parte di esso è stato automatizzato, i nostri articoli sembravano ancora migliori di quelli "onesti", perché potevamo dedicare più tempo alle parti personalizzate.


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

Uno script Greasemonkey per aggiungere una casella di controllo "premi molto quel pulsante" a un gioco online.


6

Un piccolo script che monitora alcuni siti Web popolari per annunci che corrispondono alle mie competenze e inviami un'e-mail.


6

Lo uso come una funzione caricata automaticamente. Posso semplicemente digitare "mycd" e appare un elenco di directory che frequentemente eseguo cd. Se mi capita di conoscere il numero, posso semplicemente dire qualcosa come "mycd 2". Per aggiungere una directory all'elenco è sufficiente digitare "mycd / tmp / foo / somedirectory".

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

}

Quando eseguo "mycd", ottengo: "-bash: print: comando non trovato". Quando uso "mycd / folder /", non aggiunge nulla a /tmp/mycd.txt. Ho alcune impostazioni sbagliate?
Léo Léopold Hertz

Ah, sì, potresti voler sostituire le istruzioni "print" con "echo". ;-)
wzzrd

@wzzrd Che umiliante;) Funzione molto interessante, @Ethan Post. Grazie per aver condiviso!
Léo Léopold Hertz

5

Mi piace memorizzare le mie foto in una directory in base alla data in cui è stata scattata la foto. Pertanto, ho scritto un programma per scansionare una scheda di memoria alla ricerca di immagini, creare qualsiasi cartella sul mio disco rigido che fosse necessario in base alle date delle immagini, quindi copiarle.


Vuoi aggiungere lo script qui? Mi piacerebbe questa funzionalità, faccio la stessa cosa!
Pharaun,

È un'app ac #, non uno script, temo.
Valerion,

Usi le informazioni exif memorizzate nelle foto? Potresti condividere la sceneggiatura, per favore?
JJD

5

Ho scritto uno script per fare clic sul mio pulsante di avvio, quindi fare nuovamente clic in mezzo secondo e ripetere ogni 30 secondi.

Mi tiene contrassegnato online mentre sono al lavoro e posso fare il vero lavoro sul mio laptop personale proprio accanto ad esso. Non impantanato dal software di lavoro.

Non dirlo al capo :)


Ah ah ah, roba buona. +1 sia per l'onestà che per la disonestà! :)
Kyle Walsh,

4

Varie scorciatoie per i comandi "net start" e "net stop" in modo da poter avviare e arrestare i servizi senza dover accedere alla MMC Servizi


4

Uno script shell per eseguire backup rotanti utilizzando rsync. Supporta inoltre l'esecuzione di programmi figlio arbitrari per supportare altre attività di pre-backup (ad esempio, il download di deliziosi segnalibri).

http://gist.github.com/6806


4

Una piccola applicazione che ha lasciato il clic (o doppio clic) ogni "X" ms per "Y". Non è più necessario che quell'uccello potabile funzioni nella centrale nucleare! ;)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.