Apa naskah paling berguna yang Anda tulis untuk kehidupan sehari-hari? [Tutup]


132

Hanya ingin tahu apa skrip / program kecil yang ditulis orang yang membantu kehidupan sehari-harinya (alias tidak terkait pekerjaan).

Apa saja, terobosan atau tidak. Bagi saya sekarang, ini adalah skrip python kecil untuk menghitung kecepatan lari yang diberikan jarak dan waktu yang telah berlalu.


Saya telah melihat beberapa yang berhubungan dengan pekerjaan yang sangat keren, tetapi tidak banyak skrip terkait "kehidupan sehari-hari". Kemudian lagi, jika sesuatu di tempat kerja menghancurkan hidup Anda dan Anda memperbaikinya dengan naskah yang rapi, lalu siapakah yang harus saya hakim?
Kyle Walsh

10
Salah satu pertanyaan permata yang membuat stack overflow bernilai sementara. Pedoman apa pun yang menyarankan ditutup tidak boleh ada, mod yang memilih untuk menutupnya tidak boleh ada.
Bill K

Ini satu untuk saya: github.com/codeforester/base . Kerangka kerja ini telah meningkatkan produktivitas saya sebagai orang SRE / DevOps dengan cepat, sambil meningkatkan kekompakan dan kolaborasi tim.
codeforester

Jawaban:


116

oKunci saya jatuh di laptop saya; jadi saya menulis sebuah program yang menggantikan dua 0penekanan tombol dalam 200 MS satu sama lain sebagai o, dua 0penekanan tombol dalam 700 MS satu sama lain sebagai 0dan mengabaikan sisanya; jadi saya bisa menggunakan laptop saya sebelum saya mengganti keyboard.

Wow; Saya tidak tahu ini akan sangat populer: p

Adapun caranya - Microsoft memperlihatkan fitur API kecil yang menyenangkan yang disebut Hooks .

Menggunakan kait itu; Saya dapat menulis "filter" yang melakukan apa yang saya butuhkan (petunjuk: jika Anda kembali 1 dengan jendela panggilan balik Anda tidak akan memproses penekanan tombol).

Alasan saya tahu tentang ini sebenarnya bukan karena saya menulis keylogger - tetapi karena saya menulis program smiler untuk Synergy beberapa waktu yang lalu.

Dan ya. Saya memang menulis program lain yang menukar kunci alpha-numeric dengan kunci alpha-numeric acak dan ya; itu benar-benar lucu: D


1
Saya mungkin berpikir untuk mengetikkan kunci-kunci yang terbuka, tapi itu pasti cara yang menarik untuk itu :)
warren

2
Saya ingin tahu mengapa saya tidak berpikir bahwa ... Saya mengalami masalah yang sama ... :-(
asterite

1
Ini mengingatkan saya pada komik XKCD ini
JesperE

59
HA! Y00u tidak akan dapat mengetikkan 00n pada keyb00ard standar lagi dengan00ut pelatihan ulang jari-jari kita! Keberuntungan G0000d!
Doug L.

107
Pertanyaan besarnya adalah bagaimana Anda bisa menulis program itu tanpa menggunakan huruf 'o'?
e.James

115

Saya tidak memiliki kode lagi, tetapi mungkin skrip yang paling berguna yang saya tulis adalah, percaya atau tidak, di VBA. Saya memiliki kolega yang menyebalkan yang memiliki sekering pendek sehingga saya menyebutnya sebagai Cherry Bomb. Dia sering marah ketika pelanggan akan menelepon dan kemudian berdiri dan mulai mengomel saya di atas dinding bilik, membunuh produktivitas dan moral saya.

Saya selalu membuka Microsoft Excel. Ketika dia melakukan ini, saya akan alt-tab ke Excel dan di sana, pada bilah alat, adalah ikon baru dengan gambar bom ceri. Saya diam-diam akan mengklik itu ... dan tidak ada yang akan terjadi.

Namun, tak lama setelah itu saya akan menerima telepon dan mengatakan sesuatu seperti "yeah, yeah, itu kedengarannya buruk. Sebaiknya saya memeriksanya." Dan kemudian aku akan bangun, meminta maaf kepada Cherry Bomb dan pergi.

Apa yang terjadi adalah kami menggunakan NetWare dan memiliki sistem perpesanan primitif. Ketika saya mengklik tombol itu, skrip VBA kecil akan mengirimkan pesan NetWare kepada teman-teman saya, memberi tahu mereka bahwa Cherry Cherry sudah melakukannya lagi dan akankah mereka tolong hubungi saya Dia tidak pernah mengetahuinya :)


