web-dev-qa-db-ja.com

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

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

32
dv3500ea

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

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

function lc () {
    cd $1;
    ls 
}

これを有効にするには、端末をresetにする必要があります。

9
dv3500ea

From Bash Tips and Tricks: 'cd' with style

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

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

まあ、私が考えることができるすべての方法を試すことによって、私たちが探している目標を適切に達成するための唯一の方法があることがわかります。シェル関数を作成する必要があります。

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

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

function cs () {
    cd $1
    ls
}

@ geirha のとおり、名前にスペースを含むディレクトリに切り替えようとすると、上記の関数は失敗します。

$ 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$
35
Isaiah

Bashで builtin コマンドを使用できます。

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

エイリアスの代わりに関数を使用します。

cs() { cd "$1" && ls; }
16
Florian Diesch

cdが私のrvm定義も変更するため、cdの再定義に問題がありました。 https://stackoverflow.com/a/19941991/1601989 を参照してください。 builtinがしていることは何でもスキップするので、私は本当にrvmを使いたくありませんでした。

次を.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
}

そして、.bashrcrmv行の後:

alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd
1
DavidG

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

1
user97589