
쉘 명령의 별칭을 사용하여 쉘 명령의 입력을 Python 스크립트에 전달하고 싶습니다.
test.py:
import sys
print(sys.argv)
별명
alias foo='echo $(python test.py $1)'
$ python cd_alias_test.py hello
모든 인수가 인쇄되므로 이 ['test.py', 'hello']
별칭이 동일한 작업을 수행하기를 원합니다. 그러나 표준 출력은
['test.py'] hello
이는 입력 문자열이 스크립트의 인수가 아닌 표준 입력으로 전달됨을 의미합니다.
원하는 효과를 어떻게 얻을 수 있나요?
답변1
alias test='echo $(python test.py $1)'
$1
별칭으로 정의되지 않았습니다.별칭은 쉘 기능이 아닙니다;그들은 단지 텍스트 대체이므로 귀하의 것은 test hello
로 확장 echo $(python test.py ) hello
되고 로 확장됩니다 echo ['test.py'] hello
.
쉘 기능을 원한다면 작성하세요! (그리고 함수나 별칭을 호출하지 마세요 test
. 이름은 이미 셸에서 논리적 평가를 위해 예약되어 있습니다.)
function foo() { echo $(python test.py $1) }
foo hello
test.py
하지만 사람들은 궁금해합니다. 단순히 실행 파일(예: chmod 755 test.py
) 을 만들고 #!/usr/bin/env python3
그 안에 첫 번째 줄을 포함시키면 어떨까요 ? 그런 다음 직접 실행하십시오.
./test.py hello darkness my old friend
답변2
귀하의 질문은 혼란스럽게 표현되어 있지만 스크립트에 인수를 전달하여 별칭을 만들고 싶은 것 같습니다.
나는 이것이 당신이 원하는 것이라고 생각합니다.
alias runtest='python test.py'
달리 언급했듯이 쉘 함수는 별칭보다 선호되므로 덜 사소한 인수 처리가 가능합니다.
따라서 이 예에서는 다음과 같습니다.
function runtest() { python test.py "$1" ; }