Günlük yaşam için yazdığınız en yararlı senaryo nedir? [kapalı]


132

Buradaki insanların günlük yaşamında yardımcı olan (yani işle ilgili olmayan) hangi küçük senaryoların / programların yazdıklarını merak ediyorum.

Her şey, çığır açan ya da değil. Şu anda benim için, geçen mesafe ve geçen süreye göre koşu hızını hesaplamak için küçük bir python betiği.


İşle ilgili gerçekten harika olanları gördüm, ancak "günlük yaşam" ile ilgili pek çok senaryo görmedim. Sonra tekrar, eğer işteki bir şey hayatınızı mahvediyorsa ve onu düzgün bir senaryo ile düzeltirseniz, o zaman ben kimim?
Kyle Walsh

10
Yığın taşmasını değerli kılan cevher sorularından biri. Kapanmasını öneren herhangi bir kılavuz orada olmamalı, kapatmaya oy veren herhangi bir mod olmamalıdır.
Bill K

Bu benim için bir tane: github.com/codeforester/base . Bu çerçeve, bir SRE / DevOps çalışanı olarak verimliliğimi büyük bir hızla artırırken, ekip uyumluluğunu ve işbirliğini artırdı.
codeforester

Yanıtlar:


116

Benim oanahtar benim laptop düştü; bu yüzden, birbiri 0ardına 200 MS'lik iki tuş vuruşunu, birbirinin 700 MS'si içinde oiki 0tuş vuruşu olarak değiştiren bir program yazdım.0 ve geri kalanını yok ; böylece klavyeyi değiştirmeye başlamadan önce dizüstü bilgisayarımı kullanabilirim.

Vay; Bunun bu kadar popüler olacağını bilmiyordum: p

Nasıl olduğuna gelince - Microsoft, Hooks adında güzel bir küçük API özelliğini ortaya koyuyor .

Bu kancayı kullanarak; Yapmasını istediğim şeyi yapan bir "filtre" yazabildim (ipucu: geri arama pencerelerinizle 1 döndürürseniz tuş vuruşunu işlemez).

Bunu bilmesini nedeni aslında bir keylogger yazıyordu çünkü değil - ama bir programdır Smiler yazdım çünkü Sinerji bir süre önce.

Ve evet. Alfasayısal anahtarları rastgele bir alfa sayısal anahtarla değiştiren başka bir program yazdım ve evet; gerçekten komikti: D


1
Açıkta kalan anahtar desteğini yazmayı düşünmüş olabilirim, ama bu kesinlikle bunun etrafında ilginç bir yol :)
warren

2
Neden böyle düşünmediğimi anladım ... Aynı
sorunu yaşıyorum

1
Bu bana XKCD çizgi romanını hatırlatıyor: xkcd.com/196
JesperE

59
HA! Y00u, parmaklarınızı yeniden eğiterek tekrar 00n standart bir keyb00ard tipinde 00n olamaz! G0000d Şans!
Doug L.

107
Asıl soru, bu programı 'o' harfini kullanmadan nasıl yazmayı başardınız?
James

115

Artık koda sahip değilim, ama muhtemelen yazdığım en yararlı betik, ister inanın ister inanmayın, VBA'daydı. O kadar kısa bir sigortası olan sinir bozucu bir meslektaşım vardı ki ona Cherry Bomb diyorum. Müşteriler arayıp sonra ayağa kalkıp bana hücum duvarının üzerinden bağırmaya başladığında, üretkenliğimi ve moralimi öldürdüğünde sık sık sinirlenirdi.

Microsoft Excel'i her zaman açık tuttum. Bunu yaptığında, Excel'e alt-sekme koyardım ve araç çubuğunda kiraz bombası görüntüsü olan yeni bir simge vardı. Bunu gizlice tıklardım ... ve hiçbir şey olmaz.

Ancak bundan kısa bir süre sonra bir telefon alırdım ve "evet, evet, kulağa kötü geliyor. Bir baksam iyi olur" gibi bir şey söylerdim. Sonra kalkar, Cherry Bomb'dan özür diler ve uzaklaşırdım.

Olan şu ki, NetWare kullandık ve yerleşik ilkel bir mesajlaşma sistemi vardı. Düğmeye tıkladığımda, küçük bir VBA komut dosyası arkadaşlarıma bir NetWare mesajı göndererek Cherry Bomb'un yine iş başında olduğunu ve yapacaklarını söylerdi. lütfen beni ara. Asla anlamadı :)


