Qual é o script mais útil que você escreveu para a vida cotidiana? [fechadas]


132

Imaginando que pequenos scripts / programas as pessoas escreveram aqui que ajudam a sua vida cotidiana (também conhecida como não relacionada ao trabalho).

Tudo vale, inovador ou não. Para mim, neste momento, é um pequeno script python para calcular o ritmo de execução, dada a distância e o tempo decorrido.


Eu já vi alguns trabalhos muito legais relacionados ao trabalho, mas não tantos scripts relacionados à "vida cotidiana". Então, novamente, se algo no trabalho está arruinando sua vida e você o corrigiu com um roteiro elegante, quem sou eu para julgar?
Kyle Walsh

10
Uma dessas perguntas que faz valer a pena o estouro da pilha. Qualquer diretriz que sugira que ela seja fechada não deve estar lá, qualquer mod que tenha votado para fechá-la não deveria estar lá.
Bill K

Este é um para mim: github.com/codeforester/base . Essa estrutura aumentou minha produtividade como pessoa de SRE / DevOps aos trancos e barrancos, além de aumentar a coesão e colaboração da equipe.
codeforester

Respostas:


116

Minha ochave caiu no meu laptop; então, eu escrevi um programa que substitui duas 0teclas pressionadas a 200 MS uma da outra como uma o, duas 0teclas pressionadas a 700 MS uma da outra 0e ignorando o resto; para que eu pudesse usar meu laptop antes de substituir o teclado.

Uau; Eu não sabia que isso seria tão popular: p

Quanto a como - a Microsoft expõe um pequeno recurso de API chamado Hooks .

Usando esse gancho; Consegui escrever um "filtro" que fez o que eu precisava fazer (dica: se você retornar 1 com suas janelas de retorno de chamada não processará o pressionamento de tecla).

A razão pela qual eu sei sobre isso não é porque eu estava escrevendo um keylogger - mas porque escrevi um visualizador de programa para o Synergy há um tempo atrás.

E sim. Escrevi outro programa que trocava teclas alfanuméricas por uma tecla alfanumérica aleatória e sim; foi muito engraçado: D


1
Eu poderia ter pensado apenas de digitação na chave-rest exposta, mas isso é certamente uma maneira interessante em torno dele :)
Warren

2
I wnder por isso que eu não acho f isso ... Eu estou tendo o mesmo prblem ... :-(
asterite

1
Isso me lembra dessa história em quadrinhos do XKCD: xkcd.com/196
JesperE

59
HA! Y00u não será capaz de executar o tipo 00n em um teclado padrão novamente, com os dedos novamente treinados! G0000d Sorte!
Doug L.

107
A grande questão é como você conseguiu escrever esse programa sem usar a letra 'o'?
e.James

115

Não tenho mais o código, mas possivelmente o script mais útil que escrevi foi, acredite ou não, no VBA. Eu tinha um colega irritante que tinha um pavio tão curto que me referi a ele como Cherry Bomb. Ele costumava ficar bravo quando os clientes ligavam e depois se levantavam e começavam a reclamar de mim por cima do muro do cubículo, matando minha produtividade e moral.

Eu sempre tive o Microsoft Excel aberto. Quando ele fazia isso, eu alternava alternadamente para o Excel e, na barra de ferramentas, havia um novo ícone com a imagem de uma bomba de cereja. Eu clicaria discretamente nisso ... e nada aconteceria.

No entanto, logo depois disso, recebia um telefonema e dizia algo como "sim, sim, isso parece ruim. É melhor eu dar uma olhada". E então eu me levantava, me desculpava com a bomba de cereja e me afastava.

O que aconteceu foi que usamos o NetWare e ele possuía um sistema de mensagens primitivo embutido. Quando eu clicava no botão, um pequeno script VBA enviava uma mensagem do NetWare aos meus amigos, dizendo a eles que a Cherry Bomb estava lá novamente e eles por favor me ligue. Ele nunca descobriu isso :)


94
Você sabe que é programador quando escreve um programa para sair de uma situação social embaraçosa.
Cadoo

7
Impressionante! Esta é a engenharia social no seu melhor!
21329 Beska

1
Não Vamos esperar Cherry Bomb não usar StackOverflow :)
Pedro Luz

94

