ディレクトリまたはファイルがあるディレクトリに cd するにはどうすればいいですか?

ディレクトリまたはファイルがあるディレクトリに cd するにはどうすればいいですか?

を実行するとcd "user/Dropbox/foo.txt"、 が返されます-bash: cd: user/Dropbox/foo.txt: Not a directory。ただし、この場合の私の意図は常に同じです。つまり、cdファイルがあるディレクトリに移動したいのです。

私はこれを試しました:

function smartcd
{
    dirname=$(dirname "$1");
    cd $dirname;
}

しかし、$1 がディレクトリの場合、dirname "$1"ディレクトリ自体ではなく親ディレクトリが返されるため、機能しません。

$1がディレクトリの場合はそのディレクトリ自体に、ファイルがファイルの場合はそのファイルが入っているディレクトリに cd するコマンドを作成するにはどうすればよいですか$1?

答え1

まずファイルの $1 をテストしたいのだと思います:

if test -f "$1"; then cd dirname ... else cd "$1" fi

関連情報