94
Tuhaf bir sosyal durumdan kurtulmak için bir program yazdığınızda bir programcı olduğunuzu bilirsiniz.
Cadoo

7
Müthiş! Bu, en iyi haliyle sosyal mühendisliktir!
Beska

1
Umarım Cherry Bomb StackOverflow'u kullanmaz :)
Pedro Luz

94

Bir bash betiği çağrıldı , böylece N dizine /a/very/deeply/nested/path/somewhere"yukarı" gitmek istiyorsam , şunu yazabilirim :up N

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

Örneğin:

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

Gmatt tarafından NB:

Yukarıdaki harika çalışmadan yola çıkarak, aşağıdakileri bashrc'nize yerleştirerek bir arka işlev olarak genişletilebilir:

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 Kesinlikle f parlak ing'! Bunun kullanacak çok !
wzzrd

12
Okunması kolay kodu neden okunması zor kodla değiştirdiniz? Daha az kaynak kod satırınız varsa, bilgisayarınız daha hızlı mı çalışıyor?
Beska

3
gnud: temiz ve net kodumu çöp ile değiştir? Hayır teşekkürler.
foxdonut

2
parlak! Bunu bir backyöntem içerecek şekilde genişlettim , böylece ne zaman kullanırsanız kullanın, kolayca ileri geri hareket etmek için geri kullanabilirsiniz. Kullanmak için bunu bashrc'nize koyun (bok biçimlendirmesi için üzgünüm): function up () {LIMIT = $ 1 P = $ PWD for ((i = 1; i <= LIMIT; i ++)) P = $ P / .. yapın bitmiş cd $ P dışa aktar MPWD = $ P} fonksiyonu geri () {LIMIT = $ 1 P = $ MPWD for ((i = 1; i <= LIMIT; i ++)) yap P = $ {P% / ..} bitti cd $ P ihracat MPWD = $ P}
ldog

2
ben deli miyim? bu nasıl işliyor? Bir komut dosyasındaki cd orada cd olacaktır, ancak komut dosyası mevcut olduğunda, aynı / orijinal dizine geri dönersiniz! benim bash'ım sizinkinden farklı çalışıyor mu?
johnnyB

67

Süper uzaktan sıfırlama düğmesi. Süper özel
bir rafDünyanın diğer tarafındaki bir kullanıcının sabahın erken saatlerinde çökeceği simülasyon donanımından VME kasalarıyla dolu bir odanın GPU'nuzdan daha az yaptığı günlerde). Laboratuvara ve güvenliğe girmek bir saat sürdü.

Ancak süper özel denetleyiciye bağlanmamıza veya donanımı değiştirmemize izin verilmedi . Çözüm, epson nokta vuruşlu bir yazıcıya sahip eski bir DEC iş istasyonuydu, kağıt besleme düğmesine plastik bir cetvel yapıştırdı, yazıcıyı sıfırlama düğmesinin yanına yerleştirdi.
WS'de normal bir kullanıcı olarak oturum açın (kök izin verilmez, tüm harici bağlantı noktaları kilitlenir), 24 boş satırlı bir belge yazdırın - bu, kağıt besleme düğmesini döndürdü ve süper özel donanım üzerinde sıfırlama işlemi üzerine cetveli bastırdı .


Harika hikaye! Sana inanıp inanmayacağından emin değilim;)
Greg Whitfield

Sonunda, seri bağlantı noktasındaki DTR hattına bağlı bir güç anahtarı rölesi ile değiştirildi - ancak bu kök erişimi gerektiriyordu. Ve DEC WS demeliydim çünkü Ultrix'i çalıştırıyordu.
Martin Beckett

Vay canına, güvenlikten geçmek için gittiğimiz uzunluklar!
Chris Ballance


5
O günlerde CD tepsilerimiz olsaydı, daha kolay bir çözüm olurdu,
Martin Beckett

63

Windows XP'de, bu komutu günlük olarak C: \ içinde çalıştırmak için bir AT işi ayarladım.

dir /s /b * > dirlist.txt

Bu, C sürücüsündeki tüm dosyaların tam yolunu listeler. O zaman ne zaman bir dosya bulmam gerekirse onu kullanabilirim findstr. Bu, tüm yol üzerinde düzenli ifade eşleşmesine izin verdiği için Windows Gezgini Aramasını kullanmaktan daha iyidir. Örneğin:

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

