Какой самый полезный сценарий вы написали для повседневной жизни? [закрыто]

132

Просто интересно, какие маленькие скрипты / программы здесь написали, которые помогают человеку в его или ее повседневной жизни (иначе говоря, не связанные с работой).

Все идет, новаторское или нет. Для меня сейчас это небольшой скрипт на Python для расчета темпа бега с учетом пройденного расстояния и времени.

Кайл Уолш
источник
Я видел несколько действительно крутых сценариев, связанных с работой, но не так много сценариев, связанных с повседневной жизнью. Опять же, если что-то на работе разрушает вашу жизнь, и вы исправили это с помощью аккуратного сценария, то кто я такой, чтобы судить?
Кайл Уолш,
10
Один из тех драгоценных вопросов, который делает переполнение стека достойным внимания. Никаких указаний, предлагающих закрыть его, не должно быть, и любого мода, проголосовавшего за его закрытие, не должно быть.
Bill K
Это один для меня: github.com/codeforester/base . Эта структура резко повысила мою продуктивность как специалиста по SRE / DevOps, одновременно повысив сплоченность команды и сотрудничество.
codeforester

Ответы:

116

У меня oключ упал на ноутбук; поэтому я написал программу, которая заменяет два 0нажатия клавиши в пределах 200 мс друг от друга как o, два 0нажатия клавиш в пределах 700 мс друг от друга как a 0и игнорирует остальные; так что я мог использовать свой ноутбук, прежде чем я смогу заменить клавиатуру.

Вот это да; Я не знал, что это будет так популярно: p

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

Используя этот крючок; Мне удалось написать «фильтр», который делал то, что мне было нужно (подсказка: если вы вернете 1 с вашими окнами обратного вызова, не будут обрабатывать нажатие клавиши).

На самом деле я знаю об этом не потому, что я писал кейлоггер, а потому, что некоторое время назад я написал программу-смайлер для Synergy .

И да. Я написал другую программу, которая меняла местами буквенно-цифровые клавиши со случайными буквенно-цифровыми клавишами и да; это было действительно смешно: D

user19302
источник
1
Я мог бы подумать о том, чтобы просто набрать текст на открытой подставке для клавиш, но это, безусловно, интересный способ обойти это :)
Уоррен
2
Я спрашиваю, почему я не подумал об этом ... У меня такая же проблема ... :-(
asterite
1
Это напоминает мне этот комикс XKCD: xkcd.com/196
JesperE,
59
ХА! Y00u не сможет снова набрать 00n стандартную клавиатуру, если только переобучит ваши пальцы! G0000d Удачи!
Дуг Л.
107
Большой вопрос в том, как вам удалось написать эту программу без буквы «о»?
e.James
115

У меня больше нет кода, но, возможно, самый полезный сценарий, который я написал, был, хотите верьте, хотите нет, на VBA. У меня был надоедливый коллега, у которого был такой короткий предохранитель, что я назвал его Черри Бомб. Он часто злился, когда клиенты звонили, а затем вставали и начинали разглагольствовать надо мной через стену кабинки, убивая мою продуктивность и моральный дух.

У меня всегда был открыт Microsoft Excel. Когда он это делал, я переходил в Excel с помощью alt-tab и там, на панели инструментов, появлялся новый значок с изображением вишневой бомбы. Я осторожно щелкал по нему ... и ничего бы не происходило.

Однако вскоре после этого мне звонили и говорили что-то вроде «да, да, звучит плохо. Мне лучше взглянуть». А потом я вставал, извинялся перед Cherry Bomb и уходил.

Случилось так, что мы использовали NetWare, и в него была встроена примитивная система обмена сообщениями. Когда я нажимал кнопку, небольшой сценарий VBA отправлял моим друзьям сообщение NetWare, сообщая им, что Cherry Bomb снова зашла на это, и будут ли они пожалуйста, позвони мне. Он так и не понял :)

Ovid
источник
94
Вы знаете, что вы программист, когда пишете программу, чтобы выйти из неловкой социальной ситуации.
Cadoo,
7
Потрясающие! Это лучшая социальная инженерия!
Beska
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> 

NB от gmatt:

