
私はこれができることがわかりましたcd
。文書議論。
cd myDirectory/anyname.anyExtension
と同等だろう
cd myDirectory/
この動作を実装するのに最適なエイリアスや関数は何ですか?
編集する:申し訳ありませんが、最初は言及しませんでした:私は使用します。zsh
答え1
ディレクトリを入力してbash
。
cd() {
local file="${!#}"
if (( "$#" )) && ! [[ -d "$file" ]]; then
builtin cd "${@:1:($#-1)}" "${file%/*}"
else
builtin cd "$@"
fi
}
CDのオプション(など)を絶対に使用しない場合は、-P
次のように十分です。
cd() {
if [ -d "$1" ] || [ -z "$1" ]; then
builtin cd "$@"
else
builtin cd "${1%/*}"
fi
}
答え2
dirname
たとえば、次のようにパスからファイル名を削除できます。
mycd() { cd "$(dirname "$1")"; }
望むよりman dirname
。
答え3
では、zsh
次の作業を頻繁に実行します。
cd /path/to/somefile(:h)
(h
のためのhead
)。
シンボリックリンクの場合は、somefile
次のようにすることもできます。
cd somefile(:A:h)
シンボリックリンクターゲットを見つけることができるディレクトリに到達します。
zsh
今Chrisの唯一の解決策は次のとおりですbash
。
cd() {
[[ ! -e $argv[-1] ]] || [[ -d $argv[-1] ]] || argv[-1]=${argv[-1]%/*}
builtin cd "$@"
}
また、「単語」が削除する項目を上書きすることもzsh
できます。Ctrl-W
zsh
単語ベースの移動/転置/削除ウィジェットの文脈では、「単語」は基本的に含まれる一連$WORDCHARS
の数値と変数の文字です/
。
1つのパスコンポーネントのみが削除されるように、/
次から削除できます。$WORDCHARS
Ctrl-W
WORDCHARS=${WORDCHARS/\/}
もう1つの便利な拡張機能は、select-word-style
さまざまなテキストスタイルからインタラクティブに選択できるウィジェットです。
autoload select-word-style
zle -N select-word-style
bindkey '\ew' select-word-style
次に、を押してAlt-Wさまざまなテキストスタイルから選択できます。
$ cd /blah/blih<Alt-W>
Word styles (hit return for more detail):
(b)ash (n)ormal (s)hell (w)hitespace (d)efault (q)uit
(B), (N), (S), (W) as above with subword matching
?
答え4
cd2() {
arg=() dir= cmd= IFS=" " msg='[-L|[-P [-e]]|-h] [dir|file]'
while [ "$#" -gt 1 ] ; do
case "$1" in
-h) printf "%s: cd2 %s\n" "$0" "$msg"
return 1 ;;
*) arg+=("$1") ;;
esac
shift
done
[ -f "${1:-}" ] && dir="$(dirname ${1:-})" || dir="${1:A}"
[ ! -z "$arg" ] && cmd="cd ${arg[@]} $dir" || cmd="cd $dir"
if ! $cmd 2>/dev/null; then
printf "%s: cd2 %s\n" "$0" "$msg"
return 1
fi
}