¿Cuál es el guión más útil que has escrito para la vida cotidiana? [cerrado]


132

Solo me pregunto qué pequeños guiones / programas han escrito las personas aquí que ayudan a uno con su vida cotidiana (es decir, no relacionada con el trabajo).

Todo vale, innovador o no. Para mí en este momento, es un pequeño script de Python para calcular el ritmo de carrera dada la distancia y el tiempo transcurrido.


He visto algunos muy interesantes relacionados con el trabajo, pero no tantos guiones relacionados con la "vida cotidiana". Por otra parte, si algo en el trabajo está arruinando tu vida y lo arreglaste con un guión ordenado, ¿quién soy yo para juzgar?
Kyle Walsh

10
Una de esas preguntas de gemas que hace que el desbordamiento de pila valga la pena. Cualquier directriz que sugiera que se cierre no debería estar allí, ningún mod que votó para cerrarlo no debería ser uno.
Bill K

Este es uno para mí: github.com/codeforester/base . Este marco ha aumentado mi productividad como persona SRE / DevOps a pasos agigantados, al tiempo que aumenta la cohesión y la colaboración del equipo.
codeforester

Respuestas:


116

Mi ollave se cayó en mi computadora portátil; así que escribí un programa que reemplaza dos 0pulsaciones de tecla dentro de 200 MS entre sí como o, dos 0pulsaciones de tecla dentro de 700 MS entre sí como a 0e ignora el resto; para poder usar mi computadora portátil antes de reemplazar el teclado.

Guau; No sabía que esto sería tan popular: p

En cuanto a cómo: Microsoft expone una pequeña y agradable característica de API llamada Hooks .

Usando ese gancho; Pude escribir un "filtro" que hizo lo que necesitaba que hiciera (pista: si devuelve 1 con sus ventanas de devolución de llamada no procesará la pulsación de tecla).

La razón por la que sé sobre esto en realidad no es porque estaba escribiendo un keylogger, sino porque escribí un programa smiler a Synergy hace un tiempo.

Y si. Escribí otro programa que intercambiaba teclas alfanuméricas con una clave alfanumérica aleatoria y sí; fue muy divertido: D


1
Podría haber pensado simplemente escribiendo en el resto de teclas expuesto, pero esa es ciertamente una forma interesante de
evitarlo

2
Me pregunto por qué no pensé que ... estoy teniendo el mismo problema ... :-(
asterite

1
Esto me recuerda a este cómic de XKCD: xkcd.com/196
JesperE

59
¡DECIR AH! ¡Y00u no podrá t00 escribir 00n en una tarjeta de teclado estándar de nuevo sin volver a entrenar sus dedos! G0000d Suerte!
Doug L.

107
La gran pregunta es ¿cómo lograste escribir ese programa sin usar la letra 'o'?
e.James

115

Ya no tengo el código, pero posiblemente el script más útil que escribí fue, lo creas o no, en VBA. Tenía un colega molesto que tenía un fusible tan corto que me referí a él como Cherry Bomb. A menudo se enojaba cuando los clientes llamaban y luego se levantaban y comenzaban a despotricarme sobre la pared del cubículo, matando mi productividad y mi moral.

Siempre tuve abierto Microsoft Excel. Cuando él haría esto, presionaría alt-tab para Excel y allí, en la barra de herramientas, había un nuevo ícono con una imagen de una bomba de cereza. Discretamente haría clic en eso ... y no pasaría nada.

Sin embargo, poco después recibiría una llamada telefónica y diría algo como "sí, sí, eso suena mal. Será mejor que eche un vistazo". Y luego me levantaba, me disculpaba con la bomba de cereza y me alejaba.

Lo que sucedió es que usamos NetWare y tenía un sistema de mensajería primitivo incorporado. Cuando hacía clic en el botón, un pequeño script de VBA enviaba un mensaje de NetWare a mis amigos, diciéndoles que la bomba de cereza estaba funcionando nuevamente y que ellos lo harían. por favor, llámame. Él nunca lo descubrió :)


94
Sabes que eres un programador cuando escribes un programa para salir de una situación social incómoda.
Cadoo

77
¡Increíble! ¡Esto es ingeniería social en su máxima expresión!
Beska

1
Esperemos que Cherry Bomb no use StackOverflow :)
Pedro Luz