Отработав большую работу, описанную выше, ее можно расширить до функции возврата, поместив в ваш 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
Зачем вам заменять легко читаемый код трудным для чтения? Ваш компьютер работает быстрее, если у вас меньше строк исходного кода?
Beska
3
gnud: заменить мой чистый и понятный код мусором? Нет, спасибо.
foxdonut
2
блестящий! Я расширил это, чтобы включить backметод, так что всякий раз, когда вы израсходуете, вы можете использовать назад, чтобы легко перемещаться вперед и назад. Чтобы использовать это, поместите это в свой bashrc (извините за форматирование дерьма): function up () {LIMIT = $ 1 P = $ PWD for ((i = 1; i <= LIMIT; i ++)) do P = $ P / .. done cd $ P export MPWD = $ P} функция back () {LIMIT = $ 1 P = $ MPWD for ((i = 1; i <= LIMIT; i ++)) do P = $ {P% / ..} done cd $ P export MPWD = $ P}
ldog
2
я сумасшедший? как, черт возьми, это работает? cd в скрипте будет cd там, но когда скрипт существует, вы вернетесь в тот же / исходный каталог! мой bash работает иначе, чем все ваши?
johnnyB 03
67

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

Но нам не разрешили подключиться к сверхспециальному контроллеру или модифицировать оборудование. Решением стала старая рабочая станция DEC с матричным принтером epson, прикрепив пластиковую линейку к ручке подачи бумаги, расположив принтер рядом с кнопкой сброса.
Вход для WS как обычного пользователя (не корня разрешено, все внешние порты заблокированы), распечатать документ с 24blank линий - которые вращают ручку подачи бумаги и линейка прессованной над сбросом на супер специальном оборудовании.

Мартин Беккет
источник
Фантастическая история! Не уверен, верить вам или нет;)
Грег Уитфилд,
В конечном итоге его заменили реле выключателя питания, подключенное к линии DTR последовательного порта, но для этого требовался root-доступ. И я должен был сказать DEC WS, потому что он работал с Ultrix.
Мартин Беккет,
Ух ты, как много мы делаем, чтобы обойтись без защиты!
Крис Балланс,
1
Напоминает мне об этом: thedailywtf.com/Articles/Open-Sesame.aspx
rjmunro 05
5
Если бы в те дни у нас были лотки для компакт-дисков, это было бы более легкое решение,
Мартин Беккет,
63

В Windows XP я установил задание AT для ежедневного выполнения этой команды в C: \

dir /s /b * > dirlist.txt

Здесь указан полный путь ко всем файлам на диске C. Затем, когда мне нужно найти файл, я могу использовать findstr. Это превосходит поиск в проводнике Windows, поскольку он позволяет сопоставление регулярных выражений по всему пути. Например:

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
чувак, какая отличная идея.
Epaga
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)
Марк Бик
источник
Поделитесь кодом, и я поделюсь голосом «за» :)
Even Mien
40
Это будет отлично работать до тех пор, пока вы не забудете те особые фотографии, которые сделали накануне ...
Эд Гиннес,
Полный процесс на самом деле состоит из двух этапов. Первый шаг сбрасывает вещи с камеры и переименовывает их. На втором шаге появляется запрос с вопросом, хотите ли вы загрузить на Flickr. Это больше потому, что загрузка убивает мою пропускную способность, чем потому, что я беспокоюсь о том, что загружаю.
Марк Бик
5
Как активировать бит «Запуск при подключении»?
ijw 02
@ijw Для Unix см. здесь: unix.stackexchange.com/questions/28548/… - windows: superuser.com/questions/219401/…
Крис,
32

Несколько лет назад я написал приложение winforms с помощью нескольких API-интерфейсов Win32, чтобы полностью заблокировать себя от компьютера на час, чтобы заставить меня пойти и тренироваться. Потому что я был ленив? Нет ... потому что у меня была личная цель в фитнесе. Иногда вам просто нужно немного пнуть, чтобы начать :)

Denny
источник
16

Я написал скрипт Python, который будет заходить во все веб-комиксы, которые я читаю, и загружать любые новые комиксы. Я просто запускаю это один раз в день, и нет необходимости посещать каждый сайт индивидуально, просто зайдите в папку / Comics /. ;)

