Все остальные ответы объясняют, почему псевдоним не работает, а ответ Джорджа Василиу дает альтернативную функцию, которая выполняет эту работу.
Однако я хотел развить этот ответ, чтобы сделать его более надежным. В настоящее время функция
mvcd() { mv "$1" "$2" && cd "$2"; }
не будет работать, если целью является файл. Чтобы исправить это, мы можем использовать нотацию подстроки переменной bash:
mvcd() { mv "$1" "$2" && [[ -d $2 ]] && cd $2 || cd ${2%/*}; }
Чтобы увидеть, что здесь происходит, давайте запишем это в немного более читаемом формате:
mvcd () {
mv "$1" "$2"; # Do the move
if [[ -d $2 ]] # Check if arg $2 is a dir
then
cd $2; # if it is, cd into it
else
cd ${2%/*}; # else remove the filename and cd
fi;
}
Мы проверяем, является ли пункт назначения каталогом[1] - и если это так, мы просто cd в него. Если это не так, то мы подстроим второй аргумент от начала до самого правого /
и cd в него.
[1] Я потратил неприлично много времени, пытаясь сделать это без условного обозначения, связывая вместе имя каталога и ссылку для чтения или просто всегда добавляя ./
перед путем или другими хаками, но у меня всегда была проблема. - либо это будет cd слишком далеко назад (в случае readlink), либо это не будет работать с cding на ..
, или это не будет работать с именами файлов или... да. Если кто-то может сделать это без условного, я очень открыт для предложений.