Який найкорисніший сценарій ви написали для повсякденного життя? [зачинено]


132

Цікаво, що написані тут маленькі сценарії / програми, які допомагають комусь із його повсякденного життя (він же не пов'язаний з роботою).

Що б то не було, новаторське чи ні. Для мене зараз це невеликий скрипт python для обчислення темпу бігу з урахуванням відстані та часу, що минув.


Я бачив декілька справді крутих робіт, але не так багато сценаріїв, що стосуються "повсякденного життя". Потім знову, якщо щось на роботі руйнує ваше життя, і ви виправили це акуратним сценарієм, то хто я, щоб судити?
Кайл Уолш

10
Одне з тих питань про дорогоцінні камені, що робить переповнення стека вартим часу. Будь-яка інструкція, яка передбачає закриття, не повинна бути там, жоден мод, який проголосував за її закриття, не повинен бути.
Білл К

Це один для мене: github.com/codeforester/base . Ця структура підвищила мою продуктивність як людини SRE / DevOps за стрибки та межі, одночасно збільшуючи згуртованість та співпрацю в команді.
codeforester

Відповіді:


116

Мій oключ упав на моєму ноутбуці; тому я написав програму, яка замінює два 0натискання клавіш у межах 200 мс один від одного o, два 0натискання клавіш у межах 700 мс один від одного як 0і ігнорує решту; тож я міг би використовувати свій ноутбук, перш ніж обійтись, щоб замінити клавіатуру.

Ого; Я не знав, що це буде так популярно: с

Щодо того, як - Microsoft виставляє приємну маленьку функцію API під назвою Hooks .

Використовуючи цей гачок; Мені вдалося написати "фільтр", який зробив те, що мені потрібно було зробити (підказка: якщо ви повернете 1 з вашим зворотним дзвоном, Windows не обробить натискання клавіші).

Причина, про яку я знаю про це насправді не в тому, що я писала кейлоггер, а тому, що я написала програму для посмішки на Synergy деякий час тому.

І так. Я написав ще одну програму, яка міняла буквено-цифрові клавіші випадковою буквено-цифровою клавішею і так; це було справді смішно: D


1
Можливо, я подумав би просто набрати на відкритому клавіші спокій, але це, безумовно, цікавий спосіб його подорожі :)
warren

2
Я думаю, чому я не думав, що це ... я маю той же прблем ... :-(
зірочка

1
Це нагадує мені про цей комікс XKCD: xkcd.com/196
JesperE

59
ХА! Y00u зможе отримати t00 тип 00n стандартний keyb00ard знову з00ut перенавчанням y00ur пальців! G0000d удачі!
Дуг Л.

107
Велике питання - як вам вдалося написати цю програму, не використовуючи букву "o"?
e.James

115

У мене вже немає коду, але, можливо, найкорисніший сценарій, який я написав, був, вірите чи ні, у VBA. У мене був набридлий колега, у якого був такий короткий запобіжник, що я називав його як «Cherry Bomb». Він часто божеволіє, коли зателефонують клієнти, а потім встане і почне оскаржувати мене через стінку кабіни, вбиваючи мою продуктивність і мораль.

У мене завжди був відкритий Microsoft Excel. Коли він зробить це, я перейшов би на вкладку до Excel і там, на панелі інструментів, була нова ікона із зображенням вишневої бомби. Я дискретно натиснув би це ... і нічого не трапиться.

Однак незабаром я б зателефонував і сказав би щось на кшталт "так, так, це звучить погано. Мені краще подивитись". І тоді я б встав, вибачився перед вишневою бомбою і пішов геть.

Що сталося, це те, що ми використовували NetWare, і в ньому була вбудована примітивна система обміну повідомленнями. Коли я натиснув кнопку, невеликий скрипт VBA надсилав моїм друзям повідомлення про NetWare, кажучи їм, що Cherry Bomb знову було в ньому будь ласка, зателефонуй мені. Він ніколи цього не з'ясував :)


94
Ви знаєте, що ви програміст, коли пишете програму, щоб вийти з незручного соціального становища.
Cadoo

7
Дивовижно! Це соціальна інженерія в найкращих випадках!
Беска

1
Будемо сподіватися, що Cherry Bomb не використовує StackOverflow :)
Педро Луз

94

