Eu gostaria de passar a entrada de um comando shell para um script python em um alias que usa um comando shell.
teste.py:
import sys
print(sys.argv)
o apelido
alias foo='echo $(python test.py $1)'
pois $ python cd_alias_test.py hello
imprimiria todos os argumentos: ['test.py', 'hello']
eu esperaria que esse alias fizesse o mesmo. No entanto, seu stdout é
['test.py'] hello
O que significa que a string de entrada está sendo passada para stdin e não para os argumentos do script.
Como eu alcanço o efeito pretendido?
$1
não é definido em um alias, os aliases não são funções de shell ; eles são apenas substituição de texto; então o seutest hello
é expandido paraecho $(python test.py ) hello
, que é expandido paraecho ['test.py'] hello
.Se você quer uma função shell, escreva uma! (e não chame sua function ou alias
test
, esse nome já está reservado para a avaliação lógica em seu shell).Mas é preciso se perguntar: por que não simplesmente torná-lo
test.py
executável (por exemplochmod 755 test.py
, ) e incluir a#!/usr/bin/env python3
primeira linha nele? Então você pode simplesmente executá-lo diretamente:Sua pergunta está confusa, mas parece que você quer apenas executar um alias passando um parâmetro para seu script.
Acho que é isso que você quer.
Como mencionado de outra forma, as funções do shell podem ser preferíveis aos aliases - permitindo uma manipulação de argumentos menos trivial.
Então neste exemplo: