Jaki jest najbardziej przydatny skrypt, który napisałeś w życiu codziennym? [Zamknięte]


132

Zastanawiam się tylko, jakie małe skrypty / programy, które ludzie tutaj napisali, pomagają komuś w jego codziennym życiu (inaczej niż w pracy).

Wszystko idzie, przełomowe czy nie. Dla mnie w tej chwili jest to mały skrypt w Pythonie do obliczania tempa biegu na podstawie odległości i czasu, który upłynął.


Widziałem kilka naprawdę fajnych skryptów związanych z pracą, ale nie tak wiele skryptów związanych z „życiem codziennym”. Z drugiej strony, jeśli coś działa rujnując twoje życie i naprawiłeś to zgrabnym scenariuszem, to kim jestem, żeby osądzać?
Kyle Walsh

10
Jedno z tych pytań o klejnoty, które sprawia, że ​​przepełnienie stosu jest opłacalne. Nie powinno tam być żadnych wskazówek sugerujących zamknięcie, a żaden mod, który głosował za zamknięciem, nie powinien.
Bill K

To jedno dla mnie: github.com/codeforester/base . Ta struktura podniosła moją produktywność jako osoby SRE / DevOps skokowo, jednocześnie zwiększając spójność zespołu i współpracę.
codeforester

Odpowiedzi:


116

Mój oklucz spadł z laptopa; więc napisałem program, który zastępuje dwa 0naciśnięcia klawiszy w odległości 200 ms od siebie jako o, dwa 0naciśnięcia klawiszy w odległości 700 ms od siebie jako a 0i ignoruje resztę; więc mogłem użyć laptopa, zanim zabiorę się do wymiany klawiatury.

Łał; Nie wiedziałem, że to będzie tak popularne: str

Jeśli chodzi o to, jak - Microsoft udostępnia fajną funkcję API o nazwie Hooks .

Korzystanie z tego haka; Udało mi się napisać „filtr”, który zrobił to, czego potrzebowałem (wskazówka: jeśli zwrócisz 1 z oknami wywołań zwrotnych, nie przetworzy naciśnięcia klawisza).

Powodem, dla którego o tym wiem, nie jest fakt, że pisałem keyloggera - ale dlatego, że jakiś czas temu napisałem program smilera do Synergy .

I tak. Napisałem inny program, który zamieniał klawisze alfanumeryczne losowym kluczem alfanumerycznym i tak; to było naprawdę zabawne: D


1
Mógłbym pomyśleć o wpisanie na odsłoniętej klucza reszty, ale to na pewno ciekawy sposób wokół niego :)
warren

2
Wiem, dlaczego nie pomyślałem, że ... mam ten sam problem ... :-(
asterite

1
To przypomina mi ten komiks XKCD
JesperE

59
HA! Y00u n00t nie będzie w stanie ponownie wpisać 00n standardowej klawiatury bez 00 bez przekwalifikowania swoich palców! G0000d Szczęście!
Doug L.

107
Najważniejsze pytanie brzmi: jak udało ci się napisać ten program bez użycia litery „o”?
James

115

Nie mam już kodu, ale prawdopodobnie najbardziej przydatnym skryptem, który napisałem, był, wierz lub nie, w VBA. Miałem denerwującego kolegę, który miał tak krótki lont, że nazwałem go Cherry Bomb. Często wściekał się, gdy dzwonili klienci, a potem wstawał i zaczynał na mnie narzekać przez ścianę kabiny, niszcząc moją produktywność i morale.

Zawsze miałem otwarty Microsoft Excel. Kiedy to robił, przechodziłem przez Alt-Tab do Excela, a na pasku narzędzi pojawiła się nowa ikona z obrazem wiśniowej bomby. Dyskretnie to kliknąłbym ... i nic by się nie stało.

Jednak wkrótce potem odbierałem telefon i mówiłem coś w stylu „tak, tak, to brzmi źle. Lepiej spojrzeć”. A potem wstawałem, przepraszałem Cherry Bomb i odchodziłem.

Zdarzyło się, że użyliśmy NetWare i miał on wbudowany prymitywny system przesyłania wiadomości. Kiedy kliknąłem przycisk, mały skrypt VBA wysłał wiadomość NetWare do moich przyjaciół, informując ich, że Cherry Bomb znów jest w tym miejscu i czy oni proszę zadzwoń do mnie. Nigdy tego nie rozgryzł :)


