cdおよびlsのエイリアスを作成するにはどうすればよいですか?


32

lsコマンドを実行した後、頻繁にコマンドを実行しcdます。csこの操作のエイリアス(など)を作成するにはどうすればよいですか?

回答:


35

Bashのヒントとコツから:スタイル付きの「cd」

最後に、「cd」コマンドのカスタム置換を作成する方法を示します。

ディレクトリに移動するときに、常に同じものを入力していることに気づきましたか?おそらく、少なくとも毎回そこにファイルをリストするでしょう。おそらく、「cd」の後に手で自動的に「ls」と入力するほどです。

考えられるあらゆる方法を試してみると、求めている目標を適切に達成する方法は1つしかありません。シェル関数を作成する必要があります。

シェル関数は、シェルプログラミングの一部です。コンパイルされたプログラミング言語のように、関数は一種の手続き的なモジュール化可能性を提供します。汎用パラメーターを作成して、さまざまなパラメーターを使用して頻繁に使用されるロジックまたは計算のビットを実行できます。この場合、パラメーターは現在の作業ディレクトリです。

簡単なものを次に示します。

function cs () {
    cd $1
    ls
}

以下のよう@geirhaあなたは、その名前にスペースを持つディレクトリに切り替えしようとした場合corretlyノート、上記の関数は失敗します。

$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>  

代わりに、次の関数を使用する必要があります。

function cs () {
    cd "$@" && ls
    }

そのコードをに追加すると~/.bashrc、次のことができるようになります。

hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$

1
空白を含むディレクトリでは失敗します。dv3500eaの回答に対するコメントを参照してください。
ガイラ

24

builtinbashでコマンドを使用できます:

function cd() {
    new_directory="$*";
    if [ $# -eq 0 ]; then 
        new_directory=${HOME};
    fi;
    builtin cd "${new_directory}" && ls
}

2
これはかなり滑らかです。私は.bashrcで@Florianに似たソリューションを非常に長い間持っていましたが、同僚が自分のコンピューターに 'cs'エイリアスを持っていないことを忘れたとき、これははるかに満足のいくものです。
ディノ

この答えが一番好きです。何らかの理由で、エイリアスを使用してコマンドを上書きすることはできないため、この答えのような関数を作成する必要があります。:D
trusktr

しかし、非組み込みコマンドはどうでしょうか?たとえば、上記はlsコマンドを上書きする場合には機能しません。「組み込み」の代わりに使用するキーワードはありますか?
trusktr

フルパスを使用します。例:function ls() { /usr/bin/ls $* }
OneOfOne

定義も変更されるcdためrvm、再定義に問題cdがありました。参照してくださいstackoverflow.com/a/19941991/1601989
DavidG


9

Florian Dieschに関数を使用するヒントをありがとう。csoundパッケージにコマンドcsがあるため、名前として使用できません。cslc

これを~/.bash_aliasesnano ~/.bash_aliases)に追加しました:

function lc () {
    cd $1;
    ls 
}

resetこれを有効にするには、ターミナルが必要です。


8
$1そのように引用符を外すと、ディレクトリに空白が含まれている場合に失敗します。また、cd;の戻り値を確認する必要があります。失敗した場合(許可が拒否された場合など)、を実行しても意味がありませんlslc() { cd "$@" && ls; }
ガイラ

1

このfunction:の拡張として、などの代わりにを使用cs() { cd "$1" && ls; }cdて、関数のすべての引数を渡すことができます。$@"$1"cs() { cd $@ && ls; }


1

定義も変更されるcdためrvm、再定義に問題cdがありました。https://stackoverflow.com/a/19941991/1601989を参照してください。使用したくありませんでした。builtinrvmもしていなかったからです。

私は以下を以下に追加しました.bashrc

# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
  if [[ $# -eq 0 ]]; then
    cd
  elif [[ -d "$*" ]]; then
    cd "$*"
  elif [[ -f "$*" ]]; then
    echo "WARNING: file given, cd to file's dirname" 1>&2
    local dir=$(dirname "$*")
    cd "$dir"
  else
    cd "$*"
  fi
}

function cs()
{
  cdd $* && ls
}

そして、次のrmv行の後.bashrc

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.