2013-10-10 35 views
-1

我有這樣的非便攜式家當:#這裏的/ usr /斌/包膜蟒蛇-u家當便攜式

#!/usr/bin/env python -u 

它是不可移植的,因爲python -u送入作爲一個單一的對Arg的env我的系統上。

挑戰:讓這個家當便攜式改變家當 - 也就是一個一個班輪

換句話說,沒有解決方案

+0

我問了一個只涉及shebang線的解決方案,而不是多線解決方案。 – dnozay

回答

11

我會使用以下方法:

#!/bin/sh 
"""true" 
exec python -u "$0" "[email protected]" 
""" 
# python code goes here 

"""true"將由解析0作爲true,因爲它包含一個空的""字符串,然後是"true"。由於true是無操作命令,因此它將被有效忽略,並且以下行將執行Python解釋器。

另一方面,Python將以非常不同的方式解析"""true"行,因爲triple-quoted string的開頭以true"開頭,並在下面兩行關閉。由於該字符串不用於任何事情,Python解釋器將有效地忽略啓動Python的shell代碼片段。這是"""xxx"的解釋不同,它允許Python和sh代碼共存於同一個腳本中。

對於一個簡單的測試,追加類似:

import sys 
print "hello!", sys.argv 

給予合理sh實現(考慮到時間啓動Python)的,這不應該是可測量比使用env慢。

+2

dat漂亮可愛 – Claudiu

+3

+1這很髒,但不知何故令人滿意 – ldrumm

+0

一個缺點是,黑客將被視爲腳本文檔字符串的一部分(如果不是全部)。 – chepner