Xth dizini terminaline değiştir


0

Bir unix kabuğunda (özellikle Ubuntu) dizini ls komutundan basılan xth dizine dönüştürmenin bir yolu var mı? Bir dizini birden fazla yolla sıralayabileceğinizi biliyorum, ancak xth dizinini almak için ls çıkışını kullanarak?

Örnek bir kabuk:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

nerede 3 (veya 2 uygun dizi biçiminde) geçerek third_really_long_and_complex_dir içine taşımak istiyorum. Basitçe kopyalayıp yapıştırabileceğimi biliyorum, ancak klavyeyi zaten kullanıyorsam, "cdls 2" gibi bir şey veya dizini bilseydim böyle bir şey yazmak daha kolay olurdu.

GÜNCELLEŞTİRME

Bunu hala gören herkes için, linux / bash için gerçekten yeni olduğumda ve sekme tamamlama diye bir şey olduğunu anlamadığımda, bu soruyu tekrar yarattım.

Yanıtlar:


0

cdEtkileşimli bir oturumdaki asıl sorun, genellikle komut istemini işleyen kabuğun geçerli dizinini değiştirmek istediğinizdir. Bu, herhangi bir cdçağrı ana kabuğu etkilemeyeceğinden bir alt kabuğun (örneğin bir komut dosyasının) başlatılmasının bir faydası olmayacağı anlamına gelir .

Hangi kabuğu kullandığınıza bağlı olarak, bunun için bir işlev tanımlayabilirsiniz . Örneğin bash:

function cdls() {
    # Save the current state of the nullglob option
    SHOPT=`shopt -p nullglob`

    # Make sure that */ expands to nothing when no directories are present
    shopt -s nullglob

    # Get a list of directories
    DIRS=(*/)

    # Restore the nullblob option state
    $SHOPT

    # cd using a zero-based index
    cd "${DIRS[$1]}"
}

Bu örnekte ben kesinlikle çıktısını ayrıştırmak için çöp unutmayın ls, bir takım nedenlerden için . Bunun yerine kabuğun kendisinin bir dizin listesi almasına izin verdim (veya dizinlere bağlantılar) ...

Bununla birlikte, bu işlevi (veya bu etki için herhangi bir şeyi) kullanmanın rmyanlış bir dizine geçtikten sonra kullanmak gibi muazzam bir karışıklık için kendinizi ayarlamanın çok iyi bir yol olduğunu düşünüyorum. Dosya adı otomatik tamamlama işlemi zaten tehlikelidir, kendinizi saymaya zorlamadan ...


Bu zekice benim sistemde çalışıyor. Teşekkür ederim

1

Bunun için bir fonksiyonum var:

   cdi işlevi. {
       IFS = $ '\ n'
       PAGE = $ {1: -1}
       LPP = $ {2: -11}
       ilk = $ ((1 + LPP * SAYFA - LPP))
       son = $ ((LPP * SAYFA))
       $ içindeki cd_into öğesini seçin (bulun.
             sed -n $ önce, $ {last} p);
       yap
           ÇIKIŞ = 1;
           eğer [[$ REPLY == n]]; sonra PAGE = PAGE + 1; cdi. $ PAGE $ LPP; ÇIKIŞ = $?
         elif [[$ REPLY == p]]; sonra PAGE = PAGE-1; cdi. $ PAGE $ LPP; ÇIKIŞ = $?
         elif [[$ REPLY == m]]; sonra LPP = LPP * 2; cdi. $ PAGE $ LPP; ÇIKIŞ = $?
         elif [[$ REPLY == l]]; sonra LPP = LPP / 2; cdi. $ PAGE $ LPP; ÇIKIŞ = $?
         elif [[$ REPLY == q || $ REPLY == 0]], ardından 0; fi

           eğer [$ EXIT -eq 0]; sonra 0 döndür; fi

           cd_into = $ {cd_into // \ ~ / $ ANA}
           if [-d "$ cd_into"];
               cd "$ cd_into"; 0 döndür; Başka
               echo "ayy! '\ cd_into' bir klasör değil
           fi
       tamam
       IFS’i bozmak
   }

Kullanmak:

$ cdi.
1) .mozilla.new 3) .wt 5) tmp 7) .vim 9) .ssh
2). Kırılma-saldırı 4) Yüklemeler 6) .Eterm 8) .Dondurulmuş kabarcık 10) .irssi
Hangi #?:
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.