Bu, kurulumu çok hızlı bir çözümdür ve kendinizi yeni bir Windows yüklemesiyle ve internet bağlantısı olmadan bulursanız harikadır.

Bir kalıp için belirli dosya türleri içinde arama yapmanız gerekirse, önce kontrol etmeniz gereken tüm dosyaları listeleyin, ardından içlerinde arayın. Örneğin, bir görüntüyü çeviren bir Java veya Python programı bulmak için şunu yapabilirsiniz:

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

8
dostum, ne harika bir fikir.
Epaga

10
Bu tam olarak unix bulma programının yaptığı şeydir
Mark Baker

4
@Mark Bu, Windows ile çalışmanız gerekse bile, unix'ten çok sayıda yararlı şey öğrenebileceğinizi gösteriyor
Liam

1
"Belgeler" klasörüm için bu komut dosyalarından birini yaptım, ki bunu hiçbir zaman düzenli
tutamayacağım

1
ve orada Google Desktop aramasını kullanıyordum: D
inspite

38

Dijital kameramı taktığımda otomatik olarak çalışan bir Python komut dizim var.

Tüm resimleri kameradaki karttan kopyalar, yedekler ve ardından Flickr'a yükler.


Flickr'a yükleme parçası, uploadr.py'den geliyor (kredi alamıyorum).

İşte kamerayı boşaltmak için Python kodu. SRCDIR aracılığıyla yinelenir ve görüntüleri DESTDIR'e kopyalamadan önce her görüntüyü tarih ve saatle adlandırır.

#!/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)

Kodu paylaşın ve bir oylamayı paylaşacağım :)
Mien bile

40
Bu, önceki gece çektiğiniz o özel fotoğrafları unuttuğunuz güne kadar harika çalışacak ...
Ed Guiness

Tam olan şey aslında iki aşamalı bir süreçtir. İlk adım, her şeyi kameradan atıp yeniden adlandırır. İkinci adımda, Flickr'a yüklemek isteyip istemediğinizi soran bir uyarı vardır. Bunun nedeni, yüklediğim şey hakkında endişelendiğimden çok, yükleme bant genişliğimi öldürmesidir.
Mark Biek

5
'Eklenti üzerinde çalıştır' bitini nasıl tetiklersiniz?
ijw


32

Birkaç yıl önce, birkaç win32 API'nin yardımıyla, kendimi bir saatliğine bilgisayarımdan tamamen kilitlemek için bir winforms uygulaması yazdım, böylece beni gitmeye ve egzersiz yapmaya zorlayacaktı. Tembel olduğum için mi? Hayır ... çünkü kişisel bir spor hedefim vardı. Bazen başlamak için sadece küçük bir tekmeye ihtiyacınız var :)


16

Okuduğum tüm web çizgi romanlarına gidecek ve yeni çizgi romanları indirecek bir Python betiği yazdım. Bunu günde bir kez çalıştırıyorum ve her siteyi ayrı ayrı ziyaret etmeye gerek yok, sadece / Comics / Klasörünü ziyaret edin. ;)


hmmm. Bunlar reklam destekli çizgi romanlarsa, reklamları görme riskini
göze

2
@Matthew - Demek istediğini anlıyorum, ama neden bir reklama bakmamanın ahlaki / etik bir mesele olduğunu anlamıyorum. Durum buysa, No-Script ve pop-up engelleyicilerin yazarlarının yapacak çok açıklaması vardır. ;)
Onion-Knight

1
Pop-up engelleyicilerle ilgili herhangi bir sorunum yok çünkü pop-up'lar reklamları kötüye kullanmanın bir yoludur. Bu tam olarak ahlaki bir mesele değil, daha çok bir adalet meselesi. Çoğu sitede bir reklam engelleyici kullanıyorum, ancak sık sık ziyaret ettiğim ve desteklemek istediğim belirli siteler için kapatıyorum. Çizgi romanları bir python komut dosyasıyla getirmek (ve siteyi hiç görmemek) bana satırın çok ötesinde geliyor, ancak size satırın tam olarak nerede olduğunu söyleyemedim.
Matthew Scouten

14

.Cmd yedekleme komut dosyam. Her gece sunucumda çalışıyor ve yedekleme dosyalarını haftanın gününe göre adlandırıyor. Tam bir haftalık yedekleme beni (ve ailemi) birçok kez kurtardı:

:: Yedek parametreler:
:: / V Doğrulasın mı? (Evet Hayır)
:: / R Sahibe erişim kısıtlansın mı? (Evet Hayır)
:: / RS Çıkarılabilir depolama? (Evet Hayır)
:: / HC Donanım sıkıştırması (açık / kapalı)
:: / M Yedekleme türü (normal / kopya / diferansiyel / artan / günlük)
:: / L Günlük dosyası türü (f / s / n)
:: / D "Açıklama"
:: / J "İş adı"
:: / F "Dosya adı"

SETLOCAL

:: ağ sürücülerinin takılı olduğundan emin olun
CALL C: \ bat \ configs \ MapShares-home.cmd
yankı açık

bugün ayarla =% DATE: ~% 0,3
% bugün% == Pzt, dün ayarlanmışsa = 0Pazar
eğer% bugün% == Sal, dün = 1Pazartesi olarak ayarlanırsa
eğer% bugün% == Çar, dün = 2Salı olarak ayarlanırsa
eğer% bugün% == Per dün ayarlanmışsa = 3Çarşamba
eğer% bugün% == Cum, dün ayarlandı = 4Perşembe
eğer% bugün% == Cts dün ayarlanmışsa = 5Cuma
eğer% bugün% == Dün güneş battı = 6Cumartesi

configsDir =% ~ dp0 ayarla
storePath = C: \ yedeklerimi ayarla

:: (örneğin: Pazartesi C dosyaları)
başlık ayarla =% dün% yedekleme kümesi


echo% DATE%% TIME%% title%> "% storePath% \% dün% _backup.log"

ÇAĞRI BackupConfigs.bat

:: Yeni BKF dosyası oluştur
C: \ WINDOWS \ system32 \ ntbackup.exe yedekleme ^ çağırın
    "@% configsDir% \ daily.bks" ^
    / V: evet / R: hayır / RS: hayır / HC: kapalı / M normal / L: s ^
    / D "% başlık%" ^
    / J "% başlık%. İş" ^
    / F "% storePath% \% dün% .bkf" ^
    >> "% storePath% \% dün% _backup.log"

echo% DATE%% TIME% Tamamlandı >> "% storePath% \% dün% _backup.log"

"% storePath% \% dün% .bkf" "V: \ Backups \ NEPTUNE" kopyalayın

CALL C: \ bat \ clean-temps.bat

defrag -v C:> "% storePath% \% dün% _defrag.log"

:: yedekleme dizinlerini göster
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::Duraklat


2
Bazı güzel .cmd dosyası hileleri var. Yönlendirme ve borulardan kaçmak için '^' kullanabileceğinizi biliyordum, ancak bunu satır devamı için de kullanabileceğinizi bilmiyordum. Harika :)
Patrick Cuff

Dünyanın daha az .bat betiklerine ihtiyacı var, daha fazlasına değil! :-)
JesperE

2
Ve doğal olarak, dünyanın daha az Windows'a ihtiyacı var. O zamana kadar, bu en az ortak payda. Bu senaryoyu paylaşıyorum çünkü onu olduğu gibi milyonlarca insan kullanabiliyor.
Chris Noe

14

Bir dizinin içeriğini toplayan ve bunu gmail hesabıma gönderen "backup.sh".


Şimdi bu harika. Onlarca smtp kurulumuna sahip bilgisayarım olmamasına rağmen. Ne yazık ki.
mxcl

Kodu alabilir miyiz lütfen?
Kostas

14

Ekibimde her gün kullanılan bir senaryo yazdım. Intel için çalıştığımda, bir kayıt bilgisi dökümü almak için bir erişim veritabanıyla konuşan bir uygulamamız vardı (yonga setlerini doğrulamak için çalıştım). Bu bilgiyi (bir SQL sorgusundan) alır ve bir CSV dosyasına, HTML dosyasına ve bir Excel dosyasına döker. Tüm süreç neredeyse 2 saat sürdü. Şaka değil. Neden bu kadar uzun sürdüğü hakkında hiçbir fikrim yok. Öğle yemeğinden bir saat önce başlatır, öğle yemeğine gider ve sonra geri döneriz.

Bunu yapmanın daha iyi bir yolu olması gerektiğini düşündüm. Kayıt veritabanını koruyan ve SQL kodunu onlardan alan ekiple konuştum. Daha sonra verileri alan ve CSV, HTML ve Excel formatlarına çıkaran bir perl betiği yazdım. Çalışma süresi? 1-2 saniye civarında. Harika bir hız artışı.