94
Anda tahu Anda seorang programmer ketika Anda menulis sebuah program untuk keluar dari situasi sosial yang canggung.
Cadoo

7
Luar biasa! Ini adalah rekayasa sosial yang terbaik!
Beska

1
Mari berharap Cherry Bomb tidak menggunakan StackOverflow :)
Pedro Luz

94

Sebuah bash script yang disebut up sehingga jika saya di /a/very/deeply/nested/path/somewheredan saya ingin pergi "up" N direktori, saya bisa mengetik :up N

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

Sebagai contoh:

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

NB oleh gmatt:

Bekerja dari pekerjaan besar di atas, itu dapat diperluas ke fungsi kembali dengan menempatkan berikut ini di bashrc Anda:

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 Absolutely f 'ing brilian! Saya akan menggunakan ini banyak !
wzzrd

12
Mengapa Anda mengganti kode yang mudah dibaca dengan kode yang sulit dibaca? Apakah komputer Anda berjalan lebih cepat jika Anda memiliki lebih sedikit jalur kode sumber?
Beska

3
Gnud: ganti kode saya yang bersih dan jelas dengan sampah? Tidak, terima kasih.
foxdonut

2
cemerlang! Saya memperpanjang ini untuk memasukkan backmetode, jadi setiap kali Anda menggunakan Anda dapat menggunakan kembali untuk dengan mudah bergerak maju dan mundur. Untuk menggunakannya, letakkan ini di bashrc Anda (maaf tentang pemformatan sial): berfungsi naik () {LIMIT = $ 1 P = $ PWD untuk ((i = 1; i <= LIMIT; i ++)) lakukan P = $ P / .. selesai cd $ P ekspor MPWD = $ P} berfungsi kembali () {LIMIT = $ 1 P = $ MPWD untuk ((i = 1; i <= LIMIT; i ++)) lakukan P = $ {P% / ..} selesai cd $ P export MPWD = $ P}
ldog

2
apakah saya gila bagaimana ini bekerja? cd di skrip akan cd di sana tetapi ketika skrip ada, Anda kembali ke direktori yang sama / asli! apakah bash saya bekerja berbeda dari semua milikmu?
johnnyB

67

Tombol reset super jarak jauh.
Rak perangkat keras simulasi yang sangat spesial (pada hari-hari ketika ruangan yang penuh dengan peti VME melakukan kurang dari GPU Anda) bahwa pengguna di sisi lain dunia akan crash pada jam-jam awal pagi. Butuh satu jam untuk masuk ke lab dan melalui keamanan.

Tetapi kami tidak diizinkan untuk terhubung ke pengontrol super khusus atau memodifikasi perangkat keras. Solusinya adalah workstation DEC tua dengan printer epson dot matrix, rekatkan penggaris plastik ke kenop umpan kertas, posisikan printer di dekat tombol reset.
Masuk ke WS sebagai pengguna biasa (root tidak diizinkan, semua port eksternal terkunci), cetak dokumen dengan garis 24blank - yang memutar kenop umpan kertas dan penggaris menekan reset pada perangkat keras super spesial .


Cerita yang fantastis! Tidak yakin apakah Anda percaya atau tidak;)
Greg Whitfield

Itu akhirnya digantikan oleh relay saklar daya yang terhubung ke jalur DTR pada port serial - tetapi itu membutuhkan akses root. Dan saya seharusnya mengatakan DEC WS karena menjalankan Ultrix.
Martin Beckett

Wow, panjangnya kita berusaha untuk mendapatkan keamanan!
Chris Ballance

1
Mengingatkan saya pada hal ini: thedailywtf.com/Articles/Open-Sesame.aspx
rjmunro

5
Jika kita memiliki nampan CD di hari-hari itu akan menjadi solusi yang lebih mudah,
Martin Beckett

63

Pada Windows XP, saya telah menetapkan pekerjaan AT untuk menjalankan perintah ini setiap hari di C: \

dir /s /b * > dirlist.txt

