Quel est le script le plus utile que vous ayez écrit pour la vie quotidienne? [fermé]


132

Je me demande simplement quels sont les petits scripts / programmes que les gens ici ont écrits qui les aident dans leur vie quotidienne (c'est-à-dire non liés au travail).

Tout est permis, révolutionnaire ou non. Pour moi en ce moment, c'est un petit script python pour calculer le rythme de course en fonction de la distance et du temps écoulé.


J'ai vu des scripts vraiment sympas liés au travail, mais pas autant de scripts liés à la "vie quotidienne". Là encore, si quelque chose au travail ruine votre vie et que vous l'avez corrigé avec un script soigné, qui suis-je pour juger?
Kyle Walsh

10
Une de ces questions qui rend le dépassement de pile intéressant. Toute directive suggérant qu'elle soit fermée ne devrait pas être là, tout mod qui a voté pour la fermer ne devrait pas en être une.
Bill K

C'est un pour moi: github.com/codeforester/base . Ce cadre a augmenté ma productivité en tant que personne SRE / DevOps à pas de géant, tout en augmentant la cohésion et la collaboration de l'équipe.
codeforester

Réponses:


116

Ma oclé est tombée sur mon ordinateur portable; j'ai donc écrit un programme qui remplace deux 0frappes à moins de 200 MS l'une de l'autre comme une o, deux 0frappes à moins de 700 MS l'une de l'autre comme un0 et ignore le reste; afin que je puisse utiliser mon ordinateur portable avant de remplacer le clavier.

Sensationnel; Je ne savais pas que ce serait si populaire: p

Quant à savoir comment - Microsoft expose une jolie petite fonctionnalité d'API appelée Hooks .

En utilisant ce crochet; J'ai pu écrire un "filtre" qui a fait ce dont j'avais besoin (indice: si vous renvoyez 1 avec vos fenêtres de rappel ne traitera pas la frappe).

La raison pour laquelle je sais à ce sujet n'est pas parce que j'écrivais un keylogger - mais parce que j'ai écrit un programme smiler à Synergy quelque temps.

Et oui. J'ai écrit un autre programme qui permutait les touches alphanumériques avec une touche alphanumérique aléatoire et oui; c'était vraiment drôle: D


1
J'aurais peut-être pensé à taper simplement sur le repose-clé exposé, mais c'est certainement une façon intéressante de contourner le problème :)
warren

2
Je savais pourquoi je ne pensais pas à ça ... J'ai le même problème ... :-(
astérite

1
Cela me rappelle cette bande dessinée XKCD: xkcd.com/196
JesperE

59
HA! Y00u ne pourra pas t00 taper 00n un keyb00ard standard à nouveau sans réentraîner vos doigts! G0000d Chance!
Doug L.

107
La grande question est de savoir comment avez-vous réussi à écrire ce programme sans utiliser la lettre «o»?
e.James

115

Je n'ai plus le code, mais probablement le script le plus utile que j'ai écrit était, croyez-le ou non, en VBA. J'avais un collègue ennuyeux qui avait un fusible si court que je l'ai appelé Cherry Bomb. Il se mettait souvent en colère lorsque les clients appelaient, se levaient et commençaient à me déclamer par-dessus la paroi de la cabine, tuant ma productivité et mon moral.

J'ai toujours eu Microsoft Excel ouvert. Quand il faisait cela, j'allais alt-tab pour Excel et là, sur la barre d'outils, il y avait une nouvelle icône avec une image d'une bombe cerise. Je cliquais discrètement dessus ... et rien ne se passerait.

Cependant, peu de temps après, je recevais un appel téléphonique et je disais quelque chose comme "ouais, ouais, ça sonne mal. Je ferais mieux de jeter un coup d'œil." Et puis je me levais, je m'excusais auprès du Cherry Bomb et je m'éloignais.