Баш скрипт називається вгору так , що якщо я в /a/very/deeply/nested/path/somewhereі я хочу йти «до» N каталогів, можна ввести :up N

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

Наприклад:

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

Примітка: нім.

Виконуючи велику роботу вище, її можна поширити на функцію спини, помістивши у ваш 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 Абсолютно е «ІНГ геніально! Я буду цим багато користуватися !
wzzrd

12
Чому б ви замінили легкий для читання код складним для читання кодом? Чи працює ваш комп'ютер швидше, якщо у вас менше рядків вихідного коду?
Беська

3
gnud: замінити мій чистий і чистий код сміттям? Ні, дякую.
foxdonut

2
блискучий! Я розширив це, щоб включити backметод, тому щоразу, коли ви використовуєте, ви можете використовувати назад, щоб легко рухатися вперед і назад. Щоб використовувати це, покладіть це у свій bashrc (вибачте за форматування лайна): function up () {LIMIT = $ 1 P = $ PWD for ((i = 1; i <= LIMIT; i ++)) do P = $ P / .. виконано cd $ P експорт MPWD = $ P} функція назад () {LIMIT = $ 1 P = $ MPWD for ((i = 1; i <= LIMIT; i ++)) P = $ {P% / ..} виконано cd $ P експорт MPWD = $ P}
ldog

2
я божевільний? як чорт це працює? CD в ​​скрипті буде там CD, але коли сценарій існує, ви знову в тому ж / оригінальному каталозі! чи працює мій баш, ніж усі ваші?
johnnyB

67

Супер віддалена кнопка скидання.
Стійка супер спеціального обладнання для імітації (у ті часи, коли приміщення, наповнене ящиками VME, зробило менше, ніж ваш графічний процесор), що користувач з іншого боку світу зірветься в перші години ранку. Знадобилося годину, щоб потрапити в лабораторію та через охорону.

Але нам не було дозволено підключатися до супер спеціального контролера або змінювати обладнання. Рішенням було старе робоче місце DEC з матричним принтером epson, приклейте пластикову лінійку до ручки подачі паперу, розташуйте принтер біля кнопки скидання.
Увійдіть до WS як звичайний користувач (корінь не дозволений, усі зовнішні порти заблоковані), роздрукуйте документ із 24-ти порожними рядками - який повернув ручку подачі паперу та лінійку, натиснуту на скидання, на супер спеціальному обладнання.


Фантастична історія! Не впевнений, вірити вам чи ні;)
Грег Уітфілд

Врешті-решт його було замінено реле вимикача живлення, підключеного до лінії DTR на послідовному порту, але це вимагало кореневого доступу. І я повинен був сказати DEC WS, тому що він працював на Ultrix.
Мартін Бекетт

Нічого собі, довжини, на які ми йдемо, щоб забезпечити безпеку!
Кріс Баланс

1
Нагадує про це: thedailywtf.com/Articles/Open-Sesame.aspx
rjmunro

5
Якби у нас були лотки для компакт-дисків у ті часи, це було б простішим рішенням,
Мартін Бекетт

63

У Windows XP я встановив завдання AT щодня виконувати цю команду в C: \

dir /s /b * > dirlist.txt

Тут перерахований повний шлях усіх файлів на диску C. Тоді, коли мені потрібно знайти файл, я можу використовувати findstr. Це б'ється за допомогою пошуку Windows Explorer, оскільки дозволяє регулярно співставити вирази на всьому шляху. Наприклад:

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

Це дуже швидке рішення для налаштування, і чудово, якщо ви опинитеся зі свіжою установкою Windows та відсутністю підключення до Інтернету.

Якщо вам потрібно шукати певний тип файлу в певних типах файлів, спочатку перелічіть всі файли, які потрібно перевірити, а потім шукайте всередині них. Наприклад, щоб знайти програму Java або Python, яка перевертає зображення, ви можете це зробити:

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

8
чувак, яка чудова ідея.
Епага

10
Це саме те, що робить програма пошуку Unix
Марк Бейкер

4
@Mark З якого видно, що навіть якщо вам доведеться працювати з Windows, ви можете дізнатися дуже багато корисних речей з unix
Ліам

1
Я створив один із таких сценаріїв для своєї папки "Документи", яку я ніколи не можу організувати :-)
sep332

1
і там я використовував пошук Google Desktop: D
дивлячись на

38