Ini mencantumkan path lengkap semua file pada drive C. Maka setiap kali saya perlu menemukan file, saya bisa menggunakan findstr. Ini berdetak menggunakan Pencarian Windows Explorer karena memungkinkan pencocokan ekspresi reguler di seluruh jalur. Sebagai contoh:

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

Ini adalah solusi yang sangat cepat untuk diatur, dan hebat jika Anda menemukan diri Anda dengan menginstal Windows baru dan tidak ada koneksi internet.

Jika Anda perlu mencari di dalam tipe file tertentu untuk beberapa pola, pertama-tama daftarkan semua file yang perlu Anda periksa, kemudian cari di dalamnya. Misalnya, untuk menemukan program Java atau Python yang membalik gambar Anda bisa melakukan ini:

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

8
Bung, ide yang bagus.
Epaga

10
Inilah yang dilakukan oleh program unix
Mark Baker

4
@Mark Yang menunjukkan bahwa bahkan jika Anda harus bekerja dengan Windows, Anda dapat mempelajari banyak hal berguna dari unix
Liam

1
Saya membuat salah satu skrip ini untuk folder "Documents" saya, yang sepertinya tidak pernah bisa saya atur :-)
sep332

1
dan di sana saya menggunakan pencarian Google Desktop: D
inspite

38

Saya memiliki skrip Python yang secara otomatis berjalan ketika saya mencolokkan kamera digital saya.

Ini menyalin semua gambar dari kartu di kamera, mencadangkannya, dan kemudian mengunggahnya ke Flickr.


Unggahan ke Flickr berasal dari uploadr.py (yang tidak bisa saya setujui untuk).

Berikut kode Python untuk membongkar kamera. Ini berulang melalui SRCDIR dan nama setiap gambar dengan tanggal & waktu sebelum menyalin gambar ke 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)

Bagikan kodenya, dan saya akan membagikan suara :)
Even Mien

40
Ini akan bekerja dengan baik sampai hari Anda melupakan foto-foto spesial yang Anda ambil malam sebelumnya ...
Ed Guiness

Hal yang lengkap sebenarnya adalah proses dua langkah. Langkah pertama membuang sesuatu dari kamera & menamainya kembali. Langkah kedua memiliki prompt yang menanyakan apakah Anda ingin mengunggah ke Flickr. Itu lebih karena mengunggah membunuh bandwidth saya daripada karena saya khawatir tentang apa yang saya unggah.
Mark Biek

5
Bagaimana Anda memicu bit 'run on plug in'?
ijw


32

Beberapa tahun yang lalu saya menulis aplikasi winforms dengan bantuan api win32 untuk mengunci diri saya sepenuhnya dari komputer saya selama satu jam sehingga akan memaksa saya untuk pergi dan berolahraga. Karena saya malas? Tidak ... karena saya punya tujuan kebugaran pribadi. Terkadang Anda hanya perlu sedikit tendangan untuk memulai :)


16

Saya menulis skrip Python yang akan pergi ke semua komik web yang saya baca, dan mengunduh komik baru. Saya hanya menjalankannya sekali sehari, dan tidak perlu mengunjungi setiap situs satu per satu, cukup kunjungi / Komik / Folder. ;)


hmmm. Jika ini adalah komik yang didukung iklan, saya akan khawatir bahwa Anda tidak "membayar" dengan mengambil risiko melihat iklan :-)
Matthew Scouten

2
@ Matthew - Saya mengerti maksud Anda, tetapi saya tidak mengerti mengapa tidak melihat iklan adalah masalah moral / etika. Jika demikian, penulis No-Script dan pemblokir pop-up memiliki banyak penjelasan untuk dilakukan. ;)
Onion-Knight

1
Saya tidak punya masalah dengan pemblokir pop-up, karena popup adalah cara yang kasar untuk menampilkan iklan. Ini bukan masalah moral, lebih merupakan masalah keadilan. Saya menggunakan adblocker di sebagian besar situs, tetapi matikan untuk situs tertentu yang sering saya kunjungi dan ingin dukung. Mengambil komik dengan skrip python (dan tidak pernah melihat situs sama sekali) terasa seperti itu bagi saya, tapi saya tidak bisa memberi tahu Anda dengan tepat di mana letak baris itu.
Matthew Scouten

14

Skrip cadangan .cmd saya. Ini berjalan di server saya setiap malam, dan memberi nama file cadangan sesuai dengan hari kerja. Satu minggu penuh cadangan telah menyelamatkan saya (dan keluarga saya) berkali-kali:

:: Argumen cadangan:
:: / V Verifikasi? (ya Tidak)
:: / R Membatasi akses ke pemilik? (ya Tidak)
:: / RS Penyimpanan yang dapat dilepas? (ya Tidak)
:: / Kompresi Perangkat Keras HC (hidup / mati)
:: / M Jenis cadangan (normal / salin / diferensial / inkremental / harian)
:: / L Jenis file log (f / s / n)
:: / D "Keterangan"
:: / J "Nama-pekerjaan"
:: / F "Nama-file"

SETLOCAL

:: pastikan drive jaringan dipasang
PANGGILAN C: \ bat \ configs \ MapShares-home.cmd
gema terus

atur hari ini =% DATE: ~ 0,3%
jika% hari ini% == Sen ditetapkan kemarin = 0Sunday
jika% hari ini% == Sel ditetapkan kemarin = 1 Senin
jika% hari ini% == Menetapkan kemarin = 2 Selasa
jika% hari ini% == Ditetapkan kemarin = 3 Rabu
jika% hari ini% == Fri atur kemarin = 4 Kamis
jika% hari ini% == Sat ditetapkan kemarin = 5Friday
jika% hari ini% == Matahari terbenam kemarin = 6Saturday

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

:: (mis: file Monday C)
atur judul =% kemarin% set cadangan


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

CALL BackupConfigs.bat

:: Buat file BKF baru
panggil C: \ WINDOWS \ system32 \ ntbackup.exe cadangan ^
    "@% configsDir% \ daily.bks" ^
    / V: ya / R: tidak / RS: tidak / HC: off / M normal / L: s ^
    / D "% title%" ^
    / J "% title% .job" ^
    / F "% storePath% \% kemarin% .bkf" ^
    >> "% storePath% \% kemarin% _backup.log"

echo% DATE%% TIME% Selesai >> "% storePath% \% kemarin% _backup.log"

salin "% storePath% \% kemarin% .bkf" "V: \ Backups \ NEPTUNE"

PANGGILAN C: \ bat \ clean-temps.bat

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

:: tampilkan direktori cadangan
start / D "C: \ bat \ Backups \" checkbkf.bat

ENDLOCAL

::berhenti sebentar


2
Beberapa trik file .cmd yang bagus di sana. Saya tahu Anda bisa menggunakan '^' untuk menghindari pengalihan dan pipa, tapi saya tidak tahu Anda juga bisa menggunakannya sebagai kelanjutan garis. Keren :)
Patrick Cuff

Dunia membutuhkan lebih sedikit skrip .bat, tidak lebih! :-)
JesperE

2
Dan akibatnya adalah bahwa dunia membutuhkan lebih sedikit Windows. Sampai saat itu, ini adalah penyebut yang paling tidak umum. Saya membagikan skrip ini karena jutaan orang dapat menggunakannya, sebagaimana adanya.
Chris Noe

14

"backup.sh" yang memecah isi direktori dan mengirimkannya ke akun gmail saya.


Nah, itu keren. Meskipun saya tidak memiliki komputer dari puluhan saya yang memiliki pengaturan smtp. Dengan sedih.
mxcl

Bisakah kita memiliki kodenya?
Kostas

14

Saya menulis naskah yang akhirnya digunakan setiap hari di tim saya. Ketika saya dulu bekerja untuk Intel, kami memiliki aplikasi yang berbicara dengan basis data akses untuk mengambil setumpuk informasi register (saya bekerja pada memvalidasi chipset). Itu akan mengambil informasi ini (dari permintaan SQL) dan membuangnya ke file CSV, file HTML, dan file Excel. Seluruh proses memakan waktu hampir 2 jam. Tidak bercanda. Tidak tahu mengapa butuh waktu lama. Kami akan memulainya satu jam sebelum makan siang, pergi makan siang, dan kemudian kembali.

Saya pikir harus ada cara yang lebih baik untuk melakukan ini. Saya berbicara dengan tim yang mengelola database registri dan mendapatkan kode SQL dari mereka. Saya kemudian menulis skrip perl yang mengambil data dan menghasilkannya menjadi format CSV, HTML, dan Excel. Runtime? Sekitar 1-2 detik. Peningkatan kecepatan yang luar biasa.