Ce qui s'est passé, c'est que nous avons utilisé NetWare et qu'il avait un système de messagerie primitif intégré. Lorsque j'ai cliqué sur le bouton, un petit script VBA envoyait un message NetWare à mes amis, leur disant que la bombe Cherry était à nouveau s'il te plait appelle moi. Il ne l'a jamais compris :)


94
Vous savez que vous êtes un programmeur lorsque vous écrivez un programme pour sortir d'une situation sociale délicate.
Cadoo

7
Impressionnant! C'est l'ingénierie sociale à son meilleur!
Beska

1
Espérons que Cherry Bomb n'utilise pas StackOverflow :)
Pedro Luz

94

Un script bash appelé en sorte que si je suis /a/very/deeply/nested/path/somewhereet je veux aller « jusqu'à » N répertoires, je peux taper :up N

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

Par exemple:

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

NB par gmatt:

En travaillant sur l'excellent travail ci-dessus, il peut être étendu à une fonction de retour en plaçant ce qui suit dans votre 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 Absolument f « ing génial! Je vais utiliser ce un lot !
wzzrd

12
Pourquoi remplaceriez-vous un code facile à lire par un code difficile à lire? Votre ordinateur fonctionne-t-il plus rapidement si vous avez moins de lignes de code source?
Beska

3
gnud: remplacer mon code propre et clair par des ordures? Non merci.
foxdonut

2
brillant! J'ai étendu cela pour inclure une backméthode, donc chaque fois que vous utilisez, vous pouvez utiliser le retour pour vous déplacer facilement d'avant en arrière. Pour l'utiliser, mettez ceci dans votre bashrc (désolé pour le formatage de la merde): 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}
ldog

2
suis-je fou? comment diable ça marche? cd dans un script y sera cd mais lorsque le script existe, vous êtes de retour dans le même répertoire / original! mon bash fonctionne-t-il différemment de tous les vôtres?
johnnyB

67

Bouton de réinitialisation à distance super.
Un rack de super spécial matériel de simulation (à l'époque où une pièce pleine de caisses VME faisait moins que votre GPU) qu'un utilisateur à l'autre bout du monde plantait aux petites heures du matin. Il a fallu une heure pour entrer dans le laboratoire et passer par la sécurité.

Mais nous n'avons pas été autorisés à nous connecter au contrôleur super spécial ou à modifier le matériel. La solution était une ancienne station de travail DEC avec une imprimante matricielle epson, coller une règle en plastique sur le bouton d'alimentation papier, positionner l'imprimante près du bouton de réinitialisation.
Connectez-vous au WS en tant qu'utilisateur régulier (pas de racine autorisée, tous les ports externes verrouillés), imprimez un document avec 24 lignes vierges - ce qui a fait tourner le bouton d'alimentation en papier et la règle appuyée sur la réinitialisation sur le matériel super spécial .


Histoire fantastique! Je ne sais pas si vous devez vous croire ou non;)
Greg Whitfield

Il a finalement été remplacé par un relais d'interrupteur d'alimentation connecté à la ligne DTR sur le port série - mais cela nécessitait un accès root. Et j'aurais dû dire DEC WS car il exécutait Ultrix.
Martin Beckett

Wow, tout ce que nous faisons pour obtenir la sécurité!
Chris Ballance


5
Si nous avions eu des plateaux de CD à cette époque, cela aurait été une solution plus simple,
Martin Beckett

63

Sous Windows XP, j'ai défini un travail AT pour exécuter cette commande quotidiennement dans C: \

dir /s /b * > dirlist.txt

Cela répertorie le chemin complet de tous les fichiers sur le lecteur C. Ensuite, chaque fois que j'ai besoin de trouver un fichier, je peux utiliser findstr. Cela bat l'utilisation de la recherche dans l'Explorateur Windows car il permet la correspondance d'expressions régulières sur tout le chemin. Par exemple:

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

C'est une solution très rapide à mettre en place, et idéale si vous vous retrouvez avec une nouvelle installation de Windows et aucune connexion Internet.