У мене є сценарій Python, який автоматично запускається, коли я підключаю цифрову камеру.

Він копіює всі картинки з картки на камері, створює резервні копії та завантажує їх у Flickr.


Елемент завантаження до Flickr походить від uploadr.py (за який я не можу брати участь).

Ось код Python для вивантаження камери. Він повторюється через SRCDIR і називає кожне зображення з датою та часом перед копіюванням зображень у 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)

Поділіться кодом, і я поділюсь на підсумку голосу :)
Навіть Мієн

40
Це буде добре працювати до того дня, коли ви забудете ті спеціальні фотографії, які ви зробили напередодні ввечері ...
Ед Гінес

Повна річ - це насправді двоетапний процес. Перший крок скидає речі з камери та перейменовує їх. На другому кроці з'являється швидке запитання, чи хочете ви завантажити Flickr. Це більше тому, що завантаження вбиває мою пропускну здатність, ніж тому, що я переживаю за те, що завантажую.
Марк Бейк

5
Як запустити біт "запустити підключення"?
ijw

@ijw Для Unix дивіться тут: unix.stackexchange.com/questions/28548/… - windows: superuser.com/questions/219401/…
Кріс

32

Кілька років тому я написав програму winforms за допомогою декількох api-програм win32, щоб повністю замкнути себе на комп’ютері на годину, щоб це змусило мене ходити і займатися фізичними вправами. Бо я був ледачий? Ні ... тому що я мав особисту мету з фітнесу. Іноді для того, щоб почати роботу, потрібно просто трохи поштовхнути :)


16

Я написав сценарій Python, який би перейшов до всіх прочитаних веб-коміксів і завантажував будь-які нові комікси. Я просто запускаю це раз на день, і немає необхідності відвідувати кожен сайт окремо, просто відвідайте / Comics / Folder. ;)


хммм. Якщо це комікси, підтримувані рекламою, я б хвилювався, що ви не "платите", ризикуючи побачити рекламу :-)
Меттью Скаутен

2
@Matthew - Я бачу вашу думку, але я не бачу, чому не дивитись на рекламу - це морально-етична проблема. Якщо це так, автори No-Script і блокатори спливаючих вікон мають багато пояснень. ;)
Лук-Лицар

1
У мене немає проблем із блокувальниками спливаючих вікон, тому що спливаючі вікна - образливий спосіб показу реклами. Це не зовсім моральне питання, скоріше питання справедливості. Я використовую adblocker на більшості сайтів, але вимикаю його для певних веб-сайтів, які я відвідую часто і хочу підтримувати. Перегляд коміксів за допомогою сценарію python (і взагалі ніколи не бачити сайт) переживає мене, але я не міг сказати вам, де саме знаходиться рядок.
Меттью Скаут

14

Мій сценарій резервного копіювання .cmd. Він працює на моєму сервері щовечора і називає файли резервного копіювання відповідно до тижня дня. Повний тиждень резервного копіювання багато разів врятував мене (і мою родину):

:: Аргументи резервного копіювання:
:: / V Підтвердити? (так ні)
:: / R Обмежити доступ до власника? (так ні)
:: / Знімний накопичувач RS? (так ні)
:: / Стиснення обладнання обладнання HC (увімкнено / вимкнено)
:: / M Тип резервного копіювання (звичайний / копія / диференціальний / поступовий / щодня)
:: / L Тип файлу журналу (f / s / n)
:: / D "Опис"
:: / J "Ім'я роботи"
:: / F "Ім'я файлу"

НАСТРОЙКА

:: забезпечте встановлення мережевих накопичувачів
CALL C: \ bat \ configs \ MapShares-home.cmd
відлуння далі

встановити сьогодні =% ДАТА: ~ 0,3%
якщо% сьогодні% == Пн встановлено вчора = 0Віднеді
якщо% сьогодні% == Вт встановлено вчора = 1Monday
якщо% сьогодні% == Ср встановлено вчора = 2День
якщо% сьогодні% == Чт встановлено вчора = 3Середи
якщо% сьогодні% == Пт встановлено вчора = 4Четвер
якщо% сьогодні% == Сб встановлено вчора = 5Пердень
якщо% сьогодні% == НД встановлено вчора = 6У суботу

встановити configsDir =% ~ dp0
встановити storePath = C: \ mybackups

:: (наприклад: файли С понеділка)
set title =% вчора% backup set


