
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 cd
para 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 $1
for um diretório, ou para o diretório em que o arquivo está, se $1
for 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