Você está entendendo mal como os argumentos são passados.
Quando você executa python -c "print 'foo'" , o shell o analisa em
-
python -
-c -
print 'foo'
para que o python acabe vendo dois argumentos.
Quando você executa pyt -c "print 'foo'" , a linha python $@ é expandida para (o equivalente a) python -c print 'foo' , que é tokenizada como
-
python -
-c -
print -
foo
i.e. O python vê três argumentos e executará o comando print , com a string foo em sys.argv[1] .
O que você precisa fazer é usar um token de shell mágico: em vez de apenas $@ use "$@" (deve ser aspas duplas). Isso diz ao shell para manter os argumentos juntos; quando você executa pyt -c "print 'foo'" , a linha python "$@" é expandida para (o equivalente a) python -c "print 'foo'" .