Si vous devez rechercher dans certains types de fichiers un modèle, répertoriez d'abord tous les fichiers que vous devez vérifier, puis recherchez-les. Par exemple, pour trouver un programme Java ou Python qui retourne une image, vous pouvez faire ceci:

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

8
mec, quelle bonne idée.
Epaga

10
C'est exactement ce que fait le programme Unix Locate
Mark Baker

4
@Mark qui montre que même si vous devez travailler avec Windows, vous pouvez apprendre énormément de choses utiles d'Unix
Liam

1
J'ai fait un de ces scripts pour mon dossier "Documents", que je n'arrive jamais à garder organisé :-)
sep332

1
et là, j'utilisais la recherche Google Desktop: D
dépit du

38

J'ai un script Python qui s'exécute automatiquement lorsque je branche mon appareil photo numérique.

Il copie toutes les photos de la carte sur l'appareil photo, les sauvegarde, puis les télécharge sur Flickr.


Le morceau upload-to-Flickr provient de uploadr.py (dont je ne peux pas le mérite).

Voici le code Python pour décharger la caméra. Il revient sur SRCDIR et nomme chaque image avec la date et l'heure avant de copier les images vers 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)

Partagez le code, et je partagerai un vote positif :)
Even Mien

40
Cela fonctionnera très bien jusqu'au jour où vous oublierez ces photos spéciales que vous avez prises la nuit précédente ...
Ed Guiness

Le tout est en fait un processus en deux étapes. La première étape vide les choses de la caméra et les renomme. La deuxième étape comporte une invite vous demandant si vous souhaitez télécharger sur Flickr. C'est plus parce que le téléchargement tue ma bande passante que parce que je m'inquiète de ce que je télécharge.
Mark Biek

5
Comment déclencher le bit «run on plug in»?
ijw


32

Il y a quelques années, j'ai écrit une application winforms à l'aide de quelques api win32 pour me verrouiller complètement hors de mon ordinateur pendant une heure afin que cela me force à aller faire de l'exercice. Parce que j'étais paresseux? Non ... parce que j'avais un objectif de fitness personnel. Parfois, vous avez juste besoin d'un petit coup de pied pour commencer :)


16

J'ai écrit un script Python qui irait à toutes les bandes dessinées Web que je lisais et téléchargerait toutes les nouvelles bandes dessinées. Je le lance juste une fois par jour, et il n'est pas nécessaire de visiter chaque site individuellement, il suffit de visiter le / Comics / Folder. ;)


hmmm. Si ce sont des bandes dessinées financées par la publicité, je crains que vous ne «payiez» en prenant le risque de voir les publicités :-)
Matthew Scouten

2
@Matthew - Je comprends votre point de vue, mais je ne vois pas pourquoi ne pas regarder une publicité est une question morale / éthique. Si tel est le cas, les auteurs de No-Script et des bloqueurs de pop-up ont beaucoup d'explications à faire. ;)
Onion-Knight

1
Je n'ai aucun problème avec les bloqueurs de pop-up, car les popups sont un moyen abusif d'afficher des publicités. Ce n'est pas exactement une question morale, mais plutôt une question d'équité. J'utilise un bloqueur de publicités sur la plupart des sites, mais je le désactive pour certains sites que je visite fréquemment et que je souhaite prendre en charge. Récupérer les bandes dessinées avec un script python (et ne jamais voir le site du tout) me semble excessif, mais je ne pourrais pas vous dire exactement où se trouve la ligne.
Matthew Scouten

14

Mon script de sauvegarde .cmd. Il tourne sur mon serveur tous les soirs et nomme les fichiers de sauvegarde en fonction du jour de la semaine. Une semaine complète de sauvegardes m'a sauvé (et ma famille) à plusieurs reprises:

:: Arguments de sauvegarde:
:: / V Vérifier? (Oui Non)
:: / R Restreindre l'accès au propriétaire? (Oui Non)
:: / RS Stockage amovible? (Oui Non)
:: / HC Compression matérielle (marche / arrêt)
:: / M Type de sauvegarde (normal / copie / différentielle / incrémentielle / quotidienne)
:: / L Type de fichier journal (f / s / n)
:: / D "Description"
:: / J "Nom du travail"
:: / F "Nom du fichier"

SETLOCAL

:: s'assurer que les lecteurs réseau sont montés
APPELER C: \ bat \ configs \ MapShares-home.cmd
écho sur

défini aujourd'hui =% DATE: ~ 0,3%
if% today% == Mon set hier = 0Sunday
if% today% == Tue set hier = 1Lundi
if% today% == Mer défini hier = 2Mardi
if% today% == Jeu défini hier = 3 Mercredi
if% today% == Ven défini hier = 4Jeudi
if% today% == Sam mis hier = 5Vendredi
if% today% == Soleil couché hier = 6Samedi

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

:: (par exemple: fichiers Monday C)
set title =% hier% jeu de sauvegarde


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

APPELER BackupConfigs.bat

:: Créer un nouveau fichier BKF
appelez C: \ WINDOWS \ system32 \ ntbackup.exe backup ^
    "@% configsDir% \ daily.bks" ^
    / V: oui / R: non / RS: non / HC: off / M normal / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% hier% .bkf" ^
    >> "% storePath% \% hier% _backup.log"

echo% DATE%% TIME% Terminé >> "% storePath% \% hier% _backup.log"

copier "% storePath% \% hier% .bkf" "V: \ Backups \ NEPTUNE"

APPEL C: \ bat \ clean-temps.bat

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

:: afficher les répertoires de sauvegarde
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::pause


2
Quelques astuces pour les fichiers .cmd ici. Je savais que vous pouviez utiliser «^» pour échapper à la redirection et aux tuyaux, mais je ne savais pas que vous pouviez également l'utiliser pour la continuation de ligne. Cool :)
Patrick Cuff

Le monde a besoin de moins de scripts .bat, pas plus! :-)
JesperE

2
Et le corollaire est que le monde a besoin de moins de Windows. Jusque-là, c'est le moindre dénominateur commun. Je partage ce script parce que des millions de personnes peuvent l'utiliser tel quel.
Chris Noe

14

"backup.sh" qui calcule le contenu d'un répertoire et l'envoie à mon compte gmail.


Maintenant c'est cool. Bien que je n'ai pas d'ordinateurs sur mes dizaines qui ont une configuration smtp. Tristement.
mxcl

Pourrions-nous avoir le code s'il vous plaît?
Kostas

14

