常に1つのディレクトリに移動またはc d..
入力してください。c d ..
私の.bash_profileに以下の関数を入れると、パラメータセット全体()ではなく、スペースの前の最初の文字「c」だけが解釈されますc d..
。この文字は2つだけあるべきだと思います。エラー発生
bash: c: - command not found
バッシュ4.2.46から。
コマンドラインでスペースを使用してパラメータを解釈すると、後で使用することができるので、この問題を解決したいと思いました。
機能:
changedir() {
if [[ $@ = "c d.." ]]; then
command cd ..
else
if [[ $@ = "c d.." ]]; then
command cd ..
fi
fi
}
また、スペースを含む完全な引数文字列を使用することをお勧めします: $*
または $@
?
答え1
さて、関数名は、changedir
シェルがコマンドを受け取ったときにのみ実行されるように指定されましたchangedir [whatever]
。コマンドが実行されるたびに実行されるわけではありません。入力したコマンドラインごとに関数を実行するためにトラップを乱用する可能性がありますが、DEBUG
ここではそうする必要はありません。
代わりに、引数または引数が与えられたときに実行されるc
関数を生成してください。cd ..
d..
d
..
c() {
if [[ $1 = 'd..' ]] ||
[[ $1 = 'd' && $2 = '..' ]]; then
command cd -- ..
else
echo "Invalid arguments to 'c'! Only 'c d..' and 'c d ..' are supported." >&2
fi
}
またはBashで使用できますshopt -s autocd
。これにより、ディレクトリ名のみを指定すると、シェルはそのディレクトリに移動します。したがって、foobar
同じ操作が実行されcd foobar
(コマンドがない場合foobar
)、..
ディレクトリのみが入力されます。