Saya juga menulis beberapa naskah saat saya ditempatkan di Irak pada tahun 2006 (saya bertugas di Garda Nasional selama 9 tahun - keluar pada bulan Desember). Kami menggunakan aplikasi lama ini yang disebut ULLS-G (Unit Level Logistics System - Ground) yang ditulis dalam ADA dan awalnya dijalankan pada DOS. Mereka cukup meretasnya ke tempat itu akan berjalan pada Windows XP di shell perintah. Sistem ini tidak memiliki antarmuka mouse. Semuanya melalui keyboard dan tidak memiliki fungsi batch. Jadi katakanlah Anda ingin mencetak lisensi untuk semua operator kendaraan? Ya ... kami punya 150 tentara di unit kami jadi butuh waktu yang lama. Katakanlah semua orang mendapatkan kualifikasi pada kendaraan baru dan Anda ingin menambahkannya ke kualifikasi operator semua orang? Anda harus melakukannya satu per satu.

Saya dapat menemukan driver ODBC untuk database SAGE (apa yang digunakan ULLS-G) dan jadi saya menulis skrip perl yang dapat berbicara dengan database SAGE. Jadi hal-hal yang memakan waktu lebih dari satu jam, sekarang hanya butuh beberapa detik. Saya juga menggunakan skrip dan driver untuk melaporkan. Kami harus melaporkan semua informasi hingga ke batalion setiap pagi. Unit lain akan menulis informasi dengan tangan setiap pagi. Saya menyiapkan makro Excel yang berbicara menggunakan driver yang sama dan berbicara dengan database SAGE dan memperbarui spreadsheet Excel dengan cara itu. Ini adalah makro Excel yang paling rumit dan satu - satunya yang pernah saya tulis. Itu terbayar karena mereka memberi saya Medali Penghargaan Angkatan Darat. Jadi ya, saya mendapat medali di militer untuk menulis skrip perl :) Berapa banyak yang bisa mengatakan itu? ;)


13

Saya seorang pilot pribadi. Saya menulis beberapa skrip yang memperoleh informasi cuaca untuk bandara lokal dari aviationweather.gov. Mereka berguna untuk jawaban cepat untuk pertanyaan "Apakah hari ini hari yang baik untuk terbang?"


Saya berharap bagi penumpang Anda bahwa skrip Anda akan gagal dengan baik jika aviationweather.gov mengubah tata letaknya dan merusak parser Anda!
MatthieuP

1
Bisakah Anda membagikan skripnya?
JJD

12

Skrip Greasemonkey yang menghapus komentar [*] yang jelas bodoh dari situs game Kotaku.com.

[*] Seperti yang diidentifikasi oleh kesalahan ejaan umum, penulisan lengkap, penggunaan berlebihan "LOL" dan heuristik serupa.


6
Keren. Saya ingin mengekstrak regexp, dan menghasilkan pernyataan acak yang hanya terdiri dari ekspresi yang cocok dengan satu atau lebih dari itu.
gnud

11

alias dir = 'ls -al' adalah skrip favorit saya.


4
eww ... Saya sering menemukan diri saya ingin pergi ke arah lain ...
menggigil 42

1
Anda harus bertanya-tanya mengapa orang mulai memilih jawaban untuk pertanyaan dengan tag subyektif .... apa gunanya?
Greg Whitfield

Ya, ini penting :)
Nick

11

Scraper HTML berulir untuk mengunduh semua subtitle yang tersedia untuk film seri / dari sebuah situs yang menyakitkan untuk digunakan (Anda harus mengklik seperti 4 kali setelah pencarian untuk sampai ke halaman unduh, hanya untuk menampilkan lebih banyak iklan). Sekarang saya tinggal memasukkan kriteria pencarian dan tekan unduh.


2
Dia akan membagikannya, dan situs akan mengetahuinya :). Lebih baik tidak berbagi kadang-kadang ...
Camilo Díaz Repka

11

Skrip perl yang mengikis Craigslist lokal saya, berdasarkan kategori yang dipilih, ke SQL DB yang kemudian dapat saya tolak.

V2 ini memperbarui DB dengan timer dan mengingatkan saya jika saya memiliki kecocokan pada salah satu pertanyaan, pada dasarnya memberi saya agen latar belakang untuk CL.


8

Mengganti nama file secara massal melalui drag & drop.

