como fazer cd para o diretório OU o arquivo do diretório está?

como fazer cd para o diretório OU o arquivo do diretório está?

Se eu fizer isso cd "user/Dropbox/foo.txt", eu consigo -bash: cd: user/Dropbox/foo.txt: Not a directory. Mas minha intenção neste caso é sempre a mesma: quero ir cdpara o diretório em que o arquivo está.

Eu tentei isso:

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

Mas não funciona porque quando $1 é um diretório, dirname "$1"retorna o diretório pai, não o diretório em si.

Como posso criar um comando que fará cd para o próprio diretório, se $1for um diretório, ou para o diretório em que o arquivo está, se $1for um arquivo?

Responder1

Acho que o que você quer é testar primeiro $1 para um arquivo:

se teste -f "$1"; então cd dirname ... else cd "$1" fi

informação relacionada