Para o exemplo específico que você citou, você precisa usar a substituição de comando:
cd -P -- "$(dirname -- "$(which w3af)")"
pela simples razão de que cd
não recebe entrada via STDIN
. Aceita apenas parâmetros.
Além disso, which command
produziria um caminho para um arquivo e não um diretório.