Um script bash chamado até de modo que, se eu estou em /a/very/deeply/nested/path/somewheree eu quero ir "para cima" N diretórios, posso digitar :up N

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

Por exemplo:

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

NB por gmatt:

Trabalhando com o excelente trabalho acima, ele pode ser estendido para uma função back, colocando o seguinte no seu 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 Absolutamente f 'ing brilhante! Eu vou usar muito isso !
wzzrd 30/01/09

12
Por que você substitui o código de fácil leitura por um código de difícil leitura? Seu computador funciona mais rapidamente se você tiver menos menos linhas de código-fonte?
Beska

3
gnud: substitua meu código limpo e limpo por lixo? Não, obrigado.
foxdonut

2
brilhante! Estendi isso para incluir um backmétodo, portanto, sempre que você usar, poderá voltar para avançar e voltar com facilidade. Para usá-lo, coloque isso no seu bashrc (desculpe pela formatação de merda): function up () {LIMIT = $ 1 P = $ PWD para ((i = 1; i <= LIMIT; i ++)) faça P = $ P / .. Cd $ P exportar MPWD = $ P} função back () {LIMIT = $ 1 P = $ MPWD para ((i = 1; i <= LIMIT; i ++)) do P = $ {P% / ..} cd concluído $ P export MPWD = $ P}
ldog 17/06/10

2
eu sou louco? como diabos isso funciona? cd em um script cdará lá, mas quando o script existir, você estará de volta no mesmo diretório / original! minha festança funciona diferente da sua?
precisa saber é o seguinte

67

Botão de reset super remoto.
Um rack de hardware de simulação super especial (nos dias em que uma sala cheia de caixas VME fazia menos do que a sua GPU) em que um usuário do outro lado do mundo falhava nas primeiras horas da manhã. Demorou uma hora para entrar no laboratório e através da segurança.

Mas não é permitido conectar ao controlador super especial ou modificar o hardware. A solução foi uma antiga estação de trabalho DEC com uma impressora matricial de pontos da Epson, prenda uma régua plástica ao botão de alimentação de papel e posicione a impressora perto do botão de reinicialização.
Efetue login no WS como usuário comum (sem raiz permitida, todas as portas externas bloqueadas), imprima um documento com 24 linhas em branco - que girou o botão de alimentação de papel e a régua pressionou a redefinição no hardware super especial .


História fantástica! Não tenho certeza se acredito em você ou não;)
Greg Whitfield

Eventualmente, foi substituído por um relé do comutador de energia conectado à linha DTR na porta serial - mas isso exigia acesso root. E eu deveria ter dito o DEC WS porque estava executando o Ultrix.
9138 Martin Beckett #

Uau, o quanto vamos conseguir pela segurança!
Chris Ballance


5
Se tivéssemos bandejas CD naqueles dias, teria sido uma solução mais fácil,
Martin Beckett

63

No Windows XP, eu configurei um trabalho AT para executar este comando diariamente em C: \

dir /s /b * > dirlist.txt

Isso lista o caminho completo de todos os arquivos na unidade C. Sempre que precisar encontrar um arquivo, posso usá-lo findstr. Isso supera o uso da Pesquisa do Windows Explorer, pois permite a correspondência de expressões regulares em todo o caminho. Por exemplo:

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

Esta é uma solução muito rápida de configurar, e excelente se você se encontrar com uma nova instalação do Windows e sem conexão à Internet.

Se você precisar procurar dentro de certos tipos de arquivo por algum padrão, primeiro liste todos os arquivos que precisa verificar e, em seguida, procure dentro deles. Por exemplo, para encontrar um programa Java ou Python que vira uma imagem, você pode fazer isso:

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

8
cara, que ótima idéia.
Epaga 10/10/08

10
Este é exatamente o que o unix localizar programa faz
Mark Baker

4
@ Marcos que mostra que mesmo se você tem que trabalhar com o Windows, você pode aprender uma enorme quantidade de material útil de unix
Liam

1
Fiz um desses scripts para minha pasta "Documentos", que eu nunca consigo manter organizado :-)
sep332

1
e lá estava eu ​​usando a pesquisa do Google Desktop: D
inspite

38

Eu tenho um script Python que é executado automaticamente quando eu conecto minha câmera digital.