J'ai écrit un script qui a fini par être utilisé tous les jours dans mon équipe. Quand je travaillais pour Intel, nous avions une application qui parlait à une base de données d'accès pour récupérer une décharge d'informations de registre (j'ai travaillé sur la validation des chipsets). Il prendrait ces informations (à partir d'une requête SQL) et les vidait dans un fichier CSV, un fichier HTML et un fichier Excel. L'ensemble du processus a pris près de 2 heures. Sans blague. Je ne sais pas pourquoi cela a pris si longtemps. Nous le démarrions une heure avant le déjeuner, allions déjeuner, puis revenions.

Je pensais qu'il devait y avoir une meilleure façon de faire cela. J'ai parlé à l'équipe qui a maintenu la base de données du registre et obtenu le code SQL de leur part. J'ai ensuite écrit un script perl qui a saisi les données et les a générées aux formats CSV, HTML et Excel. Durée? Environ 1 à 2 secondes. Une grande amélioration de la vitesse.

J'ai également écrit quelques scripts pendant que j'étais en déploiement en Irak en 2006 (j'ai servi dans la Garde nationale pendant 9 ans - je suis sorti en décembre). Nous avons utilisé cette ancienne application appelée ULLS-G (Unit Level Logistics System - Ground) qui a été écrite en ADA et fonctionnait à l'origine sous DOS. Ils l'ont suffisamment piraté pour qu'il s'exécute sur Windows XP dans un shell de commande. Ce système n'avait pas d'interface souris. Tout était via le clavier et il n'y avait aucune fonctionnalité de lot. Alors disons que vous vouliez imprimer les licences pour tous les opérateurs de véhicules? Eh bien ... nous avions 150 soldats dans notre unité, donc cela a pris beaucoup de temps. Disons que tout le monde s'est qualifié sur un nouveau véhicule et que vous vouliez l'ajouter aux qualifications de tous les conducteurs? Vous deviez le faire un par un.

J'ai pu trouver un pilote ODBC pour la base de données SAGE (ce qu'ULLS-G a utilisé) et j'ai donc écrit des scripts perl capables de communiquer avec la base de données SAGE. Donc, les choses qui prenaient plus d'une heure ne prenaient plus que quelques secondes. J'ai également utilisé mes scripts et le pilote pour le reporting. Nous devions rapporter toutes les informations au bataillon chaque matin. D'autres unités écrivaient les informations à la main chaque matin. J'ai créé une macro Excel qui parlait, utilisé le même pilote et parlé à la base de données SAGE et mis à jour la feuille de calcul Excel de cette façon. C'est la macro Excel la plus compliquée et la seule que j'ai jamais écrite. Cela a payé parce qu'ils m'ont décerné la médaille de reconnaissance de l'armée. Alors oui, j'ai une médaille dans l'armée pour avoir écrit des scripts perl :) Combien peuvent dire ça? ;)


13

Je suis pilote privé. J'ai écrit quelques scripts qui obtiennent des informations météorologiques pour les aéroports locaux à partir de aviationweather.gov. Ils ont été utiles pour une réponse rapide à la question "Est-ce aujourd'hui une bonne journée pour voler?"


J'espère pour vos passagers que votre script échouera bien si aviationweather.gov change sa mise en page et casse votre analyseur!
MatthieuP

1
Pourriez-vous s'il vous plaît partager le script?
JJD

12

Un script Greasemonkey qui supprime les commentaires [*] évidemment stupides du site de jeux Kotaku.com.

[*] Tel qu'identifié par les fautes d'orthographe courantes, l'écriture en majuscules, l'utilisation excessive de "LOL" et des heuristiques similaires.


6
Cool. J'ai envie d'extraire les expressions rationnelles et de générer des déclarations aléatoires constituées uniquement d'expressions correspondant à une ou plusieurs d'entre elles.
gnud

11

alias dir = 'ls -al' est mon script préféré.


4
eww ... je me retrouve souvent à vouloir aller dans l'autre sens ...
frissons42

1
Vous devez vous demander pourquoi les gens commencent à voter pour les réponses aux questions avec une étiquette de subjectif ... quel est le point frickin '?
Greg Whitfield

Oui, c'est critique :)
Nick

11

Un grattoir HTML fileté pour télécharger tous les sous-titres disponibles pour les séries / films à partir d'un site difficile à utiliser (vous devez cliquer comme 4 fois après une recherche pour accéder à la page de téléchargement, juste pour afficher plus d'annonces). Maintenant, je viens de mettre les critères de recherche et appuyez sur Télécharger.


2
Il le partagera, et le site le découvrira :). Mieux vaut ne pas partager parfois ...
Camilo Díaz Repka

11

Un script perl qui récupère ma Craigslist locale, par catégories sélectionnées, dans une base de données SQL que je peux ensuite interroger.

V2 de ceci met à jour la base de données avec une minuterie et m'alerte si j'ai une correspondance sur l'une des requêtes, me fournissant essentiellement un agent d'arrière-plan pour CL.


8

Renommer les fichiers en masse par glisser-déposer.

Il y a longtemps, j'ai créé un petit VBScript qui accepte un RegEx et remplace les noms de fichiers en conséquence. Vous déposeriez simplement un tas de fichiers ou de dossiers dessus. J'ai trouvé cela très utile au fil des années.

