ファイル引数を受け入れ、引数のファイル部分を完全に無視してインクルードディレクトリに移動するUnixコマンドまたはシェルスクリプトはありますか?
答え1
次の関数を作成できます。
cd_to_file_location() {
location=$(dirname -- "$1")
cd -- "$location"
}
# test it out
$ mkdir /tmp/foodir
$ touch /tmp/foodir/a
$ cd_to_file_location /tmp/foodir/a
$ pwd
/tmp/foodir
答え2
存在するzsh
:
cdparent() cd -- $1:h
現在の作業ディレクトリを最初の引数のディレクトリ部分(ead)に変更する関数がcdparent
定義されています。h
次のようにすることもできます。
cd some/file(:h)
ここでも、:h
glob修飾子は与えられたファイルのヘッダーを検索するために使用されます。
この:h
修飾子は1970年代のcshに由来し、パラメータの拡張と履歴の交換に使用できます。では、zsh
グローバル修飾子が追加される状況に適用できます。では、bash
履歴の交換にのみ適用できます。これらの修飾子の一部は、たとえば現在編集されているファイルのディレクトリにchdirを送信できる場合にも:h
使用できます。vim
:cd %:h
(これ親上記の表現は少し誤解を招く可能性があります。たとえば、これはaの代わりにcdparent ..
aを実行します。cd .
cd ../..
親提案可能)。
答え3
宛先パスがディレクトリであることを確認する関数を使用できます。それ以外の場合は、パスからディレクトリ名を取得し、そのディレクトリにCDを送信します。たとえば、
mycd()
{
if [ ! $# -eq 1 ]
then
printf "Usage: mycd <PATH>\n" >&2
return
fi
if [ ! -d "$1" ]
then
dest="$(dirname -- "$1")"
set -- "$dest"
fi
cd -- "$1"
}
これはディレクトリとファイルパスを処理するのに十分一般的であり、実際のものを使用するので、次を使用してcd
いつでも古いディレクトリに戻ることができますcd -
。
$ mkdir /tmp/test-dir/
$ touch /tmp/test-dir/FILE
$ mycd /tmp/test-dir/FILE
$ pwd
/tmp/test-dir
$ mycd /tmp/
$ pwd
/tmp
$ cd -
/tmp/test-dir
$ pwd
/tmp/test-dir
答え4
あなたはそれを探していますか?
cd "${dirname "$1"}"
pushd
必要に応じて代わりに使用することもできます。cd