Bir unix komutunun sonuçlarını tcsh CLI'ye nasıl eklerim?


0

Sık sık kendime tarih damgalı dosya ve klasörler oluşturmak istediğimi fark ediyorum.

Örneğin, "160408-projectA" adlı bir yymmdd datestamp ile bir klasör oluşturabilmek isterdim:

mkdir <ctrl-;>-projectA

Kullanmayı denedim bindkey -cs '^;' '`date +%y%m%d | perl -pe chomp`'

... ancak "bad key spec ^;" yazıyor. Hatta başka bir anahtara bile geçiyorsunuz. O, "160408: Komut bulunamadı." ile hata veriyor.

Bu tcsh ile mümkün mü?


Ugh. Bu mümkün geliyor; Muhtemelen çözebilirsin. Bununla birlikte, 160408 gibi bir numara listeniz varsa, aradığınız yarı otomasyondan daha iyi bir yaklaşımın olduğunu unutmayın. Daha iyi bir yaklaşım, tam bir otomasyon oluşturmak için programlama becerisini kullanmak, gerektiğinde listeden okumaktır. Sık sık, insanlar geri adım atıp daha ideal olanı düşünmek yerine, görebilecekleri ilk çözümle ilerlerler. Teoride, bu ne kadar otomatikleştirilebilir? Adım seriniz tam olarak tanımlanmışsa, bu genellikle bir program tarafından yapılabilir.
TOOGAM

"160408" nin bir yymmdd randevu kartı olduğu açıklığa kavuşturuldu. @TOOGAM, neyi kastettiğiniz "list" olduğundan emin değil. Ve buraya sormadan önce bir süre daha anlamaya çalıştım. ;)
Bryan

Yanıtlar:


0

Bundan şüpheleniyorum Ctrl - ; mümkün değil. Neden olmaya başlamadan önce, neyin mümkün olduğunu tartışmama izin verin.

bindkey -s '^;' '`date +%y%m%d | perl -pe chomp`'

Sadece kullanmaya çalıştığınız girişimi "c" yi alın Ctrl - O ve iyi çalışıyor.

tcsh komut muhtemelen desteklemiyor Ctrl - ; ki bu çok mantıklı bir tasarım, çünkü tcsh geleneksel bir Unix terminali (veya benzer şekilde çalışan bazı yazılımlar) ile çalışmak içindir ve geleneksel Unix terminalleri desteklememektedir. Ctrl - ; .

Peki, neden Unix terminalleri desteklemiyor? Ctrl - ; ?

Tüm bunların ana noktası Ctrl diziler, ilk 32 ASCII karakterini yazmak / temsil etmek için kolay bir yol sağlamaktı, çünkü bu karakterler kolayca yazılabilir karakterlere sahip değillerdi. Yalındır eşdeğer Ctrl - ; tüm ihtiyaç duymadan yazmak zor değil Ctrl dizi, bu nedenle özel bir Ctrl karakteri yok Ctrl - ; ) yaygın olarak desteklenir.

Ben detaylandırırım. Öncelikle, bu cevabın çoğunun belgelendirdiğim bazı bilgileri referans olarak verdiğini not edeceğim. Ctrl Web sitemdeki Diziler ] [CyberPillar] [: Ctrl Klavye Dizileri .

Ctrl karakterleri için kurallardan biri Ctrl ve ASCII değeri 63 - 95 olan bir karaktere bastığınızda, bastığınız karakterden 64 ASCII değerine sahip olan karakterin sonunda bulunursunuz. (Varsa, 64, 63'ten çıkarılır. Daha sonra tartışılır.)

Başka bir kural, eğer tutarsanız Ctrl ve ASCII değeri 96 ile 122 arasında olan bir karaktere bastığınızda, yazdığınız karakterden 96 daha az karakter içeren bir karakter elde edersiniz. Sonuç olarak, Ctrl - vardiya - bir (büyük harf) ve Ctrl - bir (küçük harf) aynı karakterle bitecektir. Bu yüzden basarsanız Ctrl - c görebilirsin Ctrl - C geri yankılandı. Terminal ASCII 3'ü temsil eden bir dizgeye dönüştürür. Ctrl - C Çıktı mesajını hazırlarken, tuşuna bastığınızı Ctrl - c ASCII3'ü oluşturmak için.

; (Yarı-kolon) ASCII 59, ASCII 64 ila 95 veya ASCII 96 ila 122 değildir. Bu nedenle, henüz belirlenmiş olan (ASCII 63 ila 122'yi kapsayan) kurallar ASCII 59 için herhangi bir genel yorum sağlamaz (kapsayacak Ctrl - ; ).

Bir istisna gibi görünen bir değer, genel olarak desteklenen kuraldır; Ctrl - ? . Eğer Ctrl - ; ortak bir yorumu vardı, o zaman ortak yorum muhtemelen aynı şekli izleyecekti. Ctrl - ? . ? karakter ASCII 63'tür. Bu nedenle 64'ü 64 saniye çıkarmak, temelde 127'e, göz ardı edilebilecek bir underflow koşuluyla eşittir. Sonuç şu ki Ctrl - ? tuş vuruşu kombinasyonu etkin bir şekilde 64 ekleyerek sona erer, yani 63 + 64 = 127. ASCII 127, genellikle silmek o zamandan beri temsil etmek zor olabilir silmek ortak bir özel davranışa sahiptir (metni silmek). Bu nedenle, ASCII 127, yaygın olarak desteklenen, sıkça desteklenen Ctrl sıra. Bu şekilde, bir kişi ASCII 127 kodunu klavye dizisini kullanarak nispeten kolay bir şekilde yazabilir.

Bu kalıptan sonra (64 ekleyerek), Ctrl - ; sol kaşlı ayraç olan ASCII 123 ile sonuçlanır (" { "). İnsanlar desteklemedi Ctrl - ; yaygın bir standart yazma yöntemi olarak { dan beri { klavyeye girmek için nispeten kolay bir yol vardır ( vardiya - [ ).


Belki bir terminal sorunu, ancak: bindkey -s ^o '`date +%y%m%d | perl -pe chomp`' ... "mkdir & lt; ctrl-o & gt;" yazdığımda bana verir: mkdir `date +%y%m%d | perl -pe chomp` (Ben OS X'im, RH6 da aynı şeyi yapıyor.)
Bryan

Evet, bu bekleniyor. O zaman yazmaya devam et. Yani mkdir <ctrl-;>-projectA olur mkdir ``date +%y%m%d | perl -pe chomp``-projectA İstediğiniz klasörü oluştururken sonuçlanır. Komut satırında tarihi göstermez, ancak tam olarak istediğiniz şeyi yapar. Ayrıca şunları da yapabilirsiniz: bindkey -s ^ i '! ls -t | tail -1! '(değiştir!' s geri dönüşlerle, bu yorumda istenildiği gibi alıntı yapamıyorum)
TOOGAM

Ah, tamam, emrinin komutu yerine getireceğini umuyordum, sonra sonuçları komut satırının üzerine getirdim ki girmeden önce tam olarak ne yaratılacağını görebilecektim. Bindkey için -c seçeneği yakın gibi görünüyor, ikisinin bir kombinasyonuna ihtiyacım var.
Bryan
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.