bashを使用してcdなしでファイルでドットスラッシュ(./)エイリアスを実行する

bashを使用してcdなしでファイルでドットスラッシュ(./)エイリアスを実行する

次のディレクトリがあります。

/home/user/Project/

Projectninja多くのサブディレクトリ内とその背後に./ninja

/home/user/Project/sub1/sub2/sub3/ninja

もちろん、cdジャンプするProjectこともできました./ninja。しかし、bashrcを介してコマンドを実行するためのエイリアスを作成しています。

alias runNinja = cd ~/Project/sub1/sub2/sub3 && ./ninja

1つのコマンドでできますか?

alias runNinja = .~/Project/sub1/sub2/sub3/ninja

上記は明らかに機能しません。

alias runNinja = ./home/user/Project/sub1/sub2/sub3/ninja

TL、DR:ディレクトリでスクリプトを実行するためのエイリアスを減らす方法は?

答え1

ただ追加.bashrc の $PATH 変数パスは次のとおりです。

export PATH=$PATH:/home/user/Project/sub1/sub2/sub3

./ なしで好きなところどこでも実行できます。

$ ninja

しかし、もちろんエイリアスを設定することもできます。

alias runNinja='/home/user/Project/sub1/sub2/sub3/ninja'

どこでも実行できます。

$ runNinja

意図的に実行時にそのディレクトリに移動する場合(たとえば、そのディレクトリのファイルまたは依存関係を入力/出力として処理する場合)、〜/ .bashrcファイルまたは構成ファイルに以下の関数を作成する必要があります。 :

runNinja() { cd /home/user/Project/sub1/sub2/sub3 && ./ninja "$@" }

答え2

エイリアスはbash次のように作成されます。

alias ninja="$HOME/Project/sub1/sub2/sub3/ninja"

(周囲にスペースはありません=)。

また、$HOMEここでは、エイリアスを定義するときにホームディレクトリパスに拡張される変数を使用しました。

代わりにシェル関数を使用してください。

ninja () {
    "$HOME/Project/sub1/sub2/sub3/ninja" "$@"
}

"$@"コマンドラインに提供できるすべての引数に拡張されます。

もしあなたなら必要現在のディレクトリを$HOME/Project/sub1/sub2/sub3実行前に変更するには、./ninja関数でこれを行うこともできます。

ninja () (
    cd "$HOME/Project/sub1/sub2/sub3" &&
    ./ninja "$@"
)

関数の本文をサブシェル((...))に入れたことに注意してください。これはcd、現在のディレクトリが変更されないことを意味します。現在のシェルですが、関数環境でのみ使用できます。

明らかに、次のように書くことができます。

ninja () {
    ( cd "$HOME/Project/sub1/sub2/sub3" && ./ninja "$@" )
}

そして&&命令はcdninja./ninjaいいえ失敗した場合は実行しますcd

シェル関数は通常、エイリアスを追加する任意の場所(おそらく~/.bashrc)で宣言できます。

答え3

あなたはとても近いです。ただし、これは.コマンドではなく、ファイル名の一部です。

このファイルは.すべてのディレクトリにあり、そのディレクトリと同じディレクトリです。cd ././././././それはあなたに何も残しません。$PWD、、、、../.すべて././.同じディレクトリです。

したがって、/home/user/Project/sub1/sub2/sub3/ninja入力したコマンドを実行するには/home/user/Project/sub1/sub2/sub3/ninja エイリアスを作成する必要があります。
alias ninja="/home/user/Project/sub1/sub2/sub3/ninja"

関連情報