echo% DATE%% TIME%% title%> "% storePath% \% вчора% _backup.log"

CALL BackupConfigs.bat

:: Створіть новий файл BKF
виклик C: \ WINDOWS \ system32 \ ntbackup.exe резервна копія ^
    "@% configsDir% \ daily.bks" ^
    / V: так / R: ні / RS: ні / HC: вимкнено / M нормально / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% вчора% .bkf" ^
    >> "% storePath% \% вчора% _backup.log"

echo% DATE%% TIME% завершено >> "% storePath% \% вчора% _backup.log"

скопіюйте "% storePath% \% вчора% .bkf" "V: \ Резервні копії \ NEPTUNE"

CALL C: \ bat \ clean-temps.bat

defrag -v C:> "% storePath% \% вчора% _defrag.log"

:: відображення резервних каталогів
start / D "C: \ bat \ Резервні копії \" checkbkf.bat

ENDLOCAL

:: пауза


2
Деякі приємні трюкові файли .cmd. Я знав, що ти можеш використовувати "^", щоб уникнути перенаправлення та труб, але я не знав, що ти можеш також використовувати його як для продовження лінії Класно :)
Патрік Кафф

Світ потребує менше .bat сценаріїв, не більше! :-)
JesperE

2
І наслідком цього є те, що світові потрібно менше Windows. До цього часу це найменш поширений знаменник. Я поділяю цей сценарій, тому що мільйони людей можуть ним користуватися, як є.
Кріс Ное

14

"backup.sh", який розкриває вміст каталогу та надсилає його на мій обліковий запис gmail.


Тепер це круто. Хоча у мене немає десятків комп’ютерів, які мають налаштування smtp. Сумно.
mxcl

Чи могли б ми мати код, будь ласка?
Костас

14

Я написав сценарій, який в кінцевому підсумку використовувався щодня в моїй команді. Коли я працював в Intel, у нас був додаток, який спілкувався з базою даних доступу, щоб захопити дамп інформації реєстру (я працював над валідацією чіпсетів). Ця інформація буде братись (із запиту SQL) і скидати її у файл CSV, HTML-файл та файл Excel. Весь процес зайняв майже 2 години. Без жартів. Не маю уявлення, чому це пройшло так довго. Ми почали би це за годину до обіду, пішли б на обід, а потім повернемось.

Я думав, що повинен бути кращий спосіб зробити це. Я спілкувався з командою, яка підтримувала базу даних реєстру та отримала від них SQL-код. Потім я написав сценарій perl, який захопив дані та вивів їх у формати CSV, HTML та Excel. Виконання? Приблизно 1-2 секунди. Велике підвищення швидкості.

Я також написав кілька сценаріїв, коли був у дислокуванні в Іраку в 2006 році (я прослужив у Національній гвардії 9 років - вийшов у грудні). Ми використовували цю стару програму під назвою ULLS-G (Unit Level Logistics System - Ground), яка була написана в ADA і спочатку працювала на DOS. Вони досить зламали його, де він працюватиме на Windows XP у командній оболонці. У цій системі не було інтерфейсу миші. Все було за допомогою клавіатури і не мав пакетної функціональності. Тож скажімо, що ви хотіли роздрукувати ліцензії для всіх операторів транспортних засобів? Ну ... у нас у підрозділі було 150 солдатів, тому це зайняло ДОЛГИ час. Скажімо, кожен отримав кваліфікацію на новий транспортний засіб, і ви хотіли додати його до кваліфікації кожного оператора? Вам довелося це робити по черзі.

Мені вдалося знайти драйвер ODBC для бази даних SAGE (те, що використовується ULLS-G), і тому я написав сценарії Perl, які змогли поговорити з базою даних SAGE. Тож речі, що займали більше години, зараз зайняли лише кілька секунд. Я також використовував свої сценарії та драйвер для звітування. Ми повинні були повідомляти всю інформацію до батальйону щоранку. Інші підрозділи пишуть інформацію вручну щоранку. Я підключив макрос Excel, який говорив, що використовувався той самий драйвер, і поговорив із базою даних SAGE і таким чином оновив таблицю Excel. Це найскладніший і єдиний макрос Excel, який я коли-небудь писав. Це виправдалось, бо вони нагородили мене медаллю Похвальної армії. Так, так, я отримав медаль військових за написання сценаріїв перл :) Скільки можуть це сказати? ;)