gist.github.com/15824 (Attention, les commentaires sont en allemand)


Cela semble idiot de voter pour une description sans code.
Chris Noe

Le code serait un peu trop pour le site Web. Peut-être que «petit» était un peu un euphémisme. C'est 170 LOC.
Tomalak

Je pourrais télécharger le script quelque part et publier le lien ici si vous êtes intéressé.
Tomalak

8

Un script Python rapide et sale qui recherchait le DNS pour google.com toutes les 5 secondes et émettait un bip s'il réussissait et deux fois s'il échouait.

J'ai écrit ceci à une époque où je devais vivre avec un réseau domestique très instable. Cela m'a permis de connaître instantanément l'état du réseau même lorsque j'étais tête la première sous le bureau de l'autre côté de la pièce avec les deux mains pleines de câble réseau et une lampe de poche dans la bouche.


5 secondes? Ça a dû devenir vraiment ennuyeux.
Ponkadoodle

Eh bien oui, cela m'a conduit à des chauves-souris après environ 30 minutes. L'idée était d'avoir un feedback aussi proche que possible du temps réel. Je pouvais généralement réparer les choses en 10 minutes environ.
Matthew Scouten

8

Ceci, à partir d'une publication dans mon blog a quelques mois, est passé d'une idée que je trouvais cool à l'un des meilleurs petits hacks que j'ai crachés ces derniers temps. Je le cite en entier ici:

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

Je passe beaucoup de temps à bash. Pour les non-initiés, bash est un système que vous trouverez sur la plupart des machines Unix et, heureusement, sur certaines fenêtres et tous les Mac. À première vue, ce n'est rien de plus qu'une interface de ligne de commande, et donc hors du radar de la plupart des utilisateurs qui voient des choses comme un anachronisme qu'ils préfèrent oublier.

Je fais presque tout en bash. JE LISE MON EMAIL À PARTIR D'UNE LIGNE DE COMMANDE, c'est pourquoi j'évite les e-mails balisés. Je navigue dans des répertoires, modifie des fichiers, participe à l'extraction et à la livraison quotidiennes de mon code source, recherche des fichiers, recherche des fichiers dans des fichiers, redémarre ma machine et même parfois parcoure des pages Web à partir de la ligne de commande. bash est le cœur et l'âme de mon existence numérique.

Le problème est que j'ai tendance à ouvrir environ 6 fenêtres bash à la fois. Au travail aujourd'hui, j'en avais un exécutant un serveur Web, un autre jouant avec ma base de données, un troisième, un quatrième et un cinquième éditant différents fichiers, tandis qu'un sixième parcourait ma machine en essayant d'enregistrer les noms de chaque fichier sur le système. Pourquoi? Parce qu'il est pratique de pouvoir rechercher dans une telle archive si vous voulez savoir où trouver un objet par nom de fichier.

Lorsque vous faites cela, vous vous retrouvez avec de nombreuses fenêtres dans votre barre de contrôle nommées simplement «bash». C'est bien si vous n'en avez qu'un seul, mais c'est l'agonie quand vous en avez 6 ou plus ... et deux douzaines d'autres choses se passent. J'ai trois moniteurs sous la commande simultanée d'une paire clavier / souris et j'en ressens toujours le besoin. Chacune de ces fenêtres a plusieurs terminaux bash ouverts.

Alors j'ai mis ça ensemble. Tout d'abord, placez ces lignes dans votre .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

J'ai parcouru et écrit des dizaines de paragraphes sur la façon dont tout cela fonctionne et exactement pourquoi il est configuré tel quel, mais vous n'êtes pas vraiment intéressé. Croyez-moi. Il y a un chapitre entier d'un livre expliquant pourquoi j'ai fait "CMD = ...; echo ..." sur cette troisième ligne. Beaucoup de gens (y compris bluehost, où mon autre domaine est hébergé) utilisent encore une ancienne version de bash avec des bogues majeurs dans la façon dont il gère les pièges, donc nous sommes coincés avec cela. Vous pouvez supprimer le CMD et le remplacer par $ BASH_COMMAND si vous êtes à jour sur votre version bash et que vous avez envie de faire la recherche.

