Você precisaria citar $2 de uma maneira adequada para o shell de login do usuário remoto. Por exemplo, supondo que seja como o Bourne:
shquote() {
LC_ALL=C awk -v q=\' '
BEGIN{
for (i=1; i<ARGC; i++) {
gsub(q, q "\" q q, ARGV[i])
printf "%s ", q ARGV[i] q
}
print ""
}' "$@"
}
my_func () {
ssh blah blah blah "$1" "cd -- $(shquote "$2")"
}
Por exemplo, shquote() transformaria Stephane's dir em 'Stephane'\''s dir' , portanto, a linha de comando cd -- 'Stephane'\''s dir' é interpretada pelo shell remoto tipo Bourne como executando cd com um argumento de diretório Stephane's dir .
Em qualquer caso, executar um shell em um host remoto que só faz cd não vai conseguir nada útil.
Mais leituras (e mais opções, inclusive para os casos em que o shell de login do usuário remoto não é parecido com Bourne) em Como executar um comando simples arbitrário sobre o ssh sem conhecer o shell de login do usuário remoto?