13

Я приватний пілот. Я написав пару сценаріїв, які отримують інформацію про погоду для місцевих аеропортів від aviationweather.gov. Вони були корисними для швидкої відповіді на питання "Чи сьогодні хороший день для польоту?"


Я сподіваюсь для ваших пасажирів, що ваш сценарій вийде з ладу, якщо aviationweather.gov змінить макет і порушить ваш аналізатор!
MatthieuP

1
Не могли б ви поділитися сценарієм?
JJD

12

Сценарій Greasemonkey, який видаляє очевидно дурні [*] коментарі з ігрового сайту Kotaku.com.

[*] Як визначено загальними орфографічними помилками, написанням з великої літери, надмірним використанням "LOL" та подібною евристикою.


6
Класно. Мені здається, що я видобуваю регулярні вирази та генерую випадкові висловлювання, що складаються лише з виразів, що відповідають одному чи декільком із них.
gnud


11

Різьбовий HTML-скребок для завантаження всіх доступних субтитрів для серіалів / фільмів із сайту, який дуже легко використовувати (вам потрібно натиснути як раз 4 рази після пошуку, щоб потрапити на сторінку завантаження, просто щоб відобразити більше реклами). Тепер я просто ставлю критерії пошуку і натискаю скачати.


2
Він поділиться ним, і сайт дізнається :). Краще не ділитися часом ...
Каміло Діас Репка

11

Сценарій Perl, який викреслює мій локальний список Craigs, за окремими категоріями, у SQL БД, до якого я можу запитати.

V2 цієї версії оновлює БД за допомогою таймера і попереджає мене, якщо я маю відповідність будь-якому із запитів, в основному надаючи мені фоновий агент для CL.


8

Масове перейменування файлів за допомогою перетягування.

Віки тому я створив невеликий VBScript, який приймає RegEx і замінює імена файлів відповідно. Ви просто кинете на нього купу файлів чи папок. Я виявив, що це дуже корисно протягом багатьох років.

gist.github.com/15824 (Обережно, коментарі є німецькою мовою)


Здається, нерозумно голосувати за опис sans-коду.
Кріс Ное

Код був би занадто великим для веб-сайту. Можливо, "малий" був трохи заниженим. Це 170 LOC.
Томалак

Я міг би десь завантажити сценарій і розмістити посилання тут, якщо вас цікавить.
Томалак

8

Швидкий і брудний сценарій Python, який кожні 5 секунд шукав DNS на сайті google.com і пролунав один раз, якщо це вдалося, і двічі, якщо він не вдався.

Я писав це в той час, коли мені доводилося жити з дуже в'ялою домашньою мережею. Це дозволило мені миттєво дізнатися про стан мережі, навіть коли я вперше прямував під стіл поперек кімнати обома руками, наповненими мережевим кабелем, і ліхтариком у роті.


5 секунд? Повинен стати насправді дратує.
Ponkadoodle

Ну так, це загнало мене кажанів через 30 хвилин. Ідея полягала в тому, щоб мати якомога ближче до зворотного зв'язку в режимі реального часу. Зазвичай я міг виправити речі приблизно за 10 хвилин.
Меттью Скаутен

8

Це, від публікації в моєму щоденнику кілька місяців тому, пішло від ідеї, яку я вважав крутою, до одного з найкращих маленьких хак, які я кашляв в останній пам’яті. Я цитую його повністю тут:

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

Я багато часу провожу в басі. Для непосвячених, bash - це система, яку ви знайдете на більшості Unix-машин і, на щастя, деяких вікнах і кожному Mac там. Спочатку рум'яна - це не більше, ніж інтерфейс командного рядка, а отже, з радіолокації більшості користувачів, які вважають подібні речі анахронізмом, яких вони швидше забудуть.

Я майже все роблю в баш. Я читаю мій електронний лист з комунального рядка, тому я відмовляюся від розміченого електронного листа. Я переходжу по каталогах, редагую файли, беру участь у щоденній реєстрації вихідних кодів та доставці, шукаю файли, шукаю всередині файлів, перезавантажую машину і навіть час від часу переглядаю веб-сторінки з командного рядка. bash - це серце і душа мого цифрового існування.