Quoi qu'il en soit, le premier script que j'utilise est ici. Il crée une belle invite qui contient le nom et le répertoire de votre machine, coupés à une longueur raisonnable:

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

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

Il y a un avertissement en haut de ce billet de blog que vous devriez lire maintenant avant de commencer à poser des questions stupides telles que "Pourquoi n'avez-vous pas simplement utilisé la variable d'environnement HOSTNAME via @ENV?" Simple: parce que cela ne fonctionne pas pour tous les systèmes sur lesquels je l'ai essayé.

Maintenant pour le peu vraiment cool. Vous vous souvenez de la ligne 3 de l'ajout .bash_profile?

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

Il vide la sortie du script trim.pl dans le même conteneur qu'avant, imprimant à la fois l'invite de commande et le titre de la fenêtre, mais cette fois, il ajoute la commande que vous venez de taper! C'est pourquoi vous ne voulez pas faire tout cela dans votre .bashrc: tout script que vous exécutez (sur ma machine, man est l'un d'entre eux) déclenchera cette chose sur chaque ligne. la production de l'homme est sérieusement déformée par ce que nous faisons ici. Nous ne jouons pas vraiment bien avec le terminal.

Pour saisir la commande que vous venez de taper, nous prenons l'historique de la bash et la coupons un peu:

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

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

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

Alors maintenant, j'ai un bazillion de fenêtres et ils disent des choses comme:

  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/

À partir de la petite barre joyeuse en bas de l'écran, je peux maintenant dire qui est qui en un coup d'œil. Et comme nous avons défini PS1, dès qu'une commande finit de s'exécuter, le nom de la commande est à nouveau remplacé par la sortie de trim.pl.

MISE À JOUR (même jour): Ce truc (les entrées .bash_profile) m'a posé toutes sortes d'enfer quand je l'ai essayé dans mon .bashrc. Votre .bashrc est exécuté par des scripts non interactifs chaque fois que vous invoquez bash comme langage. J'ai frappé ça quand j'essayais d'utiliser l'homme. Toutes sortes de déchets (le texte complet de mon .bashrc, plus les caractères d'échappement) sont apparus en haut de la page de manuel. Je suggérerais de tester ce joyau avec une rapide invocation «homme homme» en ligne de commande une fois que vous avez tout réuni.

Je suppose qu'il est temps pour moi de retirer les déchets personnalisés de mon .bashrc et de les mettre à leur place ...

Incedentally, je me suis retrouvé en train de taper «man trap» à un moment donné de ce processus.


8

À mon ancien lieu de travail, les heures de bureau étaient ridicules. C'était une société de logiciels et mon patron était nul. Il nous donnait du travail vers 17h30 (juste au moment de rentrer à la maison) et nous faisait finir le travail jusqu'à 23h00 (bien au-delà de nos heures de production idéales). Ou il trouverait des problèmes ennuyeux dans le code qui était encore en cours.

J'ai donc créé un fichier batch et un script qui éteindraient mon ordinateur à un moment aléatoire entre 19h00 et 20h00. Il y avait une minuterie d'une minute au cas où je resterais après les heures et que je devais interrompre le processus d'arrêt.

Mais je quittais mon bureau avant 17 heures pour qu'il ne puisse pas me trouver pour me garder s'il voulait jeter des conneries à l'heure du départ. S'il venait à mon bureau et voyait mon ordinateur allumé, il penserait que j'étais toujours dans le garde-manger ou à la supérette voisine pour prendre des chips ou quelque chose. Mais s'il était éteint à cette heure-là, il appellerait mon téléphone portable et me disait de retourner au bureau.