2006'da Irak'ta konuşlandırılırken birkaç senaryo da yazdım (Ulusal Muhafızlarda 9 yıl görev yaptım - Aralık'ta çıktım). ADA'da yazılan ve orijinal olarak DOS'ta çalıştırılan ULLS-G (Unit Level Logistics System - Ground) adlı bu eski uygulamayı kullandık. Bir komut kabuğunda Windows XP'de çalışacak kadar hacklediler. Bu sistemin bir fare arayüzü yoktu. Her şey klavyedeydi ve HİÇBİR parti işlevselliği yoktu. Diyelim ki tüm araç operatörleri için lisans yazdırmak istediniz? Şey ... birliğimizde 150 askerimiz vardı, bu yüzden uzun sürdü. Diyelim ki herkes yeni bir araçta kalifiye oldu ve siz onu herkesin operatör niteliklerine eklemek istediniz? Bunu tek tek yapmak zorundaydın.

SAGE veritabanı (ULLS-G'nin kullandığı) için bir ODBC sürücüsü bulabildim ve bu yüzden SAGE veritabanıyla konuşabilen perl betikleri yazdım. Yani bir saatten fazla süren şeyler şimdi sadece birkaç saniye sürdü. Raporlama için komut dosyalarımı ve sürücüyü de kullandım. Tüm bilgileri her sabah tabura bildirmek zorunda kaldık. Diğer birimler her sabah bilgileri elle yazardı. Aynı sürücüyü kullanan ve SAGE veritabanıyla konuşan bir Excel makrosunu kırbaçladım ve Excel elektronik tablosunu bu şekilde güncelledim. Şimdiye kadar yazdığım en karmaşık ve tek Excel makrosu. Karşılığını verdi çünkü bana Ordu Takdir Madalyası verdiler. Yani evet, orduda perl senaryoları yazdığım için madalya aldım :) Bunu kaç kişi söyleyebilir? ;)


13

Ben özel bir pilotum. Aviationweather.gov adresinden yerel havaalanları için hava durumu bilgilerini alan birkaç komut dosyası yazdım. "Bugün uçmak için güzel bir gün mü?" Sorusuna hızlı bir cevap için faydalı oldular.


Yolcularınız için aviationweather.gov düzenini değiştirip ayrıştırıcınızı bozarsa betiğinizin güzelce başarısız olacağını umuyorum!
MatthieuP

1
Senaryoyu paylaşır mısın lütfen?
JJD

12

Kumar sitesi Kotaku.com'dan aptalca [*] yorumları kaldıran bir Greasemonkey betiği .

[*] Yaygın yazım hataları, büyük harflerle yazılması, aşırı "LOL" kullanımı ve benzer sezgisel yöntemlerle tanımlandığı gibi.


6
Güzel. Normal ifadeleri ayıklamak ve yalnızca bir veya daha fazlasıyla eşleşen ifadelerden oluşan rastgele ifadeler oluşturmak istiyorum.
gnud

11

alias dir = 'ls -al' en sevdiğim komut dosyasıdır.


4
eww ... Ben daha sonra kendimi başka bir yoldan gitmek isterken buldum ...
chills42

1
İnsanların soruların yanıtlarını neden öznel bir etiketle oylamaya başladığını merak etmelisiniz .... lanet nokta nedir?
Greg Whitfield

Evet, bu kritik :)
Nick

11

Kullanması zor olan bir siteden diziler / filmler için mevcut tüm altyazıları indirmek için iş parçacıklı bir HTML kazıyıcı (sadece daha fazla reklam görüntülemek için indirme sayfasına gitmek için aramadan sonra 4 kez tıklamanız gerekir). Şimdi sadece arama kriterlerini koyup indir tuşuna basıyorum.


2
Paylaşacak ve site öğrenecek :). Bazen paylaşmamak daha iyi ...
Camilo Díaz Repka

11

Yerel Craigslistimi seçilen kategorilere göre bir SQL DB'ye aktaran bir perl betiği, daha sonra sorgu yapabileceğim.

Bunun V2'si DB'yi bir zamanlayıcı ile günceller ve sorgulardan herhangi biriyle eşleştiğimde beni uyararak temelde bana CL için bir arka plan aracısı sağlar.


8

Sürükle ve bırak yoluyla toplu dosya yeniden adlandırma.

Yıllar önce, bir RegEx kabul eden ve dosya adlarını buna göre değiştiren küçük bir VBScript hazırladım. Üzerine bir grup dosya veya klasör bırakmanız yeterlidir. Yıllar boyunca bunu çok faydalı buldum.