Ele copia todas as fotos do cartão na câmera, faz o backup e as carrega no Flickr.


A parte de upload para o Flickr é de uploadr.py (da qual não posso receber crédito).

Aqui está o código Python para descarregar a câmera. Ele ocorre através do SRCDIR e nomeia cada imagem com a data e a hora antes de copiar as imagens para 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)

Compartilhe o código e eu compartilharei um voto
positivo

40
Isto irá funcionar muito bem até o dia em que você esquecer essas fotos especiais que você tomou na noite anterior ...
Ed Guiness

A coisa toda é realmente um processo de duas etapas. O primeiro passo despeja as coisas da câmera e as renomeia. A segunda etapa tem um prompt perguntando se você deseja fazer o upload para o Flickr. É mais porque carregar mata minha largura de banda do que porque estou preocupado com o que estou carregando.
Mark Biek

5
Como você aciona o bit 'executar no plug-in'?
Ijw 02/09/2009


32

Alguns anos atrás, eu escrevi um aplicativo winforms com a ajuda de algumas APIs do win32 para me bloquear completamente do meu computador por uma hora, para que isso me obrigasse a fazer exercícios. Porque eu era preguiçosa? Não ... porque eu tinha um objetivo pessoal de condicionamento físico. Às vezes você só precisa de um pequeno chute para começar :)


16

Eu escrevi um script Python que iria para todos os quadrinhos da web que eu li e baixaria todos os novos quadrinhos. Eu corro isso uma vez por dia e não há necessidade de visitar cada site individualmente, basta visitar a pasta / Comics /. ;)


hmmm. Se estes são quadrinhos com suporte a anúncios, eu me preocuparia que você não esteja "pagando", arriscando-se a vê-
los

2
@ Matthew - Entendo o seu ponto, mas não vejo por que não olhar para um anúncio é uma questão moral / ética. Se for esse o caso, os autores de No-Script e bloqueadores de pop-up têm muito a explicar. ;)
Cebola-Knight

1
Não tenho nenhum problema com bloqueadores de pop-up, porque os pop-ups são uma maneira abusiva de exibir anúncios. Não é exatamente uma questão moral, é mais uma questão de justiça. Uso um bloqueador de anúncios na maioria dos sites, mas desative-o em determinados sites que visito com frequência e desejo apoiar. Buscar os quadrinhos com um script python (e nunca ver o site) parece excêntrico para mim, mas eu não sabia dizer exatamente onde está a linha.
Matthew Scouten

14

Meu script de backup .cmd. Ele roda no meu servidor todas as noites e nomeia os arquivos de backup de acordo com o dia da semana. Uma semana inteira de backups me salvou (e minha família) várias vezes:

:: Args de backup:
:: / V Verificar? (sim não)
:: / R restringir o acesso ao proprietário? (sim não)
:: / Armazenamento removível RS? (sim não)
:: / Compressão de hardware HC (ativado / desativado)
:: / M Tipo de backup (normal / cópia / diferencial / incremental / diário)
:: / L Tipo de arquivo de log (f / s / n)
:: / D "Descrição"
:: / J "Nome do trabalho"
:: / F "Nome do arquivo"

SETLOCAL

:: verifique se as unidades de rede estão montadas
CHAMADA C: \ bat \ configs \ MapShares-home.cmd
ecoar

definido hoje =% DATE: ~ 0,3%
se% today% == segunda-feira definida ontem = 0 domingo
se% today% == ter definido ontem = 1 segunda-feira
se% today% == quarta-feira definida ontem = 2 terça-feira
se% today% == qui definido ontem = 3 quarta-feira
se% today% == sex definido ontem = 4 quinta-feira
se% today% == sáb definido ontem = 5 sexta-feira
se% today% == Dom se pôs ontem = 6Sábado

definir configsDir =% ~ dp0
defina storePath = C: \ mybackups

:: (por exemplo: arquivos C de segunda-feira)
set title =% ontem% conjunto de backup


eco% DATE%% TIME%% title%> "% storePath% \% ontem% _backup.log"

CALL BackupConfigs.bat