J'ai également programmé le BIOS sur ma machine pour allumer ma machine vers 8h00 ou 9h00 au cas où je me sentirais paresseux et que je voulais me promener vers 10h00 ou 11h00. Si je me faisais prendre en train de me rendre à mon bureau, il me demandait "où étais-tu toute la matinée?" Et je disais "j'étais à une réunion avec l'équipe marketing". ou "J'étais en train de prendre le petit déjeuner."

chien muet


7

J'avais l'habitude de travailler dans un camp d'été technologique, et nous devions rédiger ces articles pour chacun des enfants du groupe à la fin de la semaine, qu'ils recevaient ensuite et rapportaient à la maison comme souvenir. Habituellement, ceux-ci se composaient d'un tas de phrases génériques et d'une à deux phrases personnalisées. J'ai écrit un script python qui a construit l'une de ces descriptions à partir d'une banque de phrases prédéfinies et a permis à l'utilisateur d'ajouter quelques phrases personnalisées au milieu. Cela a sauvé énormément de temps pour moi et pour les autres conseillers que j'ai révélés au secret. Même si une grande partie était automatisée, nos rédactions semblaient toujours meilleures que la plupart des `` honnêtes '', car nous pouvions consacrer plus de temps aux parties personnalisées.


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

Un petit script qui surveille certains sites Web populaires pour des publicités qui correspondent à mes compétences et m'envoie un e-mail.


6

J'utilise ceci comme une fonction autochargée. Je peux simplement taper "mycd" et une liste de répertoires apparaît dans laquelle je cd fréquemment. Si je connais le numéro, je peux simplement dire quelque chose comme "mycd 2". Pour ajouter un répertoire à la liste, tapez simplement "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

}

Lorsque j'exécute "mycd", j'obtiens: "-bash: print: command not found". Quand j'utilise "mycd / folder /", cela n'ajoute rien à /tmp/mycd.txt. Est-ce que certains paramètres sont erronés?
Léo Léopold Hertz 준영

Ah, oui, vous voudrez peut-être remplacer les instructions 'print' par 'echo'. ;-)
wzzrd

@wzzrd Comment humiliant;) Fonction très cool, @Ethan Post. Merci pour le partage!
Léo Léopold Hertz 준영

5

J'aime stocker mes photos dans un répertoire basé sur la date à laquelle la photo a été prise. Par conséquent, j'ai écrit un programme qui numériserait une carte mémoire pour les images, créerait tous les dossiers sur mon disque dur dont il avait besoin en fonction des dates des images, puis les copierait.


Voulez-vous ajouter le script ici? J'adorerais cette fonctionnalité, je fais la même chose!
Pharaun

C'est une application ac #, pas un script, j'en ai peur.
Valerion

Utilisez-vous les informations exif stockées dans les photos? Pourriez-vous s'il vous plaît partager le script?
JJD

5

J'ai écrit un script pour cliquer sur mon bouton de démarrage, puis cliquez à nouveau dans une demi-seconde et répétez toutes les 30 secondes.

Cela me permet de rester connecté en ligne lorsque je suis au travail, et je peux faire le vrai travail sur mon ordinateur portable personnel juste à côté. Pas embourbé par les logiciels de travail.

Ne le dis pas au patron :)


Ha ha ha, de bonnes choses. +1 pour l'honnêteté et la malhonnêteté! :)
Kyle Walsh

4

Divers raccourcis vers les commandes "net start" et "net stop" pour que je puisse démarrer et arrêter des services sans avoir à accéder à la console MMC des services


4

Un script shell pour effectuer des sauvegardes rotatives à l'aide de rsync. Il prend également en charge l'exécution de programmes enfants arbitraires pour prendre en charge d'autres activités de pré-sauvegarde (téléchargement de délicieux signets, par exemple).

http://gist.github.com/6806


4

Une petite application qui fait un clic gauche (ou double-cliquez) toutes les "X" ms pendant "Y". Plus besoin de cet oiseau qui boit pour travailler à la centrale nucléaire! ;)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.