Лук-Knight
источник
хммм. Если это комиксы с рекламой, я бы побеспокоился, что вы не «платите», рискуя увидеть рекламу :-)
Мэтью Скоутен,
2
@Matthew - Я понимаю вашу точку зрения, но не понимаю, почему отказ от просмотра рекламы является моральной / этической проблемой. Если это так, то авторам No-Script и блокировщиков всплывающих окон нужно многое объяснить. ;)
Onion-Knight
1
У меня нет проблем с блокировкой всплывающих окон, потому что всплывающие окна - это оскорбительный способ показа рекламы. Это не совсем моральный вопрос, скорее вопрос справедливости. Я использую блокировщик рекламы на большинстве сайтов, но отключаю его для некоторых сайтов, которые я часто посещаю и которые хочу поддерживать. Получение комиксов с помощью скрипта python (и отсутствие возможности увидеть сайт вообще) для меня кажется чрезмерным, но я не могу сказать вам, где именно находится линия.
Мэтью Скоутен
14

Мой сценарий резервного копирования .cmd. Он запускается на моем сервере каждую ночь и называет файлы резервных копий в соответствии с днем ​​недели. Полная неделя резервного копирования много раз спасала меня (и мою семью):

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

SETLOCAL

:: убедитесь, что сетевые диски установлены
ПОЗВОНИТЕ C: \ bat \ configs \ MapShares-home.cmd
эхо на

установить сегодня =% DATE: ~ 0,3%
если% сегодня% == Пн установить вчера = 0Воскресенье
if% today% == Вт установлен вчера = 1понедельник
if% today% == Wed установлен вчера = 2Tuesday
if% today% == Thu установлено вчера = 3Wednesday
если% сегодня% == Пт установлено вчера = 4Четверг
if% today% == Sat установлено вчера = 5Friday
если% сегодня% == Солнце зашло вчера = 6Суббота

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

:: (например: файлы Monday C)
установить заголовок =% вчера% резервный набор


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

ПОЗВОНИТЬ BackupConfigs.bat

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

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

скопируйте "% storePath% \% вчера% .bkf" "V: \ Backups \ NEPTUNE"

ПОЗВОНИТЬ C: \ bat \ clean-temps.bat

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

:: отображать резервные каталоги
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::Пауза

Крис Но
источник
2
Есть несколько хороших трюков с файлом .cmd. Я знал, что вы можете использовать '^', чтобы избежать перенаправления и каналов, но я не знал, что вы также можете использовать его для продолжения строки. Круто :)
Патрик Кафф
Миру нужно меньше скриптов .bat, не больше! :-)
JesperE
2
Отсюда следует, что миру нужно меньше Windows. А пока это наименьший общий знаменатель. Я разделяю этот сценарий, потому что миллионы людей могут использовать его как есть.
Крис Ноэ,
14

"backup.sh", который анализирует содержимое каталога и отправляет его в мою учетную запись Gmail.

JayG
источник
Теперь это круто. Хотя у меня из десятков компьютеров нет компьютеров с настройкой 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, который я когда-либо писал. Это окупилось, потому что они наградили меня почетной медалью армии. Так что да, я получил медаль в армии за написание скриптов на Perl :) Кто из вас может это сказать? ;)

Вивин Палиат
источник
13

Я частный пилот. Я написал пару скриптов, которые получают информацию о погоде в местных аэропортах с сайта aircraftweather.gov. Они пригодились для быстрого ответа на вопрос: «Сегодня хороший день для полетов?»

Кристофер Джонсон
источник
Я надеюсь для ваших пассажиров, что ваш скрипт завершится неудачно, если Aviationweather.gov изменит свой макет и сломает ваш парсер!
MatthieuP,
1
Не могли бы вы поделиться сценарием?
JJD 08
12

Скрипт Greasemonkey, удаляющий явно глупые [*] комментарии с игрового сайта Kotaku.com.

[*] В соответствии с типичными орфографическими ошибками, написанием только заглавными буквами, чрезмерным использованием LOL и аналогичными эвристиками.

LKM
источник
6
Прохладно. Я чувствую, что извлекаю регулярное выражение и генерирую случайные операторы, состоящие только из выражений, соответствующих одному или нескольким из них.
gnud
11

alias dir = 'ls -al' - мой любимый любимый сценарий.