96
Wiesz, że jesteś programistą, kiedy piszesz program, aby wyjść z niezręcznej sytuacji społecznej.
Cadoo,

7
Niesamowite! To jest inżynieria społeczna w najlepszym wydaniu!
Beska

1
Miejmy nadzieję, że Cherry Bomb nie używa StackOverflow :)
Pedro Luz

94

Został wywołany skrypt bash , więc jeśli jestem w nim /a/very/deeply/nested/path/somewherei chcę przejść „w górę” katalogów N , mogę wpisać :up N

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

Na przykład:

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

NB przez gmatt:

Pracując nad wspaniałą pracą powyżej, można ją rozszerzyć do funkcji wstecznej, umieszczając w swoim 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 Absolutnie f „ing genialny! Będę dużo tego używał !
wzzrd

12
Dlaczego miałbyś zastąpić łatwy do odczytania kod trudnym do odczytania kodem? Czy Twój komputer działa szybciej, jeśli masz mniej wierszy kodu źródłowego?
Beska

3
gnud: zamienić mój czysty i jasny kod na śmieci? Nie, dziękuję.
Foxdonut

2
znakomity! Rozszerzyłem to o backmetodę, więc za każdym razem, gdy używasz, możesz używać wstecz, aby łatwo poruszać się tam iz powrotem. Aby go użyć, umieść to w swoim bashrc (przepraszam za formatowanie gówna): 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
czy jestem szalony? jak do diabła to działa? cd w skrypcie będzie tam cd, ale kiedy skrypt istnieje, jesteś z powrotem w tym samym / oryginalnym katalogu! czy mój bash działa inaczej niż wszystkie twoje?
johnnyB

67

Super zdalny przycisk resetowania.
Stojak z super specjalnym sprzętem do symulacji (w czasach, gdy pokój pełen skrzynek VME robił mniej niż twój GPU), który użytkownik po drugiej stronie świata załamałby się we wczesnych godzinach porannych. Dotarcie do laboratorium i przejście przez ochronę zajęło godzinę.

Ale nie mogliśmy łączyć się z super specjalnym kontrolerem ani modyfikować sprzętu. Rozwiązaniem była stara stacja robocza DEC z drukarką igłową firmy Epson, przyklej plastikową linijkę do pokrętła podawania papieru, ustaw drukarkę w pobliżu przycisku resetowania.
Zaloguj się do WS jako zwykły użytkownik (bez uprawnień roota, wszystkie porty zewnętrzne są zablokowane), wydrukuj dokument z 24 pustymi liniami - obracając pokrętło podawania papieru i linijką wciśniętą na reset na super specjalnym sprzęcie.


Fantastyczna historia! Nie jestem pewien, czy ci wierzyć, czy nie;)
Greg Whitfield

Ostatecznie został zastąpiony przekaźnikiem wyłącznika zasilania podłączonym do linii DTR na porcie szeregowym - ale wymagało to dostępu do konta roota. Powinienem był powiedzieć DEC WS, ponieważ działał na nim Ultrix.
Martin Beckett

Wow, jak daleko posuwamy się, aby uzyskać ochronę!
Chris Ballance,


5
Gdybyśmy w tamtych czasach mieli tacki na płyty CD, byłoby to łatwiejsze rozwiązanie,
Martin Beckett

63

W systemie Windows XP ustawiłem zadanie AT, aby codziennie uruchamiało to polecenie w C: \

dir /s /b * > dirlist.txt

Zawiera pełną ścieżkę do wszystkich plików na dysku C. Wtedy zawsze, gdy potrzebuję znaleźć plik, mogę użyć findstr. Jest to lepsze niż wyszukiwanie w Eksploratorze Windows, ponieważ umożliwia dopasowanie wyrażeń regularnych na całej ścieżce. Na przykład:

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

Jest to bardzo szybkie rozwiązanie do skonfigurowania i świetne, jeśli masz nową instalację systemu Windows i brak połączenia internetowego.