gist.github.com/15824 (Dikkat edin, yorumlar Almancadır)


Kod yazmadan bir açıklama oylamak aptalca görünüyor.
Chris Noe

Kod, web sitesi için biraz fazla olacaktır. Belki "küçük" biraz yetersiz kalıyordu. 170 LOC.
Tomalak

Komut dosyasını bir yere yükleyebilirim ve ilgileniyorsanız bağlantıyı buraya gönderebilirim.
Tomalak

8

Her 5 saniyede bir google.com için DNS'yi arayan ve başarılı olursa bir, başarısız olursa iki kez bip sesi çıkaran Hızlı ve Kirli Python betiği.

Bunu, oldukça kesintili bir ev ağıyla yaşamak zorunda olduğum bir zamanda yazdım. Odanın karşısındaki masanın altındayken, iki elim de ağ kablosuyla dolu ve ağzımda bir el feneri ile ağın durumunu anında bilmemi sağladı.


5 saniye? Gerçekten sinir bozucu olmuş olmalı.
Ponkadoodle

Evet, 30 dakika sonra beni yarasalara sürükledi. Buradaki fikir, gerçek zamanlı geri bildirime mümkün olduğunca yakın olmaktı. Genelde işleri yaklaşık 10 dakikada düzeltebilirim.
Matthew Scouten

8

Benim bu, bir gönderme blogda birkaç ay önce, son bellek kadar öksürdü en iyi küçük dalaverecileri birine serin olduğunu sandığı bir fikir konumuna geldiğini kaydetti. Tam olarak buradan alıntı yapıyorum:

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

Bash'de çok zaman geçiriyorum. Başlatılmamış olanlar için bash, çoğu unix makinesinde ve neyse ki bazı pencerelerde ve dışarıdaki her Mac'te bulacağınız bir sistemdir. İlk bakışta, bir komut satırı arayüzünden başka bir şey değil ve bu nedenle, bu tür şeyleri unutmayı tercih ettikleri bir anakronizm olarak gören çoğu kullanıcının radarının dışında.

Bash'de neredeyse her şeyi yapıyorum. E-POSTAMI BİR KOMUT HATTINDAN OKUYORUM, bu nedenle işaretli e-postalardan kaçınıyorum. Dizinlerde gezinirim, dosyaları düzenlerim, günlük kaynak kodu teslim alırım, dosyaları ararım, dosyaların içinde arama yaparım, makinemi yeniden başlatırım ve hatta bazen komut satırından web sayfalarına göz atarım. bash, dijital varlığımın kalbi ve ruhu.

Sorun şu ki, bir seferde yaklaşık 6 bash penceresine sahip olma eğilimindeyim. Bugün işte, biri bir web sunucusu çalıştırıyordu, diğeri veritabanımla uğraşıyordu, üçüncü, dördüncü ve beşinci farklı dosyaları düzenlerken, altıncı biri sistemdeki her dosyanın adlarını kaydetmeye çalışırken makinemden geçiyordu. Neden? Çünkü bir nesneyi dosya adına göre nerede bulacağınızı bilmek istiyorsanız böyle bir arşivde arama yapabilmek kullanışlıdır.

Bunu yaptığınızda, kontrol çubuğunuzda basitçe "bash" olarak adlandırılan birçok pencere ile karşılaşırsınız. Sadece bir tanesine sahipseniz bu sorun değil, ama 6 veya daha fazla varken acı çekiyor ... ve iki düzine başka şey oluyor. Bir klavye / fare çiftinin eşzamanlı komutu altında üç monitörüm var ve hala daha fazlasına ihtiyaç duyuyorum. Bu pencerelerin her birinin açık birkaç bash terminali vardır.

Bu yüzden bunu bir araya getirdim. Öncelikle, bu satırları .bash_profile dosyanıza yerleştirin:

  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

Tüm bunların nasıl çalıştığına ve tam olarak neden bu şekilde kurulduğuna dair düzinelerce paragraf yazdım, ama gerçekten ilgilenmiyorsunuz. Güven Bana. ...O üçüncü satıra neden "CMD = ; echo ..." yaptığımla ilgili bir kitabın koca bir bölümü var . Pek çok kişi (diğer etki alanımın barındırıldığı bluehost dahil) hala kullanıyor ve tuzakları nasıl ele aldığı konusunda büyük hatalar içeren eski bash sürümünü kullanıyor, bu yüzden buna bağlı kaldık. Bash sürümünüzde güncel iseniz ve araştırma yapmak istiyorsanız CMD'yi kaldırabilir ve $ BASH_COMMAND ile değiştirebilirsiniz.

