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.