Jeśli chcesz wyszukać jakiś wzorzec w określonych typach plików, najpierw wymień wszystkie pliki, które chcesz sprawdzić, a następnie wyszukaj w nich. Na przykład, aby znaleźć program Java lub Python, który odwraca obraz, możesz zrobić to:

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

8
stary, co za wspaniały pomysł.
Epaga

10
To jest dokładnie to, co robi uniksowy program lokalizujący
Mark Baker,

4
@Mark Który pokazuje, że nawet jeśli musisz pracować z systemem Windows, możesz nauczyć się bardzo wielu przydatnych rzeczy od unixa
Liam

1
Zrobiłem jeden z tych skryptów dla mojego folderu "Dokumenty", którego nigdy nie potrafię uporządkować :-)
wrz332

1
i tam użyłem wyszukiwarki Google Desktop: D
inspite

38

Mam skrypt w języku Python, który uruchamia się automatycznie po podłączeniu aparatu cyfrowego.

Kopiuje wszystkie zdjęcia z karty w aparacie, tworzy ich kopie zapasowe, a następnie przesyła je do Flickr.


Fragment do przesłania do Flickr pochodzi z uploadr.py (za co nie mogę się pochwalić ).

Oto kod Pythona do wyładowania kamery. Powtarza się przez SRCDIR i nazywa każdy obraz datą i godziną przed skopiowaniem obrazów do 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)

Udostępnij kod, a ja podzielę się głosem pozytywnym :)
Even Mien

41
To będzie działać świetnie aż do dnia te szczególne Zanim wziął noc przed ... zapomnieć
Ed Guiness

Cała rzecz to właściwie proces dwuetapowy. Pierwszy krok zrzuca rzeczy z aparatu i zmienia ich nazwy. Drugi krok zawiera monit z pytaniem, czy chcesz przesłać do Flickr. To więcej dlatego, że przesyłanie ogranicza przepustowość, niż dlatego, że martwię się tym, co przesyłam.
Mark Biek

5
Jak wywołać bit „uruchom przy wtyczce”?
ijw

@ijw W przypadku systemu Unix, zobacz tutaj: unix.stackexchange.com/questions/28548/… - windows: superuser.com/questions/219401/…
Chris

32

Kilka lat temu napisałem aplikację winforms z pomocą kilku api Win32, aby całkowicie odciąć się od komputera na godzinę, aby zmusić mnie do pójścia i ćwiczenia. Ponieważ byłem leniwy? Nie ... ponieważ miałem osobisty cel fitness. Czasami wystarczy trochę kopa, aby zacząć :)


16

Napisałem skrypt w Pythonie, który trafiał do wszystkich komiksów internetowych, które czytałem, i pobierał nowe komiksy. Po prostu uruchamiam to raz dziennie i nie ma potrzeby odwiedzania każdej witryny z osobna, wystarczy odwiedzić / Comics / Folder. ;)


hmmm. Jeśli są to komiksy z reklamami,
martwiłbym

2
@Matthew - rozumiem twój punkt widzenia, ale nie rozumiem, dlaczego nie patrzenie na reklamę jest kwestią moralną / etyczną. Jeśli tak jest, autorzy No-Script i programów blokujących wyskakujące okienka mają wiele do zrobienia. ;)
Onion-Knight

1
Nie mam żadnego problemu z blokowaniem wyskakujących okienek, ponieważ wyskakujące okienka są obraźliwym sposobem wyświetlania reklam. Nie jest to do końca kwestia moralna, a raczej kwestia sprawiedliwości. Używam Adblockera w większości witryn, ale wyłączam go w niektórych witrynach, które często odwiedzam i chcę wspierać. Pobieranie komiksów za pomocą skryptu w języku Python (i nigdy nie oglądanie witryny) wydaje mi się przesadne, ale nie mogłem powiedzieć dokładnie, gdzie jest ta linia.
Matthew Scouten

14

Mój skrypt kopii zapasowej .cmd. Działa na moim serwerze każdej nocy i nazywa pliki kopii zapasowych według dnia tygodnia. Cały tydzień kopii zapasowych wiele razy uratował mnie (i moją rodzinę):