Пол Натан
источник
4
фу ... Я часто обнаруживаю, что хочу пойти другим путем ...
chills42
1
Вы должны задаться вопросом, почему люди начинают отказываться от ответов на вопросы с пометкой субъективного .... в чем черт возьми?
Грег Уитфилд,
Да, это критично :)
Ник,
11

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

Винко Врсалович
источник
2
Он поделится ею, и сайт узнает :). Лучше иногда не делиться ...
Камило Диас Репка
11

Perl-скрипт, который очищает мой локальный список Craigslist по выбранным категориям в базе данных SQL, которую я затем могу запросить.

V2 обновляет базу данных с помощью таймера и предупреждает меня, если у меня есть совпадение по любому из запросов, в основном предоставляя мне фоновый агент для CL.

Джастин Р.
источник
8

Массовое переименование файлов с помощью перетаскивания.

Много лет назад я сделал небольшой VBScript, который принимает RegEx и соответственно заменяет имена файлов. Вы просто поместите на него кучу файлов или папок. Я обнаружил, что это очень полезно на протяжении многих лет.

gist.github.com/15824 ( будьте осторожны , комментарии на немецком языке)

Томалак
источник
Кажется глупым голосовать за описание без кода.
Крис Ноэ,
Код для веб-сайта будет многовато. Может быть, "маленький" было немного преуменьшением. Это 170 мест.
Tomalak
Я могу загрузить сценарий куда-нибудь и разместить ссылку здесь, если вам интересно.
Tomalak
8

Скрипт Quick and Dirty Python, который просматривал DNS для google.com каждые 5 секунд и подавал один звуковой сигнал, если это удалось, и два раза, если это не удалось.

Я написал это в то время, когда мне приходилось жить в очень нестабильной домашней сети. Это позволило мне мгновенно узнать состояние сети, даже когда я шел впереди под столом через всю комнату с обеими руками, полными сетевого кабеля и фонариком во рту.

оборота Мэтью Скоутен
источник
5 секунд? Должно быть, это действительно надоело.
Ponkadoodle
Ну да, это заставило меня летучих мышей через 30 минут или около того. Идея заключалась в том, чтобы получать обратную связь как можно ближе к реальному времени. Обычно я мог исправить ситуацию примерно за 10 минут.
Мэтью Скоутен,
8

Это, из публикации в моем блоге несколько месяцев назад, из идеи, которую я считал крутой, превратилось в один из лучших небольших приемов, которые я придумал за последнее время. Я цитирую его полностью здесь:

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

Я провожу много времени в bash. Для непосвященных, bash - это система, которую вы найдете на большинстве unix-машин и, к счастью, в некоторых окнах и на каждом Mac. На первый взгляд, это не более чем интерфейс командной строки, поэтому большинство пользователей, считающих такие вещи анахронизмом, предпочли бы забыть, вне поля зрения.

Я почти все делаю в bash. Я ЧИТАЮ ЭЛЕКТРОННУЮ ПОЧТУ ИЗ КОМАНДНОЙ СТРОКИ, поэтому я избегаю размеченной электронной почты. Я просматриваю каталоги, редактирую файлы, участвую в ежедневной проверке и доставке исходного кода, ищу файлы, ищу внутри файлов, перезагружаю свой компьютер и даже иногда просматриваю веб-страницы из командной строки. bash - это сердце и душа моего цифрового существования.

Проблема в том, что я обычно открываю около 6 окон bash одновременно. Сегодня на работе у меня был один, работающий с веб-сервером, другой - возился с моей базой данных, третий, четвертый и пятый - редактировали разные файлы, а шестой копался на моей машине, пытаясь записать имена всех файлов в системе. Зачем? Потому что удобно иметь возможность искать в таком архиве, если вы хотите знать, где найти объект по имени файла.

Когда вы это сделаете, вы получите множество окон на панели управления, названных просто «bash». Это нормально, если у вас есть только один из них, но это агония, когда у вас их шесть или больше ... и еще две дюжины других вещей. У меня есть три монитора под одновременным управлением одной пары клавиатура / мышь, и я все еще чувствую потребность в большем. В каждом из этих окон открыто несколько терминалов bash.

Итак, я собрал это вместе. Сначала поместите эти строки в свой .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: любой сценарий, который вы запускаете (на моей машине, man - один из них), будет запускать это в каждой строке. продукция человека серьезно искажается из-за того, что мы здесь делаем. Мы не очень хорошо играем с терминалом.

