私は多くのディレクトリを作成し、私の人生を怠惰にし、cd
私が作成したディレクトリに自動的に入りたいと思います。結果-g
は次のとおりです。mkdir -g foo
端末は次のとおりです。
User:/$ mkdir -g foo
User:/foo/$
このページを見ましたが、成功しませんでした。
ディレクトリを作成して同時にディレクトリに移動できる1行のコードはありますか?
このコマンドを試してみました.bash_profile
が、コマンドは完全に上書きされました。 (後でこれが無限ループであることに気づきました)
mkdir() {
if "$1" -eq "-g"
mkdir "$2"
cd "$2"
else
## do the regular code
fi
}
もう一つのことは、私が持っているすべてのエイリアスを忘れてしまうので、それ以上のエイリアスを作成したくないということです。
だから私はこれをしたくないということではありません。
総命令。 (後でこれが無限ループであることに気づきました)
mkcd() {
if "$1" -eq "-g"
mkdir "$2"
cd "$2"
else
## do the regular code
fi
}
私は正しい選択がない可能性が高いことを知っています。修正してください。しかし、どんな助けでも大きな助けになります!
答え1
command
同じ名前の機能をバイパスして外部コマンドを呼び出すには、組み込みコマンドを使用します。返品:
- 以下は
if
一般的なコマンドです。文字列比較を実行するには、test
組み込み関数を呼び出すか、[
同じ構文とFinalを使用する組み込み関数]
または[[ … ]]
より緩和された構文を使用する構文を呼び出します。バラよりシングルまたはダブルカッコの使用 - bashより多くの情報を知りたいです。 - この
-eq
演算子は整数を比較するために使用されます。文字列を比較するために使用されます=
。 - 複数の引数(などのオプションを含む)転送の制限付きサポートを追加しました
-p
。以下では、成功したcd
場合にのみmkdir
呼び出し、関数に渡された最後の引数について呼び出します。 -g
最初のパラメータと見なされます。すべての可能な場所で見つけて削除するオプションを解析することは可能ですが、より困難です。
mkdir () {
local do_cd=
if [ "$1" = "-g"]; then
do_cd=1
shift
fi
command mkdir "$@" &&
if [ -n "$do_cd" ]; then
eval "cd \"\${$#}\""
fi
}
カスタムオプションを定義しないことをお勧めします。--help
マニュアルページには表示されません。他の名前でコマンドを定義するよりも覚えておくのは簡単ではありません。そのコマンドがあるという事実を覚えておらず、他の名前で持っているよりも利点がない、またはそのコマンドがカスタムであるという事実を覚えておらず、ユーザーが次にシェルが組み込みコマンドか関数()であるかを尋ねるtype mkcd
と、すぐにカスタム名で検索できます。可能ですが、カスタムオプションはそうではありません。標準コマンドをオーバーライドするユースケースがありますが、これは1つではありません。