:: Kopia zapasowa argumentów:
:: / V Weryfikować? (tak nie)
:: / R Ograniczyć dostęp do właściciela? (tak nie)
:: / RS Wymienna pamięć masowa? (tak nie)
:: / HC Kompresja sprzętowa (wł. / Wył.)
:: / M Typ kopii zapasowej (normalna / kopiowana / różnicowa / przyrostowa / codzienna)
:: / L Typ pliku dziennika (f / s / n)
:: / D "Opis"
:: / J "Nazwa stanowiska"
:: / F "Nazwa-pliku"

SETLOCAL

:: upewnij się, że dyski sieciowe są zamontowane
CALL C: \ bat \ configs \ MapShares-home.cmd
echo włączone

ustaw dzisiaj =% DATE: ~ 0,3%
jeśli% dzisiaj% == Mon ustawiono wczoraj = 0 niedziela
jeśli% dzisiaj% == Wto ustawiono wczoraj = 1 poniedziałek
jeśli% dzisiaj% == Wed ustawiono wczoraj = 2 wtorek
jeśli% dzisiaj% == Czw ustawiono wczoraj = 3środę
jeśli% dzisiaj% == piątek ustawiono wczoraj = 4 czwartek
jeśli% dzisiaj% == Sobota ustawiona wczoraj = 5Piątek
jeśli% dzisiaj% == Słońce ustawione wczoraj = 6 Sobota

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

:: (np .: pliki Monday C)
set title =% wczoraj% zestaw kopii zapasowych


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

ZADZWOŃ BackupConfigs.bat

:: Utwórz nowy plik BKF
zadzwoń do C: \ WINDOWS \ system32 \ ntbackup.exe kopia zapasowa ^
    "@% configsDir% \ daily.bks" ^
    / V: tak / R: nie / RS: nie / HC: wyłączone / M normalne / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% yesterday% .bkf" ^
    >> "% storePath% \% yesterday% _backup.log"

echo% DATE%% TIME% Ukończono >> "% storePath% \% yesterday% _backup.log"

skopiuj "% storePath% \% yesterday% .bkf" "V: \ Backups \ NEPTUNE"

CALL C: \ bat \ clean-temps.bat

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

:: wyświetl katalogi kopii zapasowych
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::pauza


2
Kilka fajnych sztuczek z plikiem .cmd. Wiedziałem, że możesz użyć „^”, aby uniknąć przekierowania i potoków, ale nie wiedziałem, że możesz go również użyć do kontynuacji linii. Fajnie :)
Patrick Cuff

Świat potrzebuje mniej skryptów .bat, a nie więcej! :-)
JesperE

2
W konsekwencji świat potrzebuje mniej Windows. Do tego czasu jest to najmniej wspólny mianownik. Udostępniam ten skrypt, ponieważ mogą go używać miliony ludzi.
Chris Noe

14

„backup.sh”, który rozkłada zawartość katalogu i wysyła ją na moje konto Gmail.


To jest fajne. Chociaż nie mam komputerów spośród moich dziesiątek, które mają konfigurację SMTP. Niestety.
mxcl,

Czy moglibyśmy prosić o kod?
Kostas

14

Napisałem skrypt, który był używany codziennie w moim zespole. Kiedy pracowałem dla Intela, mieliśmy aplikację, która komunikowała się z bazą danych dostępu, aby pobrać zrzut informacji z rejestru (pracowałem nad sprawdzaniem poprawności chipsetów). Pobrałby te informacje (z zapytania SQL) i zrzuciłby je do pliku CSV, pliku HTML i pliku Excel. Cały proces trwał prawie 2 godziny. Bez żartów. Nie mam pojęcia, dlaczego trwało to tak długo. Rozpoczynaliśmy to godzinę przed obiadem, szliśmy na obiad i wracaliśmy.

Pomyślałem, że musi być lepszy sposób na zrobienie tego. Rozmawiałem z zespołem, który utrzymywał bazę danych rejestru i uzyskałem od nich kod SQL. Następnie napisałem skrypt w Perlu, który pobierał dane i wyprowadzał je do formatów CSV, HTML i Excel. Runtime? Około 1-2 sekund. Wielka poprawa szybkości.