Beberapa waktu yang lalu saya telah membuat VBScript kecil yang menerima RegEx dan menggantikan nama file yang sesuai. Anda cukup menjatuhkan banyak file atau folder di dalamnya. Saya menemukan itu sangat berguna sepanjang tahun.

gist.github.com/15824 (Hati-hati, komentarnya dalam bahasa Jerman)


Tampaknya konyol untuk memilih kode deskripsi sans.
Chris Noe

Kode ini akan terlalu banyak untuk situs web. Mungkin "kecil" sedikit meremehkan. Ini 170 LOC.
Tomalak

Saya dapat mengunggah skrip ke suatu tempat dan memposting tautan di sini jika Anda tertarik.
Tomalak

8

Skrip Python Cepat dan Kotor yang mencari DNS untuk google.com setiap 5 detik dan berbunyi bip sekali jika berhasil dan dua kali jika gagal.

Saya menulis ini pada saat saya harus hidup dengan jaringan rumah yang sangat rapuh. Itu memungkinkan saya untuk langsung mengetahui keadaan jaringan bahkan ketika saya pertama kali berada di bawah meja di seberang ruangan dengan kedua tangan penuh dengan kabel jaringan dan senter di mulut saya.


5 detik? Pasti sangat menyebalkan.
Ponkadoodle

Ya, itu membuatku kelelawar setelah sekitar 30 menit. Idenya adalah untuk sedekat mungkin dengan umpan balik waktu nyata. Saya biasanya bisa memperbaiki keadaan dalam waktu sekitar 10 menit.
Matthew Scouten

8

Ini, dari posting di blog saya beberapa bulan yang lalu, telah berubah dari gagasan yang saya pikir keren untuk salah satu peretasan kecil terbaik yang saya batuk dalam memori baru-baru ini. Saya mengutipnya secara lengkap di sini:

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

Saya menghabiskan banyak waktu di bash. Untuk yang belum tahu, bash adalah sistem yang akan Anda temukan di sebagian besar mesin unix dan, untungnya, beberapa jendela dan setiap Mac di luar sana. Pada blush on pertama, itu tidak lebih dari antarmuka baris perintah, dan karena itu dari radar sebagian besar pengguna yang melihat hal-hal seperti anakronisme yang mereka lebih suka lupa.

Saya melakukan hampir semuanya dalam bash. SAYA BACA EMAIL SAYA DARI LINE PERINTAH, itulah sebabnya saya menghindari email yang ditandai. Saya menavigasi direktori, mengedit file, terlibat dalam checkout dan pengiriman kode sumber harian saya, mencari file, mencari di dalam file, me-reboot mesin saya, dan bahkan kadang-kadang menelusuri halaman web dari baris perintah. bash adalah jantung dan jiwa dari keberadaan digital saya.

Masalahnya adalah saya cenderung memiliki sekitar 6 jendela terbuka pada suatu waktu. Di tempat kerja hari ini, saya punya satu yang menjalankan server web, yang lain mengutak-atik basis data saya, yang ketiga, keempat, dan kelima mengedit file yang berbeda, sementara yang keenam sedang mencari-cari di mesin saya mencoba untuk merekam nama-nama setiap file pada sistem. Mengapa? Karena itu berguna untuk dapat mencari melalui arsip seperti itu jika Anda ingin tahu di mana menemukan objek dengan nama file.

Ketika Anda melakukan ini, Anda berakhir dengan banyak jendela di bilah kontrol Anda dengan nama sederhana, "bash." Ini baik-baik saja jika Anda hanya memiliki satu dari mereka, tetapi penderitaannya ketika Anda memiliki 6 atau lebih .... dan dua lusin hal lain terjadi. Saya memiliki tiga monitor di bawah perintah simultan dari satu pasangan keyboard / mouse dan saya masih merasa perlu untuk lebih. Masing-masing windows memiliki beberapa terminal bash terbuka.

Jadi saya telah mencelupkan ini bersama. Pertama, tempatkan baris ini di .bash_profile Anda:

  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