94

Un script de Bash llamada a fin de que si estoy en /a/very/deeply/nested/path/somewherey yo quiero ir "hacia arriba" N directorios, puedo escribir :up N

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

Por ejemplo:

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

NB por gmatt:

Trabajando en el gran trabajo anterior, se puede extender a una función de retroceso colocando lo siguiente en su 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
}

44
+1 Absolutamente f 'ing brillante! ¡Lo usaré mucho !
wzzrd

12
¿Por qué reemplazaría el código fácil de leer con código difícil de leer? ¿Su computadora funciona más rápido si tiene menos líneas de código fuente?
Beska

3
GNUD: ¿reemplazar mi código limpio y claro con basura? No, gracias.
foxdonut

2
¡brillante! Extendí esto para incluir un backmétodo, por lo que cada vez que agota puede usar atrás para moverse fácilmente hacia adelante y hacia atrás. Para usarlo, pon esto en tu bashrc (perdón por el formato de mierda): 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
¿estoy loco? ¿Cómo diablos funciona esto? cd en un script lo hará allí, pero cuando exista el script, ¡volverá al mismo directorio / original! ¿funciona mi bash de manera diferente a la tuya?
johnnyB

67

Súper botón de reinicio remoto.
Un estante de hardware de simulación súper especial (en los días en que una habitación llena de cajas VME hacía menos que su GPU) que un usuario en el otro lado del mundo colapsaría en las primeras horas de la mañana. Me llevó una hora entrar al laboratorio y pasar por seguridad.

Pero no se nos permitió conectarnos al controlador súper especial o modificar el hardware. La solución fue una antigua estación de trabajo DEC con una impresora de matriz de puntos Epson, pegar una regla de plástico a la perilla de alimentación de papel, colocar la impresora cerca del botón de reinicio.
Inicie sesión en el WS como usuario habitual (no se permite la raíz, todos los puertos externos bloqueados), imprima un documento con 24 líneas en blanco, que giró la perilla de alimentación de papel y la regla presionó sobre el reinicio en el hardware súper especial .


Fantástica historia! No estoy seguro de si creerte o no;)
Greg Whitfield

Finalmente fue reemplazado por un relé de interruptor de alimentación conectado a la línea DTR en el puerto serie, pero eso requería acceso a la raíz. Y debería haber dicho DEC WS porque estaba ejecutando Ultrix.
Martin Beckett

¡Guau, hasta dónde llegamos para llegar por seguridad!
Chris Ballance


55
Si tuviéramos bandejas de CD en esos días, habría sido una solución más fácil,
Martin Beckett

63

En Windows XP, he configurado un trabajo AT para ejecutar este comando diariamente en C: \

dir /s /b * > dirlist.txt

Esto enumera la ruta completa de todos los archivos en la unidad C. Luego, cada vez que necesito encontrar un archivo, puedo usarlo findstr. Esto supera el uso de Windows Explorer Search, ya que permite la coincidencia de expresiones regulares en toda la ruta. Por ejemplo:

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

Esta es una solución muy rápida de configurar, y excelente si te encuentras con una nueva instalación de Windows y sin conexión a Internet.

Si necesita buscar dentro de ciertos tipos de archivo algún patrón, primero enumere todos los archivos que necesita verificar, luego busque dentro de ellos. Por ejemplo, para encontrar un programa Java o Python que voltee una imagen, puede hacer esto:

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

8
amigo, que gran idea.
Epaga

10
Esto es exactamente lo que hace el programa de localización de Unix
Mark Baker,

44
@ Mark Lo que demuestra que incluso si tiene que trabajar con Windows, puede aprender muchísimas cosas útiles de Unix
Liam

1
Hice uno de estos scripts para mi carpeta "Documentos", que parece que nunca puedo mantener organizado :-)
sep332

1
y allí estaba usando la búsqueda de Google Desktop: D
inspite el

38

Tengo un script de Python que se ejecuta automáticamente cuando conecto mi cámara digital.

Copia todas las imágenes de la tarjeta en la cámara, las copia de seguridad y luego las sube a Flickr.


La pieza de subir a Flickr proviene de uploadr.py (que no me puedo dar crédito).