Her neyse, kullandığım ilk komut dosyası burada. Makul bir uzunluğa indirilmiş, makine adınızı ve dizininizi içeren güzel bir komut istemi oluşturur:

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

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

Bu blog gönderisinin üstünde, "Neden HOSTNAME ortam değişkenini @ENV aracılığıyla kullanmadınız?" Gibi aptalca sorular sormaya başlamadan önce okumanız gereken bir uyarı var. Basit: Çünkü bu, denediğim tüm sistemler için çalışmıyor.

Şimdi gerçekten harika kısım için. .Bash_profile eklemesinin 3. satırını hatırlıyor musunuz?

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

Trim.pl komut dosyası çıktısını eskisi gibi aynı kaba döküyor, hem komut istemine hem de pencere başlığına yazdırıyor, ancak bu sefer az önce yazdığınız komutu ekliyor! Bu yüzden bunların hepsini .bashrc dosyanızda yapmak istemezsiniz: çalıştırdığınız herhangi bir komut dosyası (benim makinemde, adam onlardan biridir) bu şeyi her satırda tetikleyecektir. Adamın çıktısı burada yaptığımız şey yüzünden ciddi şekilde bozulur. Terminalle pek iyi oynamıyoruz.

Az önce yazdığınız komutu almak için, bash'ın geçmişini alıp biraz parçalara ayırıyoruz:

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

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

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

Şimdi, bazilyon pencerem var ve şöyle şeyler söylüyorlar:

  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/

Şimdi ekranın altındaki mutlu küçük çubuktan hangisinin hangisi olduğunu bir bakışta anlayabiliyorum. Ve PS1'i ayarladığımız için, bir komutun yürütülmesi biter bitmez, komut adı sadece trim.pl çıktısıyla değiştirilir.

GÜNCELLEME (aynı gün): Bu şeyler (.bash_profile girişleri) .bashrc'de denediğimde üzerime her türlü cehennemi koydu. .Bashrc dosyanız, bash'ı dil olarak her çağırdığınızda etkileşimli olmayan komut dosyaları tarafından yürütülür. Adamı kullanmaya çalışırken buna vurdum. Her türlü çöp (.bashrc'min tam metni ve kaçış karakterleri) man sayfasının en üstünde görünüyordu. Bu mücevheri, hepsini bir araya getirdikten sonra komut satırında hızlı bir 'adam adam' çağrısıyla test etmenizi öneririm.

Sanırım özel çöpü .bashrc dosyamdan alıp ait olduğu yere koyma zamanım geldi ...

Eskiden, bu sürecin bir noktasında kendimi 'insan tuzağı' yazarken buldum.


8

Daha önceki iş yerimde ofis saatleri çok saçma. Bir yazılım firmasıydı ve patronum berbattı. Bize saat 17:30 civarında (tam da eve gitme zamanı geldiğinde) iş verecek ve işi 23: 00'e kadar bitirmemizi sağladı (ideal üretken saatlerimizin çok ötesinde). Ya da kodda hala devam etmekte olan can sıkıcı problemler bulurdu.

Bu yüzden bir toplu iş dosyası ve bilgisayarımı 19:00 ile 20:00 arasında rastgele bir zamanda KAPATACAK bir komut dosyası hazırladım . Saatlerce kalmam ve kapatma işlemini iptal etmem gerekirse diye 1 dakikalık bir zamanlayıcı vardı.

Ama ben saat 17: 00'den önce masamı terk ederdim, bu yüzden eğer ödeme zamanı civarında saçmalıklar atmak isterse beni tutmamı sağlayamazdı. Masama gelip bilgisayarımı görürse, hala kiler alanında ya da yakındaki küçük dükkanda cips falan almak için olduğumu düşünürdü. Ama o zamanlar kapalı olsaydı, cep telefonumu arayıp ofise geri dönmemi söylerdi.

Ayrıca, makinemdeki BIOS'u, kendimi tembel hissettiğimde ve 10:00 veya 11:00 civarında dolaşmak istemem durumunda makinemi 08:00 veya 09:00 civarında AÇIK hale getirecek şekilde programladım . Masama doğru yürürken yakalanırsam, "bütün sabah neredeydin?" Diye sorardı. Ve "Pazarlama ekibiyle bir toplantıdaydım" derdim. veya "Dışarıda kahvaltı yapıyordum."

Aptal köpek


7

Eskiden bir teknoloji yaz kampında çalışıyordum ve gruptaki çocukların her biri için bu yazıları haftanın sonunda yazmamız gerekiyordu, daha sonra bunları alıp hatıra olarak eve götürüyorlardı. Genellikle bunlar bir grup genel cümleden ve bir ila iki kişiselleştirilmiş cümleden oluşuyordu. Bu yazılardan birini hazır cümlelerden oluşan bir bankadan oluşturan bir python betiği yazdım ve kullanıcının ortasına birkaç kişiselleştirilmiş cümle eklemesine izin verdim. Bu, benim ve sırrı açıkladığım diğer danışmanlar için çok fazla zaman kazandırdı. Çoğu otomatikleştirilmiş olsa da, yazdıklarımız hala 'dürüst' olanların çoğundan daha iyi görünüyordu, çünkü kişiselleştirilmiş parçalara daha fazla zaman ayırabildik.


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

Bir çevrimiçi oyuna "o düğmeye çok basın" kontrol kutusu eklemek için bir Greasemonkey betiği.


6

Becerilerime uyan reklamlar için bazı popüler web sitelerini izleyen ve bana bir e-posta gönderen küçük bir komut dosyası.


6

Bunu otomatik olarak yüklenen bir işlev olarak kullanıyorum. "Mycd" yazabilirim ve sık sık cd yazdığım dizinlerin bir listesi görünür. Numarayı öğrenirsem, "mycd 2" gibi bir şey söyleyebilirim. Listeye bir dizin eklemek için "mycd / tmp / foo / somedirectory" yazmanız yeterlidir.

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" yi çalıştırdığımda şunu alıyorum: "-bash: print: command not found". "Mycd / klasör /" kullandığımda, /tmp/mycd.txt dosyasına hiçbir şey eklemez. Bazı ayarlarım yanlış mı?
Léo Léopold Hertz 준영

Ah, evet, 'print' ifadelerini 'echo' ile değiştirmek isteyebilirsiniz. ;-)
wzzrd