:: Crie um novo arquivo BKF
chame C: \ WINDOWS \ system32 \ ntbackup.exe backup ^
    "@% configsDir% \ daily.bks" ^
    / V: sim / R: não / RS: não / HC: desativado / M normal / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% ontem% .bkf" ^
    >> "% storePath% \% ontem% _backup.log"

eco% DATE%% TIME% Concluído >> "% storePath% \% ontem% _backup.log"

copiar "% storePath% \% ontem% .bkf" "V: \ Backups \ NEPTUNE"

LIGUE C: \ bat \ clean-temps.bat

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

:: exibir diretórios de backup
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::pausa


2
Alguns belos truques de arquivo .cmd lá. Eu sabia que você poderia usar '^' para escapar de redirecionamentos e pipes, mas não sabia que você também poderia usá-lo para a continuação da linha. Cool :)
Patrick Cuff

O mundo precisa de menos scripts .bat, não mais! :-)
JesperE

2
E o corolário é que o mundo precisa de menos Windows. Até então, este é o denominador menos comum. Eu compartilho esse script porque milhões de pessoas podem usá-lo, como é.
Chris Noe

14

"backup.sh" que organiza o conteúdo de um diretório e o envia para minha conta do Gmail.


Agora isso é legal. Embora eu não tenha computadores das minhas dezenas com configuração smtp. Infelizmente.
Mxcl 24/10/08

Poderíamos ter o código, por favor?
Kostas

14

Eu escrevi um script que acabou sendo usado todos os dias em minha equipe. Quando eu trabalhava na Intel, tínhamos um aplicativo que conversava com um banco de dados de acesso para obter um despejo de informações de registro (trabalhei na validação de chipsets). Ele pegaria essas informações (de uma consulta SQL) e as despejaria em um arquivo CSV, arquivo HTML e arquivo do Excel. Todo o processo levou quase 2 horas. Não é brincadeira. Não faço ideia por que demorou tanto tempo. Começaríamos uma hora antes do almoço, iríamos almoçar e depois voltaríamos.

Eu pensei que tinha que haver uma maneira melhor de fazer isso. Conversei com a equipe que mantinha o banco de dados do registro e obtinha o código SQL deles. Em seguida, escrevi um script perl que pegou os dados e os gerou nos formatos CSV, HTML e Excel. Tempo de execução? Cerca de 1-2 segundos. Uma grande melhoria de velocidade.

Também escrevi alguns roteiros enquanto estava no Iraque em 2006 (servi na Guarda Nacional por 9 anos - saí em dezembro). Usamos esse aplicativo antigo chamado ULLS-G (Sistema de Logística em Nível de Unidade - Solo) que foi escrito em ADA e originalmente executado no DOS. Eles o invadiram o suficiente para onde ele seria executado no Windows XP em um shell de comando. Este sistema não possui uma interface de mouse. Tudo era via teclado e não tinha funcionalidade em lote. Então, digamos que você queira imprimir licenças para todos os operadores de veículos? Bem ... tínhamos 150 soldados em nossa unidade, então demorou muito tempo. Digamos que todos tenham se qualificado em um veículo novo e você queira adicioná-lo às qualificações de operador de todos? Você tinha que fazer isso um por um.

Consegui encontrar um driver ODBC para o banco de dados SAGE (o que o ULLS-G usou) e, por isso, escrevi scripts perl capazes de conversar com o banco de dados SAGE. Então, as coisas que levaram mais de uma hora agora levavam apenas alguns segundos. Eu também usei meus scripts e o driver para gerar relatórios. Tivemos que relatar todas as informações até o batalhão todas as manhãs. Outras unidades escreviam as informações manualmente todas as manhãs. Criei uma macro do Excel que falou usando o mesmo driver e conversou com o banco de dados SAGE e atualizei a planilha do Excel dessa maneira. É a macro do Excel mais complicada e única que eu já escrevi. Valeu a pena porque me deram a Medalha de Louvor do Exército. Então, sim, recebi uma medalha militar por escrever scripts em perl :) Quantos podem dizer isso? ;)


13

Eu sou um piloto particular. Escrevi alguns scripts que obtêm informações sobre o clima para aeroportos locais em aviationweather.gov. Eles foram úteis para uma resposta rápida à pergunta "Hoje é um bom dia para voar?"


Espero que os seus passageiros falhem bem se aviationweather.gov alterar seu layout e interromper seu analisador!
MatthieuP