Aquí está el código de Python para descargar la cámara. Se repite a través de SRCDIR y nombra cada imagen con la fecha y la hora antes de copiar las imágenes a 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)

Comparta el código, y compartiré un voto positivo :)
Incluso Mien

40
Este será un gran trabajo hasta el día que se olvide esas fotos especiales que tomó la noche anterior ...
Ed Guiness

Lo completo es en realidad un proceso de dos pasos. El primer paso elimina las cosas de la cámara y las renombra. El segundo paso tiene un mensaje que le pregunta si desea subir a Flickr. Eso se debe más a que cargar sube mi ancho de banda que a que me preocupa lo que estoy cargando.
Mark Biek

55
¿Cómo se activa el bit 'ejecutar en el enchufe'?
ijw


32

Hace unos años escribí una aplicación winforms con la ayuda de algunas API de win32 para bloquearme por completo de mi computadora durante una hora para que me obligara a hacer ejercicio. ¿Porque era vago? No ... porque tenía un objetivo personal de acondicionamiento físico. A veces solo necesitas una pequeña patada para comenzar :)


16

Escribí un script de Python que iría a todos los cómics web que leía y descargaría cualquier cómic nuevo. Simplemente ejecuto eso una vez al día, y no hay necesidad de visitar cada sitio individualmente, solo visite / Comics / Folder. ;)


hmmm Si estos son cómics con publicidad, me preocuparía que no esté "pagando" al correr el riesgo de ver los anuncios :-)
Matthew Scouten

2
@Matthew: veo su punto de vista, pero no entiendo por qué no mirar un anuncio es un problema moral / ético. Si ese es el caso, los autores de No-Script y los bloqueadores de ventanas emergentes tienen muchas explicaciones que hacer. ;)
Onion-Knight

1
No tengo ningún problema con los bloqueadores de ventanas emergentes, porque las ventanas emergentes son una forma abusiva de mostrar anuncios. No es exactamente una cuestión moral, más bien una cuestión de equidad. Utilizo un bloqueador de anuncios en la mayoría de los sitios, pero lo desactivo para ciertos sitios que visito con frecuencia y deseo apoyar. Obtener los cómics con un script de Python (y nunca ver el sitio en absoluto) me parece exagerado, pero no podría decirte exactamente dónde está la línea.
Matthew Scouten

14

Mi script de copia de seguridad .cmd. Se ejecuta en mi servidor todas las noches y nombra los archivos de respaldo según el día de la semana. Una semana completa de copias de seguridad me ha salvado (y a mi familia) muchas veces:

:: Args de respaldo:
:: / V Verificar? (sí No)
:: / R ¿Restringe el acceso al propietario? (sí No)
:: / RS Almacenamiento extraíble? (sí No)
:: / Compresión de hardware HC (activar / desactivar)
:: / M Tipo de copia de seguridad (normal / copia / diferencial / incremental / diario)
:: / L Tipo de archivo de registro (f / s / n)
:: / D "Descripción"
:: / J "Nombre del trabajo"
:: / F "Nombre de archivo"

SETLOCAL

:: asegúrese de que las unidades de red estén montadas
LLAMADA C: \ bat \ configs \ MapShares-home.cmd
eco en

establecido hoy =% FECHA: ~ 0,3%
si% hoy% == lunes establecido ayer = 0 domingo
si% hoy% == martes establecido ayer = 1 lunes
if% today% == Wed set ayer = 2 martes
si% hoy% == jueves establecido ayer = 3 miércoles
si% hoy% == viernes establecido ayer = 4 jueves
if% today% == Sat set ayer = 5 viernes
si% hoy% == Sol se puso ayer = 6 Sábado

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

:: (por ejemplo: archivos de lunes C)
establecer título =% ayer% conjunto de copia de seguridad


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

LLAME A BackupConfigs.bat

:: Crear nuevo archivo BKF
llame a C: \ WINDOWS \ system32 \ ntbackup.exe copia de seguridad ^
    "@% configsDir% \ daily.bks" ^
    / V: sí / R: no / RS: no / HC: apagado / M normal / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% ayer% .bkf" ^
    >> "% storePath% \% ayer% _backup.log"

echo% DATE%% TIME% Completado >> "% storePath% \% ayer% _backup.log"

copie "% storePath% \% ayer% .bkf" "V: \ Backups \ NEPTUNE"

