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


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


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 снова зашла на это, и будут ли они пожалуйста, позвони мне. Он так и не понял :)


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


32

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


16

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


хммм. Если это комиксы с рекламой, я бы побеспокоился, что вы не «платите», рискуя увидеть рекламу :-)
— Мэтью Скоутен,

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.


Теперь это круто. Хотя у меня из десятков компьютеров нет компьютеров с настройкой 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 и аналогичными эвристиками.


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 и положить его туда, где он должен ...

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


8

На предыдущем месте работы рабочие часы были нелепыми. Это была софтверная компания, и мой босс был никудышным. Он давал нам работу около 17:30 (как раз тогда, когда нужно было идти домой), и заставлял закончить работу до 11: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: command not found». Когда я использую «mycd / folder /», он ничего не добавляет в /tmp/mycd.txt. У меня неверные настройки?
— Лео Леопольд Герц 준영

Ах, да, вы можете захотеть заменить операторы print на echo. ;-)
— wzzrd

@wzzrd Как унизительно;) Очень классная функция, @Ethan Post. Спасибо, что поделились!
— Лео Леопольд Герц 준영

5

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


Хотите добавить сценарий сюда? Мне бы очень понравился этот функционал, я делаю то же самое!
— Pharaun

Боюсь, это приложение на С #, а не скрипт.
— Valerion

Вы используете информацию exif, хранящуюся на фотографиях? Не могли бы вы поделиться сценарием?
— JJD 08

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.