次のディレクトリがあります。
/home/user/Project/
Project
ninja
多くのサブディレクトリ内とその背後に./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 "$@" )
}
そして&&
命令はcd
ninja
./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"