LLAMADA C: \ bat \ clean-temps.bat

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

:: mostrar directorios de respaldo
inicio / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::pausa


2
Algunos buenos trucos con archivos .cmd allí. Sabía que podía usar '^' para escapar de la redirección y las tuberías, pero no sabía que también podría usarlo para la continuación de línea. Genial :)
Patrick Cuff

¡El mundo necesita menos scripts .bat, no más! :-)
JesperE

2
Y el corolario es que el mundo necesita menos Windows. Hasta entonces, este es el mínimo común denominador. Comparto este script porque millones de personas pueden usarlo, tal como está.
Chris Noe

14

"backup.sh" que bloquea el contenido de un directorio y lo envía a mi cuenta de gmail.


Eso sí que es genial. Aunque no tengo computadoras fuera de mis decenas que tengan configuración smtp. Tristemente.
mxcl

¿Podríamos tener el código por favor?
Kostas

14

Escribí un guión que terminó siendo utilizado todos los días en mi equipo. Cuando solía trabajar para Intel, teníamos una aplicación que hablaba con una base de datos de acceso para obtener un volcado de información de registro (trabajé en la validación de los conjuntos de chips). Tomaría esta información (de una consulta SQL) y la volcaría en un archivo CSV, un archivo HTML y un archivo Excel. Todo el proceso tomó casi 2 horas. No es broma. No tengo idea de por qué tardó tanto. Comenzaríamos una hora antes del almuerzo, iríamos a almorzar y luego regresaríamos.

Pensé que tenía que haber una mejor manera de hacer esto. Hablé con el equipo que mantenía la base de datos de registro y obtuve el código SQL de ellos. Luego escribí un script en perl que tomó los datos y los envió a los formatos CSV, HTML y Excel. Tiempo de ejecución? Alrededor de 1-2 segundos. Una gran mejora de velocidad.

También escribí algunos guiones mientras estaba desplegado en Irak en 2006 (presté servicio en la Guardia Nacional durante 9 años, salí en diciembre). Utilizamos esta vieja aplicación llamada ULLS-G (Sistema de Logística de Nivel de Unidad - Tierra) que se escribió en ADA y se ejecutó originalmente en DOS. Lo piratearon lo suficiente para ejecutarlo en Windows XP en un shell de comandos. Este sistema no tenía una interfaz de mouse. Todo fue a través del teclado y NO tenía funcionalidad por lotes. Entonces, ¿digamos que desea imprimir licencias para todos los operadores de vehículos? Bueno ... teníamos 150 soldados en nuestra unidad, así que tomó MUCHO tiempo. Supongamos que todos se calificaron en un vehículo nuevo y que quería agregarlo a las calificaciones de todos los operadores. Tenías que hacerlo uno por uno.

Pude encontrar un controlador ODBC para la base de datos SAGE (lo que usó ULLS-G) y escribí scripts en perl que podían comunicarse con la base de datos SAGE. Entonces, las cosas que tomaron más de una hora, ahora tomaron solo unos segundos. También utilicé mis scripts y el controlador para informar. Tuvimos que informar toda la información al batallón todas las mañanas. Otras unidades escribirían la información a mano todas las mañanas. Creé una macro de Excel que usaba el mismo controlador y hablaba con la base de datos SAGE y actualicé la hoja de cálculo de Excel de esa manera. Es lo más complicado y macro de Excel única que he escrito. Valió la pena porque me otorgaron la Medalla de Elogio del Ejército. Así que sí, obtuve una medalla en el ejército por escribir guiones en perl :) ¿Cuántos pueden decir eso? ;)


13

Soy un piloto privado. Escribí un par de guiones que obtienen información meteorológica para los aeropuertos locales de aviationweather.gov. Fueron útiles para una respuesta rápida a la pregunta "¿Es hoy un buen día para volar?"


¡Espero para sus pasajeros que su guión falle bien si aviationweather.gov cambia su diseño y rompe su analizador!
MatthieuP

1
¿Podría por favor compartir el guión?
JJD

12

Un script de Greasemonkey que elimina comentarios obviamente estúpidos [*] del sitio de juegos Kotaku.com.

[*] Según lo identificado por errores ortográficos comunes, escritura en mayúsculas, uso excesivo de "LOL" y heurísticas similares.