Saya telah meneliti dan menulis lusinan paragraf tentang bagaimana semua ini bekerja dan mengapa itu diatur sebagaimana mestinya, tetapi Anda tidak benar-benar tertarik. Percayalah kepadaku. Ada seluruh bab buku tentang mengapa saya melakukan "CMD = ...; echo ..." di baris ketiga itu. Banyak orang (termasuk bluehost, tempat domain saya lainnya dihosting) masih menggunakan dan versi lama dari bash dengan bug utama dalam cara menangani jebakan, jadi kami terjebak dengan ini. Anda dapat menghapus CMD dan menggantinya dengan $ BASH_COMMAND jika Anda saat ini pada versi bash Anda dan merasa ingin melakukan penelitian.

Bagaimanapun, skrip pertama yang saya gunakan ada di sini. Ini menciptakan prompt yang bagus yang berisi nama dan direktori mesin Anda, dipotong dengan panjang yang masuk akal:

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

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

Ada peringatan di bagian atas posting blog ini yang harus Anda baca sekarang sebelum mulai mengajukan pertanyaan bodoh seperti, "Mengapa Anda tidak menggunakan variabel lingkungan HOSTNAME melalui @ENV?" Sederhana: Karena itu tidak berfungsi untuk semua sistem yang saya coba.

Sekarang untuk bagian yang sangat keren. Ingat baris 3 dari penambahan .bash_profile?

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

Ini membuang hasil skrip trim.pl dalam wadah yang sama seperti sebelumnya, mencetak ke prompt perintah dan judul jendela, tapi kali ini menambahkan perintah yang baru saja Anda ketik! Inilah sebabnya mengapa Anda tidak ingin melakukan semua ini di .bashrc: skrip apa pun yang Anda jalankan (di komputer saya, man adalah salah satunya) akan memicu hal ini di setiap baris. hasil manusia menjadi kacau serius oleh apa yang kita lakukan di sini. Kami tidak benar-benar bermain baik dengan terminal.

Untuk mengambil perintah yang baru saja Anda ketik, kami mengambil sejarah bash dan memotongnya sedikit:

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

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

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

Jadi sekarang, saya memiliki bazillion windows dan mereka mengatakan hal-hal seperti:

  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/

Dari bilah kecil yang bahagia di bagian bawah layar, sekarang saya bisa tahu mana yang sekilas. Dan karena kami telah menetapkan PS1, segera setelah perintah selesai dijalankan, nama perintah diganti dengan hanya output dari trim.pl lagi.

UPDATE (hari yang sama): Hal-hal ini (entri .bash_profile) meletakkan semua jenis neraka pada saya ketika saya mencobanya di .bashrc saya. .Bashrc Anda dijalankan oleh skrip non-interaktif setiap kali Anda memanggil bash sebagai bahasa. Saya memukul ini ketika saya mencoba menggunakan pria. Semua jenis sampah (teks lengkap .bashrc saya, plus charecters melarikan diri) muncul di bagian atas halaman manual. Saya akan menyarankan untuk menguji permata ini dengan doa cepat 'man man' di baris perintah setelah Anda mengumpulkan semuanya.

Saya kira sudah waktunya bagi saya untuk mengeluarkan sampah kustom dari .bashrc saya dan meletakkannya di tempatnya ...

Secara paksa, saya menemukan diri saya mengetik 'man trap' pada satu titik dalam proses ini.


8

Di tempat kerja saya sebelumnya, jam kerja konyol. Itu adalah perusahaan perangkat lunak dan bos saya tersedot. Dia akan memberi kita pekerjaan tepat sekitar jam 5:30 sore (tepat ketika tiba waktunya untuk pulang) dan membuat kita menyelesaikan pekerjaan sampai jam 11 malam (melewati jam produktif ideal kita). Atau dia akan menemukan masalah yang mengganggu dalam kode yang masih dalam proses.

Jadi saya membuat file batch dan skrip yang akan mematikan komputer saya secara acak antara 19:00 dan 20:00. Itu memiliki timer 1 menit kalau-kalau saya akan tinggal setelah jam dan perlu membatalkan proses penutupan.

Tapi aku akan meninggalkan mejaku sebelum jam 17:00 sehingga dia tidak bisa menemukanku untuk menjagaku jika dia ingin membuang waktu di checkout. Jika dia datang ke meja saya dan melihat komputer saya menyala, dia akan berpikir saya masih di sekitar area dapur atau di minimart terdekat untuk mengambil beberapa chip atau sesuatu. Tetapi jika itu mati sekitar waktu itu, dia akan menelepon ponsel saya dan memberitahu saya untuk kembali ke kantor.

