エイリアス名としてcd ../ ..を使用できますか?


11

私はWindowsとUbuntuを並行して使用しており、両方でコンソールの操作を行っています。

Windowsでは、次のことができます

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

ただし、Linuxでは、バックスラッシュでもスラッシュでも機能しません。

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

私はしばしばその間違いを犯す.bash_aliasesため、そのような状況でエイリアスを定義しようとしました。

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

新しいbashを開始すると、

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

どのように私はのためのエイリアスを設定するでしょうcd..\..し、cd../..正しく?

cd..\..エスケープ文字に問題があるようです。

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

に別のエイリアスを定義しても機能しませんcd....


2
できません。コマンド、エイリアス、またはファイル名に/文字を含めることはできません。\ バージョンは、他の一方で、正常に動作する必要があります。
fkraiem 14

@fkraiem:バックスラッシュ版にはエスケープ文字として問題があるようです。質問を更新しました。
トーマスウェラー14

ああ、確かに。From man bash/、$、 `、および=の文字、および上記のシェルメタ文字または引用文字は、エイリアス名に表示されない場合があります。
fkraiem 14

くそー。試しましたがman alias、存在しませんでした。あなたが答えとしてそれを与えるならば、私はそれを受け入れます。
トーマスウェラー14

エイリアスとシェル関数は別のものです。もう一度見てください。
アレクシス14

回答:


10

/また\、Bashエイリアス名に表示できない文字の1つです。からman bash

文字/$`、および=シェルのメタ文字またはエイリアス名に表示されないことが上記の引用文字のいずれか。

回避策として、Zshに切り替えると、次の両方が可能になります。

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

12

エイリアス名にスラッシュを使用することはできません。ただし、Bashでは関数名にそれらを使用できるため、それを関数にすることができます。

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

エイリアス名または関数名にバックスラッシュを使用することはできません。バックスラッシュ文字は次の文字を引用するため、その文字列がコマンド名として検索される直前にcd..\..として解析されcd....ます。あなたが指定されたコマンドを呼び出したい場合cd..\..は、次のように入力する必要があるcd..\\..'cd..\..'または何かに相当。さらに、何らかの方法で引用されたコマンド名はエイリアスルックアップとは見なされないため、バックスラッシュを含むエイリアス名を使用することはできません。Bashでは、関数名にバックスラッシュも使用できません。以来cd..\..として解析されcd....、あなたが呼ばれる関数を定義することができますcd....(上記のように)。

cdコマンドを使用する場合は、他のコマンドと同様に、その後にスペースを入力する必要があります。ただし、まったく入力cdしないことで入力を節約できます。autocd次の行でオプションを設定します~/.bashrc

shopt -s autocd

その後、コマンドラインでディレクトリ名を入力すると、そのディレクトリが「実行」されて変更されます。

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

私がそのshoptことをすれば、おそらくすぐにWindowsでその機能を見逃すでしょう:
トーマスウェラー14

ええ、それは真実ではありません。スラッシュは、bash関数名に使用できます。
アレクシス14

@alexisああ、bashでスラッシュを使用できます。修正済み、ありがとう。
ジル 'SO-悪であるのをやめる' 14

@ThomasW。もちろんそうします。autocd私がzshに切り替えた理由の1つは、bashがなかったときでした。Windowsを使用する唯一の適切な方法は、Cygwinをインストールすることです(zshで完了)。
ジル 'SO-悪であるのをやめる' 14

5

「エイリアスまたは関数名にスラッシュを使用できません」それは私にとってニュースです。私は長年にわたってLinuxとOS X bashで次のシェル関数を使用してきましたが、問題はありませんでした。

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

当然、cd../..細かい関数名でもあります。スラッシュシェル関数名に使用できます。

バックスラッシュバージョンについては、エイリアスや関数名でそれを埋め込むことはできませんが、あなたがする必要はありません。あなたが入力したときにcd..\..、bashのは、結果を実行するためのエスケープと試みとしてバックスラッシュを解釈しますcd....。だからそれを定義すれば、あなたは自分が望んでいたことをすべて行うことができます。どういたしまして。

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

2

エイリアスを保持したい場合は、単にしないでください:

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

それとも、あなたが行く必要がある場合の方法のバックを:

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

これがWindowsの頭脳と精神的に同期を保つのにどれほど役立つかはわかりませんが、これはまだ簡単な方法のようです。(少なくとも、幸運なことに、Windowsでどのように処理されるかを心配する必要はありません。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.