66
Frio. Tengo ganas de extraer las expresiones regulares y generar declaraciones aleatorias que consisten solo en expresiones que coinciden con una o más de ellas.
gnud

11

alias dir = 'ls -al' es mi script favorito preferido.


44
eww ... a menudo me encuentro con ganas de ir a otro lado ...
escalofríos42

1
Tienes que preguntarte por qué la gente comienza a votar las respuestas a las preguntas con una etiqueta de subjetivo ... ¿cuál es el maldito punto?
Greg Whitfield

Sí, esto es crítico :)
Nick

11

Un raspador HTML enhebrado para descargar todos los subtítulos disponibles para series / películas desde un sitio que es difícil de usar (debe hacer clic como 4 veces después de una búsqueda para llegar a la página de descarga, solo para mostrar más anuncios). Ahora solo pongo los criterios de búsqueda y presiono descargar.


2
Lo compartirá y el sitio lo descubrirá :). Mejor no compartir a veces ...
Camilo Díaz Repka

11

Un script perl que raspa mi Craigslist local, por categorías seleccionadas, en una base de datos SQL que luego puedo consultar.

V2 de esto actualiza la base de datos con un temporizador y me alerta si tengo una coincidencia en alguna de las consultas, básicamente me proporciona un agente de fondo para CL.


8

Cambio de nombre de archivos en masa mediante arrastrar y soltar.

Hace años, hice un pequeño VBScript que acepta un RegEx y reemplaza los nombres de los archivos en consecuencia. Simplemente colocarías un montón de archivos o carpetas en él. Me pareció muy útil a lo largo de los años.

gist.github.com/15824 (Cuidado, los comentarios están en alemán)


Parece una tontería votar una descripción sin código.
Chris Noe

El código sería demasiado para el sitio web. Tal vez "pequeño" era un poco insuficiente. Es 170 LOC.
Tomalak

Podría subir el script a algún lugar y publicar el enlace aquí si está interesado.
Tomalak

8

Un script Python rápido y sucio que buscó el DNS para google.com cada 5 segundos y emitió un pitido una vez si tuvo éxito y dos veces si falló.

Escribí esto durante un tiempo en que tenía que vivir con una red hogareña muy débil. Me permitió conocer instantáneamente el estado de la red incluso cuando estaba de cabeza debajo del escritorio al otro lado de la habitación con las dos manos llenas de cable de red y una linterna en la boca.


¿5 segundos? Debe haberse vuelto realmente molesto.
Ponkadoodle

Bueno, sí, me llevó a los murciélagos después de 30 minutos más o menos. La idea era tener la mayor retroalimentación posible en tiempo real. Por lo general, podría arreglar las cosas en unos 10 minutos.
Matthew Scouten

8

Esto, de una publicación en mi blog hace unos meses, pasó de ser una idea que pensé que era genial a uno de los mejores pequeños trucos que he inventado recientemente. Lo cito completo aquí:

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

Paso mucho tiempo en bash. Para los no iniciados, bash es un sistema que encontrarás en la mayoría de las máquinas Unix y, afortunadamente, en algunas ventanas y en todas las Mac. A primera vista, no es más que una interfaz de línea de comandos y, por lo tanto, está fuera del radar de la mayoría de los usuarios que ven tales cosas como un anacronismo que prefieren olvidar.

Hago casi todo en bash. LEA MI CORREO ELECTRÓNICO DESDE UNA LÍNEA DE MANDO, por eso evito el correo marcado. Navego por directorios, edito archivos, participo en el proceso de pago y entrega del código fuente diario, busco archivos, busco dentro de los archivos, reinicio mi máquina e incluso ocasionalmente navego por páginas web desde la línea de comandos. bash es el corazón y el alma de mi existencia digital.

El problema es que tiendo a tener unas 6 ventanas de bash abiertas a la vez. En el trabajo de hoy, tenía uno que ejecutaba un servidor web, otro que jugaba con mi base de datos, un tercero, cuarto y quinto que editaban diferentes archivos, mientras que un sexto estaba trabajando en mi máquina tratando de grabar los nombres de cada archivo en el sistema. ¿Por qué? Porque es útil poder buscar a través de dicho archivo si desea saber dónde encontrar un objeto por nombre de archivo.