Проблема полягає в тому, що я, як правило, відкриває близько 6 вікон, що мають башти. На роботі сьогодні у мене був один із запущеним веб-сервером, інший, що мою базу даних, третій, четвертий та п’ятий редагували різні файли, в той час як шостий перетирав через свою машину, намагаючись записати імена кожного файлу в системі. Чому? Тому що зручно здійснювати пошук по такому архіву, якщо ви хочете знати, де знайти об’єкт за назвою файлу.

Коли ви це зробите, у вашій панелі керування ви знайдете безліч вікон, названих просто "баш". Це добре, якщо у вас є лише один з них, але його агонія, коли у вас 6 і більше .... і два десятки інших речей. У мене є три монітори під одночасним командуванням однієї пари клавіатури / миші, і я все ще відчуваю потребу в більшому. У кожному з цих вікон відкрито кілька баш-терміналів.

Тож я разом це зірвав. Спочатку розмістіть ці рядки у своєму .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

Я переглянув і написав десятки абзаців про те, як це все працює і чому саме він налаштований таким, яким він є, але вас не дуже цікавить. Довірся мені. Є цілий розділ книги, чому я зробив "CMD =... ; echo ..." в тому третьому рядку. Багато людей (включаючи bluehost, де розміщений мій інший домен) досі використовують стару версію bash з основними помилками в тому, як він обробляє пастки, тому ми зациклювалися на цьому. Ви можете видалити CMD і замінити його на $ BASH_COMMAND, якщо ви наявні у своїй версії bash і відчуваєте, що хочете зробити дослідження.

У будь-якому випадку, перший сценарій, який я використовую, тут. Він створює приємний підказку, що містить ім’я машини та каталог, порубані до розумної довжини:

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

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

Вгорі цього повідомлення в блозі є попередження, яке слід прочитати зараз, перш ніж ви почнете задавати дурні питання на кшталт "Чому ви просто не використовували змінну середовища HOSTNAME через @ENV?" Просто: Тому що це працює не для всіх систем, на яких я спробував.

Тепер для дійсно крутого шматочка. Пам'ятаєте рядок 3 додатку .bash_profile?

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

Він скидає вихідний скрипт trim.pl у той самий контейнер, що і раніше, друкуючи як командний рядок, так і заголовок вікна, але цього разу це додавання команди, яку ви тільки що ввели! Ось чому ви не хочете робити все це у своєму .bashrc: будь-який сценарій, який ви запускаєте (на моїй машині, людина є одним із них), спровокує цю справу у кожному рядку. Вихід людини стає серйозно вражений тим, що ми робимо тут. Ми не дуже добре граємо з терміналом.

Щоб схопити команду, яку ви щойно набрали, ми беремо історію баша і трохи забиваємо її:

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

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

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

Тому зараз у мене є мільярд вікон, і вони говорять:

  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/

З щасливої ​​маленької смужки в нижній частині екрана я тепер можу сказати, що це таке, яке миттєво поглядає. А оскільки ми встановили PS1, як тільки команда закінчує виконання, ім'я команди знову замінюється лише результатом trim.pl.

ОНОВЛЕННЯ (в той же день): Цей матеріал (записи .bash_profile) наклав на мене всі види пекла, коли я спробував це у своєму .bashrc. Ваш .bashrc виконується неінтерактивними скриптами, коли ви викликаєте bash як мову. Мені це вдарило, коли я намагався використовувати людину. Усі види сміття (повний текст мого .bashrc, плюс знаки втечі) з'явилися вгорі сторінки людини. Я б запропонував протестувати цей дорогоцінний камінь за допомогою швидкого виклику "man man" у командному рядку, як тільки ви все це зберете.

Я здогадуюсь, настав час, щоб я витягнув з мого .bashrc сміттєве сміття і поклав його там, де йому належить ...

Навмисно я виявив, що я набрав "пастку людини" в один момент цього процесу.


8

На моєму попередньому місці роботи офісні години були смішними. Це була програмна компанія, і мій бос був смоктаний. Він дав би нам працювати близько 17:30 (правильно, коли прийшов час їхати додому) і змусив нас закінчити роботу до минулого 23:00 (шлях минулий нашої ідеальної продуктивної години). Або він знайде набридливі проблеми в коді, який ще тривав.

Тож я створив пакетний файл та сценарій, який відключив мій комп'ютер у випадковий час між 19:00 та 20:00. У нього був 1-хвилинний таймер на всякий випадок, якщо я залишаюсь після години і мені потрібно перервати процес відключення.