Napisałem też kilka scenariuszy, kiedy byłem na misji w Iraku w 2006 roku (służyłem w Gwardii Narodowej przez 9 lat - wydostałem się w grudniu). Użyliśmy tej starej aplikacji o nazwie ULLS-G (Unit Level Logistics System - Ground), która została napisana w ADA i pierwotnie działała w systemie DOS. Zhakowali go na tyle, aby działał w systemie Windows XP w powłoce poleceń. Ten system nie miał interfejsu myszy. Wszystko odbywało się za pomocą klawiatury i NIE miało funkcji wsadowej. Powiedzmy, że chcesz wydrukować licencje dla wszystkich operatorów pojazdów? Cóż ... mieliśmy w naszej jednostce 150 żołnierzy, więc zajęło to DŁUGO czasu. Powiedzmy, że każdy zdobył kwalifikacje na nowy pojazd i chcesz dodać go do kwalifikacji wszystkich operatorów? Trzeba było to robić jeden po drugim.

Udało mi się znaleźć sterownik ODBC dla bazy danych SAGE (używany przez ULLS-G), więc napisałem skrypty Perla, które były w stanie komunikować się z bazą danych SAGE. A więc rzeczy, które zajęły ponad godzinę, teraz zajęły tylko kilka sekund. Do raportowania użyłem także moich skryptów i sterownika. Każdego ranka musieliśmy przekazywać batalionowi wszystkie informacje. Inne jednostki zapisywały informacje ręcznie każdego ranka. Uruchomiłem makro Excela, które mówiło, korzystałem z tego samego sterownika i rozmawiałem z bazą danych SAGE iw ten sposób zaktualizowałem arkusz kalkulacyjny Excela. To najbardziej skomplikowane i jedyne makro Excela, jakie kiedykolwiek napisałem. Opłaciło się, ponieważ przyznali mi Army Commendation Medal. Więc tak, dostałem medal w wojsku za pisanie skryptów perla :) Ilu może tak powiedzieć? ;)


13

Jestem prywatnym pilotem. Napisałem kilka skryptów, które pobierają informacje o pogodzie dla lokalnych lotnisk z aviationweather.gov. Przydały się do szybkiej odpowiedzi na pytanie „Czy dziś jest dobry dzień na latanie?”


Mam nadzieję dla Twoich pasażerów, że twój skrypt ładnie zawiedzie, jeśli aviationweather.gov zmieni układ i zepsuje twój parser!
MatthieuP,

1
Czy mógłbyś udostępnić scenariusz?
JJD

12

Skrypt Greasemonkey, który usuwa ewidentnie głupie [*] komentarze ze strony z grami Kotaku.com.

[*] Na co wskazują częste błędy w pisowni, pisanie wielkimi literami, nadmierne użycie „LOL” i podobne heurystyki.


6
Fajne. Mam ochotę wyodrębnić wyrażenia regularne i wygenerować losowe instrukcje składające się tylko z wyrażeń pasujących do jednego lub więcej z nich.
gnud

11

alias dir = 'ls -al' to mój ulubiony skrypt.


4
eww ... Często czuję, że chcę iść w drugą stronę ...
chills42

1
Musisz się zastanawiać, dlaczego ludzie zaczynają głosować na odpowiedzi na pytania z tagiem subiektywne… o co chodzi?
Greg Whitfield

Tak, to jest krytyczne :)
Nick

11

Skrobak HTML z wątkami do pobierania wszystkich dostępnych napisów do seriali / filmów ze strony, która jest trudna w użyciu (musisz kliknąć około 4 razy po wyszukiwaniu, aby dostać się na stronę pobierania, aby wyświetlić więcej reklam). Teraz po prostu wstawiam kryteria wyszukiwania i naciskam pobierz.


2
Podzieli się tym, a strona się dowie :). Lepiej czasem nie udostępniać ...
Camilo Díaz Repka,

11

Skrypt w Perlu, który przenosi moją lokalną listę Craigslist, według wybranych kategorii, do bazy danych SQL, do której mogę następnie przeszukiwać.

Wersja 2 tego aktualizuje DB za pomocą licznika czasu i ostrzega mnie, jeśli mam dopasowanie w którymkolwiek z zapytań, w zasadzie zapewniając mi agenta działającego w tle dla CL.


8

Masowa zmiana nazwy pliku metodą przeciągnij i upuść.

Wieki temu stworzyłem mały VBScript, który akceptuje RegEx i odpowiednio zastępuje nazwy plików. Po prostu upuścisz na nim kilka plików lub folderów. Odkryłem, że jest to bardzo przydatne przez lata.