Cuando haces esto, terminas con muchas ventanas en tu barra de control llamadas simplemente "bash". Esto está bien si solo tienes uno de ellos, pero es una agonía cuando tienes 6 o más ... y dos docenas de cosas más. Tengo tres monitores bajo el comando simultáneo de un par de teclado / mouse y todavía siento la necesidad de más. Cada una de esas ventanas tiene varias terminales de bash abiertas.

Así que he juntado esto juntos. Primero, coloque estas líneas en su .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

Revisé y escribí docenas de párrafos sobre cómo funciona todo esto y exactamente por qué está configurado de la manera en que está, pero no estás realmente interesado. Créeme. Hay un capítulo completo de un libro sobre por qué hice "CMD =... ; echo ..." en esa tercera línea. Muchas personas (incluido bluehost, donde está alojado mi otro dominio) todavía usan una versión antigua de bash con errores importantes en la forma en que maneja las trampas, por lo que estamos atrapados con esto. Puede eliminar el CMD y reemplazarlo con $ BASH_COMMAND si está actualizado en su versión bash y tiene ganas de hacer la investigación.

De todos modos, el primer script que uso está aquí. Crea un buen mensaje que contiene el nombre y el directorio de su máquina, cortado a una longitud razonable:

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

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

Hay una advertencia en la parte superior de esta publicación de blog que debería leer ahora antes de comenzar a hacer preguntas estúpidas como "¿Por qué no usaste la variable de entorno HOSTNAME a través de @ENV?" Simple: porque eso no funciona para todos los sistemas que lo probé.

Ahora para la parte realmente genial. ¿Recuerdas la línea 3 de la adición .bash_profile?

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

Está volcando la salida del script trim.pl en el mismo contenedor que antes, imprimiendo tanto en el símbolo del sistema como en el título de la ventana, ¡pero esta vez está agregando el comando que acaba de escribir! Es por eso que no desea hacer todo esto en su .bashrc: cualquier script que ejecute (en mi máquina, el hombre es uno de ellos) activará esto en cada línea. La producción del hombre se ve seriamente confusa por lo que estamos haciendo aquí. No estamos jugando exactamente bien con la terminal.

Para obtener el comando que acabas de escribir, tomamos el historial del bash y lo dividimos un poco:

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

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

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

Así que ahora tengo un billón de ventanas funcionando y dicen cosas como:

  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/

Desde la pequeña barra feliz en la parte inferior de la pantalla, ahora puedo decir cuál es cuál en un momento. Y debido a que hemos configurado PS1, tan pronto como un comando termina de ejecutarse, el nombre del comando se reemplaza solo por la salida de trim.pl nuevamente.

ACTUALIZACIÓN (mismo día): estas cosas (las entradas de .bash_profile) me causaron todo tipo de problemas cuando lo probé en mi .bashrc. Su .bashrc es ejecutado por scripts no interactivos cada vez que invoca bash como idioma. Golpeé esto cuando estaba tratando de usar al hombre. Todo tipo de basura (el texto completo de mi .bashrc, más caracteres de escape) apareció en la parte superior de la página del manual. Sugeriría probar esta gema con una rápida invocación 'man man' en la línea de comando una vez que lo haya reunido todo.

Supongo que es hora de que saque la basura personalizada de mi .bashrc y la coloque donde pertenece ...

Incedentemente, me encontré escribiendo 'man trap' en un punto de este proceso.


8

En mi lugar de trabajo anterior, las horas de oficina eran ridículas. Era una empresa de software y mi jefe fue absorbido. Nos daba trabajo alrededor de las 5:30 p. M. (Justo cuando era hora de volver a casa) y nos hacía terminar el trabajo hasta pasadas las 11:00 p. M. (Más allá de nuestras horas productivas ideales). O encontraría problemas molestos en el código que todavía estaba en progreso.

Así que hice un archivo por lotes y un script que apagaba mi computadora en un momento aleatorio entre las 7:00 p.m. y las 8:00 p.m. Tenía un temporizador de 1 minuto en caso de que me quedara después de las horas y necesitara abortar el proceso de apagado.

