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'"
.