Unix'te tarihe anında nasıl erişilir?


12

Örneğin,

mkdir thisismyfolder912

Geçiş yapmaktan thisismyfolder912daha kolay bir yol olduğunu hatırlıyorum

cd thisismyfolder912

Bu yol nedir ve nasıl çalışır? Ayrıca, bunu kullanmanın diğer yolları nelerdir?


1
Son geçmiş listenizde olmayan komutlar ve dizinler için SEKME tamamlamayı kullanın. cd this<TAB>
tersine çevir

Yanıtlar:


10

Klasik tarihin genişletilmesinden veya Readline işleminden mi bahsediyorsunuz? cd !$bir sonraki giriş satırında bir önceki satırın son bağımsız değişkeninin yerine geçecek M-.veya M-_Readline'ı kullanarak çekecektir.


1
Alt + 'ı tartışan başka bir soru üzerine yayın yapın.
Michael Mrozek

Arıyordum cd !$. "Klasik tarih genişletme veya Readline işleme" Ne demek istediğinizi tam olarak anlamıyorum ...
Lazer

2
@Lazer !$bir tarih genişlemesidir ; kabuk komutunuzu ayrıştırırken işler. M-. bir readline tuş vuruşu; readline, bastığınız her tuşu işleyen kütüphanedir ve M- tuşuna bastığınızı görür. ve sizin için son komutun son argümanında otomatik olarak
yazıyor

9

Sorunuz komut geçmişine erişmekse, bu iyi adlandırılmış komutu deneyin

history 

Ayrıca Ctrl+ ' ryı deneyebilir ve yakın zamanda yazdığınızı hatırlamaya çalıştığınız bir komutu yazmaya başlayabilirsiniz.

(reverse-i-search)`cd ': cd mydir/data/

ESCKomutu seçmek veya çıkmak için tuşuna basın . Bu benim için en azından SuSE'de işe yarıyor; diğer dağıtımlardan emin değilim.


4
VAY! Bu aslında hayatımı değiştirecek. Siktir history | grep ...!
Oli

Bu sadece SuSE ile ilgili değil, bash bir özellik olduğunu düşünüyorum :)
sakisk

viKomut satırınızı yönetmek için kullanmayı okudum . Süper havalı görünüyor. kabuk komutlarını düzenlemek için vi kullanarak
Banjer


2

bu her zaman benim için çalıştı:

mkdir thisismyfolder
cd $_

Bununla birlikte, buna dikkat edin: $!gerçekten yazdığınız son kelimeye $_genişler , genişletmeden sonra son kelimeye genişler - böylece echo /tmp/tmpfile*kaldırmak istediğiniz bir grup dosyayı görebilirsiniz ve sonra rm $_yalnızca birini kaldırabilirsiniz.
jmb

1

Eğer koyarsanız, başka bir iplikten bir ipucu almak:

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

sonra .bashrc'nizde geçmişinizden bir şey yazmaya başlayabilir ve ardından yukarı oka basabilir ve daha sonra geçmiş öğenizi her öğeye bakmak yerine, halihazırda yaptığınız şeyle başlayan önceki girişlere atlayabilirsiniz. yazdınız.

Sanırım bu, soruda verilen belirli örnekle pek yardımcı olmuyor, ancak tarihe anında erişmeme yardımcı olan bir şey.


1

Eğer bash kullanırsanız pushdve öneririm popd. Bir dizin yığını oluşturabilir ve ona hızla göz atabilirsiniz. Bu örneğe bakın:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$

Kısaltılmış bir bilgi istemi kullanırsanız mesajlar daha okunabilir hale gelir. (Kullanıcı ve ana bilgisayar adlarını kaldırmaya atıfta bulunuyorum. PWD'yi göstermek yerine sadece $göstermenin yararlı olduğunu anlıyorum pushd.)
sonraki duyuruya kadar duraklatıldı.

1

İlgili bir notta, bash içinde histverify kullanmanızı öneririz. Bunu ~ / .bashrc'nize koyun:

shopt -s histverify

Bu, bash! $ Veya diğer geçmiş işlevlerini genişlettikten sonra komutu yazdırmasına neden olur ve gerçekten çalıştırmak için enter tuşuna basmadan önce ona bakma şansı verir. Benim için, akıl sağlığı kontrolü ara sıra ekstra tuşa basmaya değer. cd fooKomutu değil, komutu çalıştırdığımdan emin olmak istiyorum rm -rf foo...

Ctrl-RYaklaşımın yanı sıra sık sık kullanıyorum Alt-.(ki bu tarif ettiğiniz senaryo için çok uygun). Ben zaman zaman! $ Kullanacağım.

Bunlar çok faydalı genel amaçlı tekniklerdir.

Ancak özel sorunuza yanıt vermek için:

Bir dizin oluşturmak ve doğrudan içine cd'ing o kadar yaygın bir kombinasyon ki onu sarmak için bir fonksiyona sahip olmak yararlıdır ..

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Kullanımı: mcd thisismyfolder


1

Kabuğunuz readline kullanıyorsa (durum böyle bash) ATL+ .birlikte basmak gibi bir şey yapabilirsiniz ?

Gönderen GNU Readline belgelerinde :

yank-last-arg (M-. veya M-_)

Son argümanı önceki komuta (önceki geçmiş girdisinin son sözcüğü) ekleyin. Bir argümanla, yank-nth-arg gibi davranın. Yank-last-arg öğesine yapılan ardışık çağrılar geçmiş listesinde geriye doğru hareket eder ve her satırın son argümanını sırayla ekler.

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.