Takma ad olarak cd ../ .. kullanabilir miyim?


11

Windows ve Ubuntu'yu paralel olarak kullanıyorum ve her ikisinde de konsol işleri yapıyorum.

Windows'da bir

C:\Users\Thomas>cd..\..
C:\>

Bununla birlikte, Linux'ta bu ters eğik çizgilerle ya da eğik çizgilerle çalışmaz.

21:17:10 $ cd../..
bash: cd../..: No such file or directory

Sık sık bu hatayı yaptığım .bash_aliasesiçin, bu durum için bir takma ad tanımlamaya çalıştım :

alias cd../..='cd ../..'
alias cd..\..='cd ../..'

Yeni bir bash başlattığımda,

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

Takma adları nasıl cd..\..ve cd../..doğru şekilde ayarlayabilirim ?

cd..\..Kaçış karakteri ile sorunları var gibi gözüküyor:

21:39:43 $ cd..\..
bash: cd....: command not found

Başka bir takma ad tanımlasam bile çalışmıyor cd.....


2
Yapamazsın. Bir komut, diğer ad veya dosya adı /karakteri içeremez . \ Versiyon, diğer taraftan, iyi çalışması gerekir.
fkraiem

@fkraiem: Görünüşe göre ters eğik çizgi sürümünde kaçış karakteri problemleri var. Soru güncellendi.
Thomas Weller

Gerçekten. Kimden man bash: /, $, `ve = karakterleri ve yukarıda listelenen kabuk metakarakterlerinden veya alıntı karakterlerinden herhangi biri takma adda görünmeyebilir.
fkraiem

Lanet olsun. Denedim man aliasve yoktu. Bunu cevap olarak verirsen kabul edeceğim.
Thomas Weller

Takma adlar bir şeydir, kabuk işlevleri başka bir şeydir. Başka bir bak.
alexis

Yanıtlar:


10

/ve \Bash takma adı adında görünmeyen karakterler arasında. Gönderen man bash:

Karakterler /, $`` ve =yukarıda listelenen kabuk metakarakterlerinden veya tırnak işareti karakterlerinden herhangi biri bir takma adda görünmeyebilir.

Geçici bir çözüm olarak, her ikisine de izin veren Zsh'a geçebilirsiniz:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/

12

Bir takma adda eğik çizgi kullanamazsınız. Bash işlev adlarında onlara izin verir, böylece bunu bir işlev yapabilirsiniz:

cd../.. () { cd ../..; }

Diğer ad veya işlev adında ters eğik çizgi kullanamazsınız. Ters eğik çizgi karakteri bir sonraki karakteri tırnak içine alır, bu nedenle bu dize bir komut adı olarak cd..\..görülmeden cd....çok önce ayrıştırılır . Eğer bir komut adındaki aramak isterseniz cd..\.., yazmak gerekir cd..\\.., 'cd..\..'ya da bir şey eşdeğeri. Ayrıca, herhangi bir şekilde alıntılanan bir komut adı takma ad araması için dikkate alınmaz, bu nedenle ters eğik çizgi içeren bir takma ad kullanamazsınız. Bash işlev adlarında ters eğik çizgilere de izin vermez. Yana cd..\..olarak ayrıştırılır cd...., adlı bir fonksiyonu tanımlayabilir cd....(yukarıdaki gibi).

cdKomutu kullanırsanız , tıpkı diğer komutlarda olduğu gibi, arkasından boşluk yazmanız gerekir. Ancak hiç yazmadan yazmayı kaydedebilirsiniz cd. autocdAşağıdaki satırı içerecek şekilde seçeneği ayarlayın ~/.bashrc:

shopt -s autocd

Ardından komut satırına bir dizin adı yazabilirsiniz ve bu dizini “yürütmek” bu dizine dönüşecektir.

~/some/sub/directory$ ../..
~/some$ 

Eğer bir şey yaparsam, shoptmuhtemelen yakında Windows üzerinde bu işlevselliği özleyeceğim :-)
Thomas Weller

Um, bu doğru değil. Eğik çizgiler bash işlev adlarında kabul edilir.
alexis

@alexis Ah, doğru, bash'ta eğik çizgiler kullanabilirsiniz. Düzeltildi, teşekkürler.
Gilles 'SO- kötü olmayı bırak'

@ThomasW. Tabii ki yapacaksın. autocdbash'ın olmadığı zamanlarda zsh'a geçmemizin nedenlerinden biriydi. Windows'u kullanmanın tek iyi yolu, Cygwin'i zsh ile birlikte yüklemektir.
Gilles 'SO- kötü olmayı bırak'

5

"Bir takma ad veya işlev adında eğik çizgi kullanamazsınız "? Bu benim için bir haber. Linux ve OS X bash'da yıllardır aşağıdaki kabuk işlevini kullanıyorum ve hiç sorun yaşamadım:

function ../.. { cd ../..; echo "$PWD"; }

Doğal olarak, cd../..iyi bir işlev adıdır. Bir çizgi olabilir kabuk işlev adı kullanılır.

Ters eğik çizgi sürümüne gelince, bir diğer adı veya işlev adını gömemezsiniz, ancak aşağıdakileri yapmanız gerekmez: Yazdığınızda cd..\.., bash ters eğik çizgiyi bir kaçış olarak yorumlar ve sonucu yürütmeye çalışır cd..... Öyleyse bunu tanımlayın ve peşinde olduğunuz her şeyi yapabilirsiniz. Rica ederim.

function cd.... { cd ../..; } 

2

Takma adları tutmak istiyorsanız, neden sadece yapmıyorsunuz:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

Veya, gitmek gerekiyorsa yolu geri:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

Bunun zihinsel olarak Windows beyninizle senkronize olmanıza yardımcı olduğu hakkında hiçbir fikrim yok, ama bu hala basit bir yol gibi görünüyor. (En azından Windows'ta işlerin nasıl yapıldığı konusunda endişelenmenize gerek kalmayacak kadar şanslı olanlar için.)

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.