Pero dejaría mi escritorio antes de las 5:00 p. M. Para que no pudiera encontrarme para mantenerme si quería tirar basura a la hora de pagar. Si él llegara a mi escritorio y viera mi computadora encendida, pensaría que todavía estaba cerca del área de la despensa o en el minimart cercano para tomar algunos chips o algo. Pero si estaba apagado por esa época, llamaría a mi teléfono celular y me diría que volviera a la oficina.

También programé el BIOS en mi máquina para encenderla alrededor de las 8:00 a.m. o 9:00 a.m.en caso de que me sintiera flojo y quisiera pasear alrededor de las 10:00 a.m. o a las 11:00 a.m. Si me atrapaban caminando hacia mi escritorio, me preguntaba "¿dónde has estado toda la mañana?" Y yo diría "Estaba en una reunión con el equipo de marketing". o "Salí a desayunar".

perro tonto


7

Solía ​​trabajar en un campamento de tecnología de verano, y tuvimos que componer estos relatos para cada uno de los niños del grupo al final de la semana, que luego recibirían y llevarían a casa como recuerdo. Por lo general, consistían en un montón de oraciones genéricas y una o dos oraciones personalizadas. Escribí un script de Python que construyó uno de estos escritos a partir de un banco de oraciones enlatadas, y permitió al usuario agregar un par de oraciones personalizadas en el medio. Esto me ahorró una gran cantidad de tiempo a mí y a otros consejeros que dejé en secreto. A pesar de que gran parte de ella estaba automatizada, nuestros informes todavía se veían mejor que muchos de los "honestos", porque podíamos dedicar más tiempo a las partes personalizadas.


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 script de Greasemonkey para agregar un cuadro de control "presione mucho ese botón" a un juego en línea.


6

Un pequeño script que monitorea algunos sitios web populares en busca de anuncios que coincidan con mis habilidades y me envía un correo electrónico.


6

Lo uso como una función de carga automática. Simplemente puedo escribir "mycd" y aparece una lista de directorios a los que frecuentemente hago cd. Si conozco el número, puedo decir algo como "mycd 2". Para agregar un directorio a la lista, simplemente escriba "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

}

Cuando ejecuto "mycd", obtengo: "-bash: print: comando no encontrado". Cuando uso "mycd / folder /", no agrega nada a /tmp/mycd.txt. ¿Tengo alguna configuración incorrecta?
Léo Léopold Hertz 준영

Ah, sí, es posible que desee reemplazar las declaraciones 'print' con 'echo'. ;-)
wzzrd

@wzzrd Qué humillante;) Función muy genial, @Ethan Post. ¡Gracias por compartir!
Léo Léopold Hertz 준영

5

Me gusta almacenar mis fotos en un directorio basado en la fecha en que se tomó la foto. Por lo tanto, escribí un programa que escaneaba una tarjeta de memoria en busca de imágenes, creaba las carpetas en mi disco duro que necesitaba según las fechas de las imágenes y luego las copiaba.


¿Quieres agregar el script aquí? Me encantaría esta funcionalidad, ¡hago lo mismo!
Pharaun

Es una aplicación ac #, no un script, me temo.
Valerion

¿Utiliza la información exif almacenada en las fotos? ¿Podría por favor compartir el guión?
JJD

5

Escribió un script para hacer clic en mi botón de inicio, luego haga clic nuevamente en medio segundo y repita cada 30 segundos.

Me mantiene marcado en línea mientras estoy en el trabajo, y puedo hacer el trabajo real en mi computadora portátil personal justo al lado. No empantanado por software de trabajo.

No le digas al jefe :)


Ja ja ja, cosas buenas. ¡+1 por la honestidad y la deshonestidad! :)
Kyle Walsh

4

Varios accesos directos a los comandos "net start" y "net stop" para que pueda iniciar y detener los servicios sin tener que ingresar a la MMC de servicios


4

Un script de shell para realizar copias de seguridad rotativas usando rsync. También es compatible con la ejecución de programas secundarios arbitrarios para otras actividades previas a la copia de seguridad (por ejemplo, descargando deliciosos marcadores).

http://gist.github.com/6806


4

Una pequeña aplicación que hizo clic izquierdo (o doble clic) cada "X" ms durante un período de tiempo "Y". ¡Ya no es necesario que ese pájaro bebedor trabaje en la central nuclear! ;)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.