@wzzrd Ne kadar aşağılayıcı;) Çok güzel bir işlev, @Ethan Post. Paylaşım için teşekkürler!
Léo Léopold Hertz 준영

5

Fotoğraflarımı, çekildiği tarihe göre bir dizinde saklamayı seviyorum. Bu nedenle, resimler için bir hafıza kartını tarayacak, sabit diskimde resimlerin tarihlerine göre ihtiyaç duyduğu klasörleri oluşturacak ve sonra bunları kopyalayacak bir program yazdım.


Komut dosyasını buraya eklemek ister misiniz? Bu işlevselliği çok isterdim, ben de aynı şeyi yapıyorum!
Pharaun

Bu ac # uygulaması, korkarım bir senaryo değil.
Valerion

Fotoğraflarda depolanan exif bilgilerini kullanıyor musunuz? Senaryoyu paylaşır mısın lütfen?
JJD

5

Başlat düğüme tıklamak için bir komut dosyası yazdım, ardından yarım saniye sonra tekrar tıklayın ve her 30 saniyede bir tekrarlayın.

İşteyken beni Çevrimiçi olarak işaretliyor ve gerçek işi hemen yanında kişisel dizüstü bilgisayarımda halledebiliyorum. İş yazılımı tarafından tıkanmaz.

Patrona söyleme :)


Ha ha ha, iyi şeyler. Hem dürüstlük hem de sahtekârlık için +1! :)
Kyle Walsh

4

"Net start" ve "net stop" komutlarına çeşitli Kısayollar, böylece MMC Hizmetleri'ne girmek zorunda kalmadan hizmetleri başlatabilir ve durdurabilirim


4

Rsync kullanarak dönüşümlü yedeklemeler gerçekleştirmek için bir kabuk betiği. Ayrıca, diğer yedekleme öncesi etkinlikleri (örneğin, lezzetli yer imlerinin indirilmesi) desteklemek için rastgele alt programların yürütülmesini de destekler.

http://gist.github.com/6806


4

"Y" süresi boyunca her "X" ms sol tıklama (veya çift tıklama) yapan küçük bir uygulama. Artık içme kuşunun nükleer santralde çalışmasına gerek yok! ;)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.