1
Você poderia compartilhar o script?
JJD 8/10

12

Um script Greasemonkey que remove obviamente [*] comentários estúpidos do site de jogos Kotaku.com.

[*] Conforme identificado por erros ortográficos comuns, escrita em maiúsculas, uso excessivo de "LOL" e heurísticas semelhantes.


6
Legal. Sinto vontade de extrair os regexp e gerar declarações aleatórias que consistem apenas em expressões correspondentes a um ou mais deles.
gnud

11

alias dir = 'ls -al' é o meu script favorito preferido.


4
eww ... Eu ofter encontrar-me querer ir por outro caminho ...
chills42

1
Você deve se perguntar por que as pessoas começam a votar nas respostas às perguntas com uma etiqueta subjetiva ... qual é o ponto de partida?
Greg Whitfield

Sim, este é :) crítica
Nick

11

Um raspador de HTML encadeado para baixar todas as legendas disponíveis para séries / filmes de um site que é difícil de usar (você precisa clicar 4 vezes após uma pesquisa para chegar à página de download, apenas para exibir mais anúncios). Agora, basta colocar os critérios de pesquisa e pressionar o download.


2
Ele o compartilhará, e o site descobrirá :). Melhor não compartilhar algumas vezes ...
Camilo Díaz Repka

11

Um script perl que raspa meu Craigslist local, por categorias selecionadas, em um banco de dados SQL no qual eu possa consultar.

A V2 disso atualiza o banco de dados com um timer e me alerta se eu tenho uma correspondência em alguma das consultas, basicamente fornecendo um agente de segundo plano para CL.


8

Renomeação de arquivos em massa via arrastar e soltar.

Idade atrás eu criei um pequeno VBScript que aceita um RegEx e substitui os nomes dos arquivos de acordo. Você simplesmente colocaria um monte de arquivos ou pastas nele. Eu achei isso muito útil ao longo dos anos.

gist.github.com/15824 (Cuidado, os comentários estão em alemão)


Parece bobagem votar uma descrição sem código.
22680 Chris Noe

O código seria um pouco demais para o site. Talvez "pequeno" fosse um pouco de eufemismo. É 170 LOC.
Tomalak

Eu poderia enviar o script para algum lugar e postar o link aqui, se você estiver interessado.
009 Tomalak

8

Um script Python rápido e sujo que procurava no google.com o DNS a cada 5 segundos e apitava uma vez se tivesse êxito e duas vezes se falhasse.

Escrevi isso durante um período em que tive que viver com uma rede doméstica altamente escamosa. Isso me permitiu saber instantaneamente o estado da rede, mesmo enquanto eu estava de cabeça debaixo da mesa do outro lado da sala com as duas mãos cheias de cabo de rede e uma lanterna na boca.


5 segundos? Deve ter ficado muito chato.
Ponkadoodle

Bem, sim, isso me levou morcegos depois de 30 minutos ou mais. A ideia era ter o mais próximo possível do feedback em tempo real. Normalmente, eu poderia consertar as coisas em cerca de 10 minutos.
Matthew Scouten

8

Isso, de uma postagem em meu blog há alguns meses, deixou de ser uma idéia que eu achei legal, e foi um dos melhores pequenos hacks que eu tossi na memória recente. Cito aqui na íntegra:

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

Passo muito tempo no bash. Para os não iniciados, o bash é um sistema que você encontrará na maioria das máquinas unix e, felizmente, em algumas janelas e em todos os Mac existentes. À primeira vista, não passa de uma interface de linha de comando e, portanto, está fora do radar da maioria dos usuários que vê essas coisas como um anacronismo que eles preferem esquecer.

Eu faço quase tudo no bash. LEU MEU E-MAIL DE UMA LINHA DE COMANDO, e é por isso que evito o e-mail marcado. Navego em diretórios, edito arquivos, participo no check-out e na entrega diária do código-fonte, procuro arquivos, pesquiso em arquivos, reinicializo minha máquina e até ocasionalmente navego em páginas da web na linha de comando. bash é o coração e a alma da minha existência digital.