gist.github.com/15824 (uwaga, komentarze są w języku niemieckim)


Wydaje się głupie, aby głosować nad opisem bez kodu.
Chris Noe

Kod byłby trochę za duży dla strony internetowej. Może „mały” to trochę za mało. To 170 LOC.
Tomalak

Mogę gdzieś wgrać skrypt i zamieścić link tutaj, jeśli jesteś zainteresowany.
Tomalak

8

Szybki i brudny skrypt w języku Python, który co 5 sekund sprawdzał DNS dla google.com i wydawał sygnał dźwiękowy raz, jeśli się powiedzie, i dwa razy, jeśli się nie powiedzie.

Napisałem to w czasie, gdy musiałem żyć z bardzo niestabilną siecią domową. Pozwoliło mi to od razu poznać stan sieci, nawet gdy byłem przodem pod biurkiem po drugiej stronie pokoju, z obiema rękami pełnymi kabla sieciowego i latarką w ustach.


5 sekund? Musiało być naprawdę irytujące.
Ponkadoodle

No tak, po około 30 minutach doprowadziło mnie to do nietoperzy. Pomysł polegał na uzyskaniu informacji zwrotnej w czasie zbliżonym do rzeczywistego. Zwykle mogłem to naprawić w około 10 minut.
Matthew Scouten

8

To, z postu na moim blogu kilka miesięcy temu, przeszło od pomysłu, który uważałem za fajny, do jednego z najlepszych małych hacków, jakie wykrztusiłem w niedawnej pamięci. Cytuję to w całości tutaj:

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

Spędzam dużo czasu w bash. Dla niewtajemniczonych bash to system, który można znaleźć na większości komputerów uniksowych i na szczęście w niektórych oknach i na każdym Macu. Na pierwszy rzut oka to nic innego jak interfejs wiersza poleceń, a zatem jest poza zasięgiem radaru większości użytkowników, którzy postrzegają takie rzeczy jako anachronizm, o którym woleliby zapomnieć.

W bash robię prawie wszystko. CZYTAM E-MAIL Z LINII POLECENIA, dlatego unikam oznaczania e-maili. Poruszam się po katalogach, edytuję pliki, codziennie sprawdzam i dostarczam kod źródłowy, wyszukuję pliki, przeszukuję pliki, restartuję komputer, a nawet od czasu do czasu przeglądam strony internetowe z wiersza poleceń. bash jest sercem i duszą mojej cyfrowej egzystencji.

Problem polega na tym, że mam zwykle otwartych około 6 okien bash naraz. W dzisiejszej pracy jeden z nich pracował na serwerze WWW, inny majstrował przy mojej bazie danych, trzeci, czwarty i piąty edytując różne pliki, podczas gdy szósty przeciskał się przez moją maszynę, próbując zapisać nazwy każdego pliku w systemie. Czemu? Ponieważ przydatne jest przeszukiwanie takiego archiwum, jeśli chcesz wiedzieć, gdzie znaleźć obiekt według nazwy pliku.

Kiedy to zrobisz, na pasku kontrolnym pojawi się wiele okien nazwanych po prostu „bash”. To jest w porządku, jeśli masz tylko jedną z nich, ale cierpienie, gdy masz 6 lub więcej ... i dwa tuziny innych rzeczy. Mam trzy monitory pod jednoczesną komendą jednej pary klawiatura / mysz i nadal czuję potrzebę więcej. Każde z tych okien ma kilka otwartych terminali bash.

Więc złożyłem to razem. Najpierw umieść te wiersze w swoim .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

Przejrzałem i napisałem dziesiątki akapitów o tym, jak to wszystko działa i dlaczego dokładnie jest skonfigurowane tak, jak jest, ale tak naprawdę nie jesteś zainteresowany. Zaufaj mi. Jest cały rozdział książki, w którym napisałem „CMD = ...; echo ...” w tej trzeciej linii. Wiele osób (w tym bluehost, gdzie hostowana jest moja druga domena) nadal używa starej wersji basha z poważnymi błędami w obsłudze pułapek, więc utknęliśmy z tym. Możesz usunąć CMD i zastąpić go $ BASH_COMMAND, jeśli jesteś na bieżąco z wersją bash i masz ochotę przeprowadzić badania.

