If using Emacs shell and helm projectile, you can wire these up to quickly change your current working directory.
(require 'helm-projectile)
(defun ar/shell-cd (dir-path)
"Like shell-pop--cd-to-cwd-shell, but without recentering."
(unless (string-equal mode-name "Shell")
(error "Not in Shell mode"))
(message mode-name)
(goto-char (point-max))
(comint-kill-input)
(insert (concat "cd " (shell-quote-argument dir-path)))
(let ((comint-process-echoes t))
(comint-send-input)))
(defun ar/helm-projectile-shell-cd ()
"Change shell current working directory using helm projectile."
(interactive)
(unless (string-equal mode-name "Shell")
(error "Not in Shell mode"))
(let ((helm-dir-source (copy-tree helm-source-projectile-directories-list)))
(add-to-list 'helm-dir-source '(action . ar/shell-cd))
(add-to-list 'helm-dir-source '(keymap . nil))
(add-to-list 'helm-dir-source '(header-line . "cd to directory..."))
(helm :sources helm-dir-source
:buffer "*helm-dirs*"
:candidate-number-limit 10000)))