Saya juga menjadwalkan BIOS pada mesin saya untuk menghidupkan mesin saya sekitar 8:00 atau 9:00 jika saya merasa malas dan ingin berjalan-jalan di sekitar 10:00 atau 11:00. Jika saya ketahuan berjalan ke meja saya, dia akan bertanya "di mana Anda sepanjang pagi?" Dan saya akan berkata, "Saya sedang rapat dengan tim pemasaran." atau "Aku sedang keluar sarapan."

anjing bodoh


7

Saya dulu bekerja di sebuah kamp teknologi musim panas, dan kami harus menulis artikel ini untuk masing-masing anak dalam kelompok pada akhir minggu, yang kemudian akan mereka terima dan bawa pulang sebagai kenang-kenangan. Biasanya, ini terdiri dari banyak kalimat umum, dan satu hingga dua kalimat yang dipersonalisasi. Saya menulis skrip python yang membangun salah satu tulisan ini dari tumpukan kalimat kalengan, dan memungkinkan pengguna untuk menambahkan beberapa kalimat yang dipersonalisasi di tengah. Ini menghemat banyak waktu bagi saya dan para penasihat saya yang saya rahasiakan. Meskipun begitu banyak yang diotomatisasi, tulisan kami masih terlihat lebih baik daripada banyak yang 'jujur', karena kami dapat meluangkan lebih banyak waktu ke bagian-bagian yang dipersonalisasi.


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

Sebuah skrip kecil yang memantau beberapa situs web populer untuk iklan yang sesuai dengan keahlian saya dan mengirimi saya email email.


6

Saya menggunakan ini sebagai fungsi autoloaded. Saya cukup mengetik "mycd" dan daftar direktori muncul yang sering saya gunakan. Jika saya tahu maka nomor saya hanya bisa mengatakan sesuatu seperti "mycd 2". Untuk menambahkan direktori ke daftar Anda cukup ketik "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

}

Ketika saya menjalankan "mycd", saya mendapatkan: "-bash: print: command not found". Ketika saya menggunakan "mycd / folder /", itu tidak menambahkan apa pun ke /tmp/mycd.txt. Apakah saya memiliki beberapa pengaturan yang salah?
Léo Léopold Hertz 준영

Ah, ya, Anda mungkin ingin mengganti pernyataan 'cetak' dengan 'gema'. ;-)
wzzrd

@wzzrd Bagaimana memalukan;) Fungsi yang sangat keren, @Ethan Post. Terima kasih sudah berbagi!
Léo Léopold Hertz 준영

5

Saya suka menyimpan foto saya di direktori berdasarkan tanggal pengambilan gambar. Oleh karena itu saya menulis sebuah program yang akan memindai kartu memori untuk gambar, membuat folder pada hard disk saya yang perlu didasarkan pada tanggal gambar, lalu salin.


Ingin menambahkan skrip di sini? Saya akan menyukai fungsi ini, saya melakukan hal yang sama!
Firaun

Ini ac # app, bukan skrip yang saya khawatirkan.
Valerion

Apakah Anda menggunakan informasi exif yang disimpan dalam foto? Bisakah Anda membagikan skripnya?
JJD

5

Tulis skrip untuk mengklik tombol mulai saya, lalu klik lagi dalam setengah detik, dan ulangi setiap 30 detik.

Buat saya tetap ditandai Online saat bekerja, dan saya bisa menyelesaikan pekerjaan nyata di laptop pribadi saya tepat di sebelahnya. Tidak macet oleh perangkat lunak kerja.

Jangan bilang bos :)


Ha ha ha, barang bagus. +1 untuk kejujuran dan ketidakjujuran! :)
Kyle Walsh

4

Berbagai Pintasan untuk perintah "mulai bersih" dan "berhenti bersih" sehingga saya dapat memulai dan menghentikan layanan tanpa harus masuk ke Layanan MMC


4

Script shell untuk melakukan rotasi cadangan menggunakan rsync. Ini juga mendukung pelaksanaan program anak yang sewenang-wenang untuk mendukung kegiatan pra-cadangan lainnya (misalnya mengunduh bookmark yang lezat).

http://gist.github.com/6806


4

Aplikasi kecil yang meninggalkan klik (atau klik dua kali) setiap "X" ms untuk jumlah waktu "Y". Tidak perlu lagi burung peminum itu bekerja di pembangkit listrik tenaga nuklir! ;)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.