W każdym razie pierwszy skrypt, którego używam, jest tutaj. Tworzy fajny znak zachęty zawierający nazwę twojego komputera i katalog, skrócony do rozsądnej długości:

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

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

U góry tego wpisu na blogu znajduje się ostrzeżenie, które powinieneś przeczytać teraz, zanim zaczniesz zadawać głupie pytania, takie jak: „Dlaczego po prostu nie użyłeś zmiennej środowiskowej HOSTNAME za pośrednictwem @ENV?” Proste: ponieważ to nie działa dla wszystkich systemów, na których go wypróbowałem.

A teraz naprawdę fajny kawałek. Pamiętasz linię 3 dodatku .bash_profile?

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

Zrzuca wyjście skryptu trim.pl do tego samego kontenera co poprzednio, drukując zarówno do wiersza poleceń, jak i do tytułu okna, ale tym razem dodaje polecenie, które właśnie wpisałeś! Dlatego nie chcesz robić tego wszystkiego w swoim .bashrc: każdy skrypt, który uruchomisz (na mojej maszynie, man jest jednym z nich) spowoduje to w każdej linii. dorobek człowieka zostaje poważnie zniekształcony przez to, co tutaj robimy. Nie bawimy się dobrze z terminalem.

Aby pobrać polecenie, które właśnie wpisałeś, bierzemy historię basha i trochę ją kroimy:

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

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

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

Więc teraz mam miliardy okien i mówią takie rzeczy:

  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/

Ze szczęśliwego małego paska u dołu ekranu mogę teraz na pierwszy rzut oka stwierdzić, który jest który. A ponieważ ustawiliśmy PS1, gdy tylko polecenie zakończy wykonywanie, nazwa polecenia jest ponownie zastępowana tylko wyjściem trim.pl.

UPDATE (ten sam dzień): Te rzeczy (wpisy .bash_profile) położyły na mnie wszelkiego rodzaju piekło, kiedy wypróbowałem to w moim .bashrc. Twoje .bashrc jest wykonywane przez nieinteraktywne skrypty za każdym razem, gdy wywołujesz bash jako język. Uderzyłem w to, kiedy próbowałem wykorzystać człowieka. Wszelkiego rodzaju śmieci (pełny tekst mojego .bashrc, plus znaki ucieczki) pojawiły się na górze strony podręcznika. Sugerowałbym przetestowanie tego klejnotu za pomocą szybkiego wywołania `` człowiek-człowiek '' w wierszu poleceń, gdy wszystko już zbierzesz.

Myślę, że nadszedł czas, abym wyciągnął niestandardowe śmieci z mojego .bashrc i umieścił je tam, gdzie należy ...

W pewnym momencie tego procesu bezwarunkowo wpisałem „man trap”.


8

W moim poprzednim miejscu pracy godziny pracy były śmieszne. To była firma programistyczna i mój szef był do dupy. Dał nam pracę około godziny 17:30 (dokładnie wtedy, gdy trzeba było wracać do domu) i kazał nam kończyć pracę do godziny 23:00 (znacznie po naszych idealnych godzinach pracy). Lub znalazł irytujące problemy w kodzie, który wciąż był w toku.

Zrobiłem więc plik wsadowy i skrypt, który wyłączałby mój komputer w losowym czasie między 19:00 a 20:00. Miał 1 minutowy licznik czasu na wypadek, gdybym został po godzinach i musiał przerwać proces wyłączania.

Ale wychodziłam z biurka przed 17:00, więc nie mógł mnie znaleźć, żeby mnie zatrzymać, gdyby chciał rzucić bzdury przed kasą. Gdyby podszedł do mojego biurka i zobaczył, że mój komputer jest włączony, pomyślałby, że wciąż jestem w spiżarni lub w pobliskim mini-sklepie, żeby złapać jakieś żetony lub coś. Ale gdyby w tym czasie było wyłączone, zadzwoniłby na mój telefon komórkowy i kazał mi wracać do biura.

