Yaygın bash komut setlerini (örn. Dosyadaki metni bulmak için “find”, “xargs” ve “grep”) nasıl hatırlayabilirim?


3

Bash kullanıcı deneyimimi özelleştirmek için, yaygın komut kümelerini geri çağırmak için .bashrc kullanmanın bir yolu var . Örneğin, metin dosyalarında bir arama dizesi bulmak için bu komut kümesini buldum,

find /directory -type f -print0 | xargs -0 grep -i 'search string'

Bunu `grepfindfile gibi özel bir takma adla hatırlayabilmek ve bash ile gösterilen yukarıdaki komut kümesini , son komutun tarihe çekildiği gibi görüntülemek istiyorum.

Yoksa bir çeşit bash betiği mi oluşturmam gerekir ? Bashrc dosyaları gibi, komut satırı kullanıcıları verimlilik komut dosyalarını paylaşır mı? Onları nasıl çağırıyorlar? En sevdiğim bash widget'ları ?

-

CF. VIM için burada sorulan aynı tür sorun vim'deki bir bul ve değiştir komutu için nasıl kısayol oluşturabilirim?

Yanıtlar:


0

.Bashrc'de şöyle bir işlev oluşturabilirsiniz:

searchString ()
{
  if [ "$1" ] ; then
    find /directory -type f -print0 | xargs -0 grep -i "$1"
  else
    echo "usage ..."
  fi
}

3

Eski moda yol için oy kullanırdım: Giriş dizininizde bir bin dizini oluşturun ve onu PATH'a ekleyin (eğer bir ~/binoturum açma bulursanız bazı dağıtımlar bunu varsayılan olarak yapar). Sonra orada yararlı bulabileceğiniz herhangi bir komut dosyaları oluşturun.

Niye ya?

  1. Diğer adlar ve kabuk işlevlerine sahip olmak güzeldir, ancak genellikle onları yalnızca Kabuğun kendisinde bulundurursunuz. Bunları diğer programlardan (xargs gibi) veya mermilerden arayamazsınız. Komut dosyalarında öyle değil. Bunları kısıtlama olmadan başka bir UNIX komutu gibi çağırabilirsiniz. #! / Bin / usedshell ile kodlanmışsa, mevcut kabuk önemli değildir ve onlar da başka bir kabuktan çağrılabilir.

  2. Biri,.

  3. Diğer kullanıcı ortamlarında çalışmak zorundaysam, diğer ortam ayarlarını değiştirmek zorunda kalmadan sadece bin dizinimi PATH dizinine ekleyerek komut dosyalarım hemen kullanılabilir olur.

Yeni başlayanlar için ek not:

Gerçekten basit işler için çok fazla kolaylık komut dosyası veya diğer ad oluşturmayın. Kendi senaryolarınızı hatırlamanın, dayandıkları unix komutlarını hatırlamaktan daha zor olduğu bir zaman gelecek :-)


Kendi fonksiyonumu hatırlama konusunda düşündüğüm aynı düşünce için +1, komutları kendi öğrenmeye göre değişiyor. Hangi çözümü uygulamak istediğime işaret ediyor, komutları hatırlamama ve maksimum güçle ezberlememe yardımcı oluyor!
xtian

1

Genellikle bu komutları ~ / bin dizinindeki bash scriptlerine koyarım. Komut dosyalarını işlevlerden daha iyi kullanmayı seviyorum, çünkü bir komut dosyası tüm açık kabuklarımda hemen görülebilir.

Bu kadar sık ​​kullanmadığım ya da her seferinde değişiklik yapmam gereken komutlar için grep kullanarak aradığım bir komut satırı dosyasına sahibim, sonra sadece ekrandan komut satırına kopyalayıp yapıştırın.

Ayrıca çok büyük bir bash geçmişi dosyası tutuyorum, böylece komutları kullandıktan sonra en az bir hafta boyunca tarihin kullanımına açık olacak. Aynı komutu sık sık hatırladığımı tespit edersem, bir komut dosyasına koyarım.

Bu çözümühistory -s bash geçmişinize komut eklemek için bash komutunu kullanan süper kullanıcı başka bir yerde keşfettim . Bu çözüm muhtemelen ilk isteğinize en yakın olanıdır.


Körü körüne açıkça görebildiğim için +1, daha önce topladığım komut setlerinin dosyalarında grep kullanılmasını tavsiye eder.
xtian

1

Kısaltarak başlayın

grep -ir 'search string' /directory

-rSeçenek özyinelemeli modu içindir.

:-)


Genel olarak, komutları kısaltmanın üç yolu vardır.

  1. Takma adlar : çok basit, yalnızca bir komutun değiştirilmesine izin verir. Koymak olabilir ~/.bashrc:

    alias ll="ls -lFh"
    alias md="mkdir"

    artıracağı ll ~/musiciçin ls -lFh ~/music.

    Diğer adların da avantajları vardır - satır içi olarak genişletilebilirler; sadece bunun için bir klavye kısayolu yapılandırmanız gerekir. Örneğin, ~/.inputrcşunları içine koyun :

    "\e[1;3C": alias-expand-line

    Bu anahtara karşılık gelir AltRight →.

  2. Daha karmaşık bir şey için (çoklu komut, argüman) - fonksiyonlar standart sözdizimi özelliklerinin kullanılmasına izin verir; ayrıca ~/.bashrc:

    count() {
        sort "$@" | uniq -c | sort -n -r
    }

    Bunlar birden fazla komut içerebilir, değişkenleri ayarlayabilir, koşullara sahip olabilir ... bir kabuk betiğinde yapabileceğiniz her şeyi. Ancak, satır içi genişlemesi mümkün değildir.

  3. Dış komut dosyaları - neredeyse işlevlerle aynıdır, ancak foo() { ... }ayrı bir dosyada ve olmadan . ( ~/binpopüler bir yer.)

    #!/bin/bash
    post() { curl -sF "sprunge=<$1" http://sprunge.us/; }
    
    if [ -z "$1" ]; then
            file=$(mktemp /tmp/sprunge.XXXXXXXX)
            cat > "$file"
            if [ -s "$file" ]; then
                    post "$file"
            else
                    echo "stdin empty" >&2
            fi
            rm -f "$file"
    else
            for file; do
                    echo -n "$file →"
                    post "$file"
            done
    fi

    Komut dosyalarını ayrı dosyalara koymanın avantajı şudur: bashÖzelliklerle sınırlı değildir . Olmuştur birçok Ben ile başladı durumlardır bashsonra, komut Python yeniden yazdım daha sonra Perl oldu ...


+1 Kapsamlı genel bakış için. Bu, şu an için bash betiğine dayanmaya devam edeceğimi doğrulamak için mesafe kat ediyor, çünkü eğer sadece []; o zaman başka fiil PHP aklıma garip olmak.
xtian

Tamam, sadece PHP'yi yaz o zaman. #!/usr/bin/env php...
grawity

Hey, aklımı başımdan alıyorsun. PHP'yi bash komutlarıyla kullanabilir miyim? Ve, yazdırmak için baskı / yankı?
xtian

CLI sürümünü yüklediğiniz sürece, evet. Örnek. Ama bu biraz sınırlı.
Grawity

1
Oh, ve lütfen gereksiz xargs yerine grep -rde dikkat edin find ... -exec.
Grawity
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.