Чтобы получить команду, которую вы только что набрали, мы берем историю bash и немного ее сокращаем:

                        ===========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 плюс escape-символы) обнаружился в верхней части страницы руководства. Я бы посоветовал протестировать этот драгоценный камень с помощью быстрого вызова «человек-мужчина» из командной строки, как только вы соберете все вместе.

Думаю, пора мне вытащить кастомный мусор из моего .bashrc и положить его туда, где он должен ...

В какой-то момент я обнаружил, что набираю «ловушка для мужчин» в какой-то момент этого процесса.

Sniggerfardimungus
источник
8

На предыдущем месте работы рабочие часы были нелепыми. Это была софтверная компания, и мой босс был никудышным. Он давал нам работу около 17:30 (как раз тогда, когда нужно было идти домой), и заставлял закончить работу до 11:00 (намного дольше, чем у нас были идеальные часы продуктивности). Или он находил досадные проблемы в коде, который все еще был в разработке.

Итак, я сделал командный файл и сценарий, который выключал мой компьютер в случайное время между 19:00 и 20:00. У него был таймер на 1 минуту на тот случай, если я останусь в нерабочее время и мне понадобится прервать процесс выключения.

Но я покидал свой рабочий стол до 17:00, поэтому он не мог найти меня, чтобы удержать меня, если бы он хотел свалить дерьмо во время оформления заказа. Если бы он подошел к моему столу и увидел, что мой компьютер включен, он бы подумал, что я все еще нахожусь в кладовой или в ближайшем мини-маркете, чтобы взять чипсы или что-то в этом роде. Но если он был выключен примерно в это время, он позвонил мне на мобильный и сказал, чтобы я возвращался в офис.

Я также запланировал, чтобы BIOS на моем компьютере включал его около 8:00 или 9:00 на тот случай, если я почувствую себя ленивым и захочу прогуляться примерно в 10:00 или 11:00. Если меня поймали, когда я шел к своему столу, он спрашивал: "Где ты был все утро?" И я бы сказал: «Я был на встрече с командой маркетинга». или «Я завтракал вне дома».

тупая собака

Ludwi
источник
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 для добавления блока управления «нажимайте эту кнопку много раз» в онлайн-игру.

PotatoEngineer
источник
6

Небольшой скрипт, который отслеживает некоторые популярные веб-сайты на предмет рекламы, соответствующей моим навыкам, и отправляет мне электронное письмо.

Eli
источник
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: command not found». Когда я использую «mycd / folder /», он ничего не добавляет в /tmp/mycd.txt. У меня неверные настройки?
Лео Леопольд Герц 준영
Ах, да, вы можете захотеть заменить операторы print на echo. ;-)
wzzrd
@wzzrd Как унизительно;) Очень классная функция, @Ethan Post. Спасибо, что поделились!
Лео Леопольд Герц 준영
5

Мне нравится хранить свои фотографии в каталоге в зависимости от даты, когда они были сделаны. Поэтому я написал программу, которая будет сканировать карту памяти в поисках изображений, создавать на моем жестком диске любые папки, которые ей необходимы, на основе дат изображений, а затем копировать их.

Valerion
источник
Хотите добавить сценарий сюда? Мне бы очень понравился этот функционал, я делаю то же самое!
Pharaun
Боюсь, это приложение на С #, а не скрипт.
Valerion
Вы используете информацию exif, хранящуюся на фотографиях? Не могли бы вы поделиться сценарием?
JJD 08
5

Написал сценарий, чтобы щелкнуть мою кнопку запуска, затем щелкнуть его снова через полсекунды и повторять каждые 30 секунд.

Помечает меня в сети во время работы, и я могу выполнять настоящую работу на своем личном ноутбуке прямо рядом с ним. Не увяз в работе софтом.

Не говори боссу :)

tsilb
источник
Ха-ха-ха, хорошая штука. +1 и за честность, и за нечестность! :)
Кайл Уолш
4

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

Wayne
источник
4

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

http://gist.github.com/6806

dongola7
источник
4

Небольшое приложение, которое щелкает левой кнопкой (или дважды щелкает) каждые «X» мс в течение «Y» времени. Этой пьющей птице больше не нужно работать на АЭС! ;)

tbate
источник