Zaplanowałem również BIOS na moim komputerze, aby włączyć go około 8:00 lub 9:00, na wypadek, gdybym poczuł się leniwy i chciał spacerować około 10:00 lub 11:00. Gdybym przyłapał mnie na chodzeniu do mojego biurka, pytał „gdzie byłeś przez cały ranek?” A ja odpowiadałem: „Byłem na spotkaniu z zespołem marketingu”. lub „Jadłem śniadanie”.

głupi pies


7

Kiedyś pracowałem na letnim obozie technologicznym i pod koniec tygodnia musieliśmy skomponować te notatki dla każdego z dzieci w grupie, które następnie otrzymywały i zabrały do ​​domu jako pamiątkę. Zwykle składały się one z kilku zdań ogólnych i od jednego do dwóch zdań spersonalizowanych. Napisałem skrypt Pythona, który skonstruował jeden z tych zapisów z banku gotowych zdań i pozwolił użytkownikowi dodać kilka spersonalizowanych zdań w środku. Zaoszczędziło to ogromną ilość czasu mnie i innym doradcom, których ujawniłem. Mimo że wiele z nich było zautomatyzowanych, nasze zapisy nadal wyglądały lepiej niż wiele „uczciwych”, ponieważ mogliśmy poświęcić więcej czasu na spersonalizowane części.


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

Skrypt Greasemonkey służący do dodawania pola kontrolnego „naciskaj dużo tego przycisku” do gry online.


6

Mały skrypt, który monitoruje niektóre popularne witryny pod kątem reklam pasujących do moich umiejętności i wysyła mi e-mail.


6

Używam tego jako funkcji automatycznie ładowanej. Mogę po prostu wpisać „mycd” i pojawia się lista katalogów, do których często przechodzę. Jeśli wiem, to numer, mogę po prostu powiedzieć coś w rodzaju „mycd 2”. Aby dodać katalog do listy, wystarczy wpisać „mycd / tmp / foo / jakiś katalog”.

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

}

Kiedy uruchamiam "mycd", otrzymuję: "-bash: print: polecenie nie zostało znalezione". Kiedy używam „mycd / folder /”, nie dodaje to niczego do /tmp/mycd.txt. Czy mam złe ustawienia?
Léo Léopold Hertz 준영

Ach tak, możesz chcieć zamienić instrukcje „print” na „echo”. ;-)
wzzrd

@wzzrd Jak upokarzające;) Bardzo fajna funkcja, @Ethan Post. Dziękuję za udostępnienie!
Léo Léopold Hertz 준영

5

Lubię przechowywać moje zdjęcia w katalogu na podstawie daty wykonania zdjęcia. Dlatego napisałem program, który skanował kartę pamięci w poszukiwaniu zdjęć, tworzył na dysku twardym dowolne foldery na podstawie dat zdjęć, a następnie kopiował je.


Chcesz dodać tutaj skrypt? Bardzo chciałbym tę funkcjonalność, robię to samo!
Pharaun

Obawiam się, że to aplikacja ac #, a nie skrypt.
Valerion,

Czy korzystasz z informacji exif zapisanych na zdjęciach? Czy mógłbyś udostępnić scenariusz?
JJD

5

Napisałem skrypt, aby kliknąć mój przycisk Start, a następnie kliknąć go ponownie za pół sekundy i powtarzać co 30 sekund.

Dzięki temu jestem oznaczony jako online w pracy i mogę wykonać prawdziwą pracę na moim osobistym laptopie tuż obok. Nie ugrzęzły w oprogramowaniu roboczym.

Nie mów szefowi :)


Ha ha ha, dobra rzecz. +1 za uczciwość i nieuczciwość! :)
Kyle Walsh

4

Różne skróty do poleceń „net start” i „net stop”, dzięki czemu mogę uruchamiać i zatrzymywać usługi bez konieczności przechodzenia do konsoli MMC usług


4

Skrypt powłoki do wykonywania rotacyjnych kopii zapasowych przy użyciu rsync. Obsługuje również wykonywanie dowolnych programów potomnych w celu obsługi innych czynności poprzedzających tworzenie kopii zapasowych (na przykład pobieranie pysznych zakładek).

http://gist.github.com/6806


4

Mała aplikacja, która klikała lewym przyciskiem myszy (lub klikała dwukrotnie) co „X” ms przez czas „Y”. Nie ma już potrzeby, aby ten pijący ptak pracował w elektrowni atomowej! ;)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.