Але я би покинув свій стіл до 17:00, щоб він не міг знайти мене, щоб утримати мене, якщо він хотів би скинути лайно навколо каси. Якби він зайшов до мого столу і побачив мій комп’ютер, він подумав би, що я все ще знаходився біля комори або в сусідньому міні-кварті, щоб захопити чипси чи щось. Але якщо це було в той час, він зателефонував мені на мобільний телефон і сказав мені повернутися в офіс.

Я також запланував BIOS на своїй машині ввімкнути машину близько 8:00 ранку або 9:00 ранку, якщо я лінувався і хотів прогулятися близько 10:00 ранку або 11:00 ранку. Якби мене спіймали, гуляючи до свого столу, він запитав би "де ти був весь ранок?" І я б сказав "я був на зустрічі з маркетинговою командою". або "я поза сніданком".

німий пес


7

Раніше я працював у літньому таборі з технологій, і нам довелося скласти ці записи на кожного з дітей у групі наприкінці тижня, які вони потім отримають та відвезуть додому на зберігання. Зазвичай вони складалися з купки родових речень та одного-двох персоналізованих речень. Я написав сценарій python, який сконструював одне із цих записів із банку консервованих речень, і дозволив користувачеві додати пару персоналізованих пропозицій посередині. Це заощадило величезну кількість часу для мене та інших радників, яких я впустив на секрет. Незважаючи на те, що стільки його було автоматизовано, наші записи все ще виглядали краще, ніж багато «чесних», тому що ми могли вкласти більше часу в персоналізовані частини.


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

Сценарій Greasemonkey, щоб додати в онлайн-гру керування "багато чого натиснути цю кнопку".


6

Маленький сценарій, який відстежує деякі популярні веб-сайти для оголошень, які відповідають моїм навичкам, та надсилає мені електронний лист.


6

Я використовую це як функцію автоматичного завантаження. Я можу просто набрати "mycd", і з'явиться список каталогів, до яких я часто входжу. Якщо я випадково знаю, то номер я просто можу сказати щось на кшталт "mycd 2". Щоб додати каталог до списку, просто введіть "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

}

Коли я запускаю "mycd", я отримую: "-bash: print: команда не знайдена". Коли я використовую "mycd / folder /", він нічого не додає до /tmp/mycd.txt. У мене неправильні налаштування?
Лео Леопольд Герц 준영

Ага, так, ви можете замінити "друк" заяви на "ехо". ;-)
wzzrd

@wzzrd Як принизливо;) Дуже класна функція, @Ethan Post. Дякую, що поділились!
Лео Леопольд Герц 준영

5

Мені подобається зберігати свої фотографії в каталозі на основі дати зйомки. Тому я написав програму, яка б сканувала карту пам’яті на зображення, створювала будь-які папки на моєму жорсткому диску, необхідні на основі дат зображень, а потім копіювала їх.


Хочете додати сюди сценарій? Я хотів би цю функціональність, я роблю те саме!
Фараун

Боюся, це додаток AC #, а не сценарій.
Валеріон

Чи використовуєте ви інформацію exif, що зберігається на фотографіях? Не могли б ви поділитися сценарієм?
JJD

5

Написав сценарій, щоб натиснути кнопку «Пуск», потім ще раз натиснути його через півсекунди та повторювати кожні 30 секунд.

Під час роботи я відзначає Інтернет, і я можу зробити справжню роботу на своєму особистому ноутбуці прямо поруч. Не замикається робочим програмним забезпеченням.

Не кажи начальнику :)


Ха-ха-ха, хороші речі. +1 і за чесність, і за нечесність! :)
Кайл Уолш

4

Різні ярлики до команд "net start" та "net stop", щоб я міг запускати та зупиняти послуги, не входячи в службу MMC


4

Сценарій оболонки для виконання обертових резервних копій за допомогою rsync. Він також підтримує виконання довільних дочірніх програм для підтримки інших заходів попереднього резервного копіювання (наприклад, завантаження смачних закладок).

http://gist.github.com/6806


4

Невеликий додаток, що клацнув лівою кнопкою миші (або подвійним клацанням миші) кожні "X" мс протягом "Y" часу. Більше не потрібно, щоб ця пташина пташка працювала на атомній електростанції! ;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.