[컴][파이썬][쉘] repo 에서 python 실행시키는 부분 소스 분석

bash 에서 자기자신을 python 의 인자로 넘기는 방법,

android 소스를 받아보려 하는데, repo 라는 python 프로그램을 만들어놨으니 사용하라고 한다.
그래서 봤는데, 첫 줄을 보고 shell programming 인가 했다.

아래 경로에서 다운 받을 수 있다.
https://dl-ssl.google.com/dl/googlesource/git-repo/repo
 



#!/bin/sh
 
## repo default configuration
##
REPO_URL='https://gerrit.googlesource.com/git-repo'
REPO_REV='stable'
 
# Copyright (C) 2008 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
magic='--calling-python-from-/bin/sh--'
"""exec" python -E "$0" "$@" """#$magic"





"""exec" python -E "$0" "$@" """#$magic"



잘 보면 shell program 에서 exec 를 이용하여 python 을 부르면서 인자로 자기자신($0)을 넘겨준다. 신기하게도 해놨다. 이 부분에서 핵심은 저 쌍 따옴표에 있다.

쌍따옴표를 bash 명령어 부분에 쳐놓음으로써 bash 에서는 실행되고, python 에서는 무시하도록 해놨다.

쌍따옴표를 지우면 python runtime error 가 날 것이다.




exec command

1개 이상의 sub 프로세스들을 실행하게 만든다
exec" python -E "$0" "$@" """#$magic


python option

-E :ignore PYTHON* environment variables (such as PYTHONPATH)



$0

command 를 가리킨다. 예를 들어
cp A B
를 한다면 cp 가 $0 가 된다.



$@

모든 argument 를 가리킨다.
cp A B
인 경우에는 A B 를 가리키며,
cp A A A A A A
인 경우에는 A A A A A A 가 된다.


 





댓글 없음:

댓글 쓰기