O problema é que eu tendem a ter cerca de 6 janelas do bash abertas por vez. No trabalho hoje, eu tinha um executando um servidor Web, outro mexendo com meu banco de dados, um terceiro, quarto e quinto editando arquivos diferentes, enquanto um sexto estava sendo processado em minha máquina tentando gravar os nomes de todos os arquivos no sistema. Por quê? Porque é útil poder pesquisar nesse arquivo, se você quiser saber onde encontrar um objeto por nome de arquivo.

Quando você faz isso, acaba com muitas janelas na barra de controle denominadas simplesmente "bash". Isso é bom se você tiver apenas um deles, mas é uma agonia quando você tem 6 ou mais ... e duas dezenas de outras coisas acontecendo. Eu tenho três monitores sob o comando simultâneo de um par de teclado / mouse e ainda sinto a necessidade de mais. Cada uma dessas janelas possui vários terminais abertos.

Então eu juntei isso juntos. Primeiro, coloque estas linhas no seu .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

Analisei e escrevi dezenas de parágrafos sobre como tudo isso funciona e exatamente por que está configurado da maneira que está, mas você não está realmente interessado. Confie em mim. Há um capítulo inteiro de um livro em que eu fiz "CMD = ...; eco ..." nessa terceira linha. Muitas pessoas (incluindo bluehost, onde meu outro domínio está hospedado) ainda estão usando uma versão antiga do bash com grandes erros na maneira como ele lida com as armadilhas, por isso estamos presos a isso. Você pode remover o CMD e substituí-lo por $ BASH_COMMAND se você estiver atualizado em sua versão do bash e quiser fazer a pesquisa.

Enfim, o primeiro script que eu uso está aqui. Ele cria um bom prompt que contém o nome e o diretório da sua máquina, cortados em um tamanho razoável:

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

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

Há um aviso no topo desta postagem do blog que você deve ler agora antes de começar a fazer perguntas estúpidas como: "Por que você não usou a variável de ambiente HOSTNAME via @ENV?" Simples: porque isso não funciona em todos os sistemas em que eu experimentei.

Agora, a parte realmente legal. Lembre-se da linha 3 da adição .bash_profile?

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

Ele está descartando a saída do script trim.pl no mesmo contêiner de antes, imprimindo no prompt de comando e no título da janela, mas desta vez está adicionando o comando que você acabou de digitar! É por isso que você não quer fazer tudo isso no seu .bashrc: qualquer script que você executar (na minha máquina, o homem é um deles) acionará essa coisa em todas as linhas. a produção do homem fica seriamente distorcida pelo que estamos fazendo aqui. Não estamos exatamente jogando bem com o terminal.

Para pegar o comando que você acabou de digitar, pegamos o histórico do bash e o detalhamos um pouco:

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

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

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

Então agora, eu tenho um bazilhão de janelas e eles dizem coisas 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/

Da pequena barra feliz na parte inferior da tela, agora posso dizer qual é qual de relance. E como definimos o PS1, assim que um comando termina a execução, o nome do comando é substituído apenas pela saída do trim.pl novamente.

UPDATE (mesmo dia): Esse material (as entradas .bash_profile) me causou um grande inferno quando tentei no meu .bashrc. Seu .bashrc é executado por scripts não interativos sempre que você chama o bash como um idioma. Eu bati isso quando eu estava tentando usar o homem. Todo tipo de lixo (o texto completo do meu .bashrc, além de caracteres de escape) apareceu na parte superior da página de manual. Eu sugeriria testar essa gema com uma chamada rápida de 'homem homem' na linha de comando, depois que você juntar tudo.

Acho que é hora de tirar o lixo personalizado do meu .bashrc e colocá-lo onde ele pertence ...

Incedentalmente, encontrei-me digitando 'armadilha do homem' em um ponto deste processo.


8

No meu local de trabalho anterior, o horário de expediente era ridículo. Era uma empresa de software e meu chefe foi sugado. Ele nos dava o trabalho por volta das 17h30 (logo na hora de ir para casa) e nos fazia terminar o trabalho até as 23h (muito além do horário ideal de produção). Ou ele encontraria problemas irritantes no código que ainda estava em andamento.

Então , criei um arquivo em lotes e um script que desligaria meu computador em um horário aleatório entre 19h e 20h. Ele tinha um temporizador de 1 minuto para o caso de eu ficar horas depois e precisar interromper o processo de desligamento.

Mas eu saía da minha mesa antes das 17:00, para que ele não conseguisse que eu ficasse comigo se quisesse despejar porcaria na hora do checkout. Se ele viesse à minha mesa e visse meu computador ligado, ele pensaria que eu ainda estava na área da despensa ou no minimercado próximo para pegar algumas batatas fritas ou algo assim. Mas se fosse desligado por volta dessa época, ele ligaria para o meu celular e me mandaria voltar para o escritório.

Também agendei o BIOS na minha máquina para ligá-la por volta das 8:00 ou 9:00, caso eu estivesse com preguiça e quisesse passear por volta das 10:00 ou 11:00. Se eu fosse pego andando até minha mesa, ele perguntaria "onde você esteve a manhã toda?" E eu dizia: "Eu estava em uma reunião com a equipe de marketing". ou "Eu estava saindo tomando café da manhã".

cachorro burro


7

Eu costumava trabalhar em um acampamento de verão em tecnologia e tivemos que compor esses artigos para cada uma das crianças do grupo no final da semana, que eles receberiam e levariam para casa como lembrança. Geralmente, eles consistiam em várias frases genéricas e uma a duas frases personalizadas. Eu escrevi um script python que construiu um desses write-ups a partir de um banco de frases enlatadas e permitiu que o usuário adicionasse algumas frases personalizadas no meio. Isso economizou uma quantidade enorme de tempo para mim e outros conselheiros que eu contei o segredo. Embora grande parte disso tenha sido automatizado, nossos artigos ainda pareciam melhores do que muitos dos 'honestos', porque podíamos dedicar mais tempo às peças 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

Um script da Greasemonkey para adicionar uma caixa de controle "pressione muito esse botão" a um jogo online.


6

Um pequeno script que monitora alguns sites populares em busca de anúncios que correspondem às minhas habilidades e me envia um e-mail.


6

Eu uso isso como uma função carregada automaticamente. Eu posso apenas digitar "mycd" e uma lista de diretórios aparece, na qual eu frequentemente CD. Se eu souber o número, posso apenas dizer algo como "mycd 2". Para adicionar um diretório à lista, basta digitar "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 executo "mycd", obtenho: "-bash: print: command not found". Quando uso "mycd / folder /", ele não adiciona nada ao /tmp/mycd.txt. Tenho algumas configurações erradas?
Léo Léopold Hertz # 25/09

Ah, sim, você pode substituir as instruções 'print' por 'echo'. ;-)
wzzrd

@wzzrd Como é humilhante;) Função muito legal, @Ethan Post. Obrigado por compartilhar!
Léo Léopold Hertz,

5

Eu gosto de armazenar minhas fotos em um diretório com base na data em que a foto foi tirada. Por isso, escrevi um programa que varreria um cartão de memória em busca de imagens, criava quaisquer pastas no meu disco rígido necessárias com base nas datas das fotos e as copiava.


Gostaria de adicionar o script aqui? Eu adoraria essa funcionalidade, faço a mesma coisa!
Pharaun

É um aplicativo # #, não é um script que eu tenha medo.
Valerion

Você usa as informações exif armazenadas nas fotos? Você poderia compartilhar o script?
JJD 8/08

5

Escreveu um script para clicar no meu botão Iniciar, depois clique novamente em meio segundo e repita a cada 30 segundos.

Mantém-me marcado como Online enquanto estou no trabalho, e posso realizar o trabalho real no meu laptop pessoal ao lado dele. Não atolado pelo software de trabalho.

Não diga ao chefe :)


Ha ha ha, coisas boas. +1 por honestidade e desonestidade! :)
Kyle Walsh

4

Vários atalhos para os comandos "net start" e "net stop" para que eu possa iniciar e interromper os serviços sem precisar acessar o MMC de serviços


4

Um script de shell para executar backups rotativos usando o rsync. Ele também suporta a execução de programas filhos arbitrários para dar suporte a outras atividades de pré-backup (download de favoritos deliciosos, por exemplo).

http://gist.github.com/6806


4

Um pequeno aplicativo que clica com o botão esquerdo (ou clique duas vezes) em cada "X" ms por "Y". Não é mais necessário que esse pássaro que beba trabalhe na usina nuclear! ;)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.