2012-05-30 17 views
20

में शेबैंग लाइन सीमा मैं zc.buildout द्वारा स्वचालित रूप से जेनरेट की गई पाइथन स्क्रिप्ट निष्पादित करने का प्रयास कर रहा हूं, इसलिए मेरे पास उनका नियंत्रण नहीं है। मेरी समस्या यह है कि शेबांग लाइन (#!) या तो बैश (80 वर्ण सीमा) या प्रत्यक्ष निष्पादन (कुछ लिनक्स कर्नेल निरंतर मुझे नहीं पता) के लिए बहुत लंबा है।बैश और लिनक्स कर्नेल

#!/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././bin/bash 
echo Hola! 

बैश या कर्नेल बड़ा मामला लाइनों के लिए देने के लिए कॉन्फ़िगर कैसे हो सकता है:

यह एक उदाहरण स्क्रिप्ट मदद से आप अपनी समस्या पुन: पेश है?

+1

आप दुभाषिया के लिए एक तर्क के रूप स्क्रिप्ट पार कर लेते हैं ('बजाय' बैश x.sh'।/X.sh') कुटिया लाइन बस एक टिप्पणी के रूप में नजरअंदाज कर दिया जाएगा और निष्पादन प्रभावित नहीं होना चाहिए । –

+0

मुझे पता है, समस्या यह है कि मैं उन स्क्रिप्ट को आमंत्रित करने वाला नहीं हूं ... – sortega

उत्तर

27

कर्नेल संकलन समय बफर सीमा के कारण 99.9% सिस्टम पर 127 वर्णों तक सीमित है।

यह द्वारा कर्नेल में सीमित है, include/linux/binfmts.h में सेट है।

+7

'मैन निष्पादन' भी देखें: "#! निष्पादन योग्य खोल स्क्रिप्ट में पहली पंक्ति के लिए 127 वर्णों की अधिकतम पंक्ति लंबाई की अनुमति है । " –

10

आप लंबे समय तक मामला लाइनों पाने के लिए अपने गिरी पुनः संकलित नहीं करना चाहते हैं, तो आप एक आवरण लिख सकते हैं:

#!/bin/bash 
script="$1" 
shebang=$(head -1 "$script") 
interp=(${shebang#\#!})  # use an array in case a argument is there too 
# now run it 
exec "${interp[@]}" "$script" 

और उसके बाद की तरह स्क्रिप्ट चलाने: wrapper.sh script.sh

+0

+1 सरल कामकाज जो किसी भी कर्नेल परिवर्तन, पैच या अन्य हैक्स की आवश्यकता के बिना सभी समस्याओं को हल करता है। –

6

अपडेट किया गया @glenn जैकमैन की स्क्रिप्ट कमांड लाइन तर्क में गुजरने का समर्थन करने के लिए।

संयोग से, मैं एक बहुत गहरी निर्देशिका पदानुक्रम के अंदर एक अजगर वर्चुअलनेव बनाते समय इस समस्या में भाग गया।

मेरे मामले में, यह एक मेसोस फ्रेमवर्क डीआईआर के अंदर बनाया गया वर्चुअलनव था।

अतिरिक्त लंबे शेबांग xxx/.../venv/bin/pip बेकार कॉलिंग प्रदान किया गया।

रैपर स्क्रिप्ट सबसे उपयोगी साबित हुई।

#!/usr/bin/env bash 

script="$1" 
shebang=$(head -1 "$script") 

# use an array in case a argument is there too 
interp=(${shebang#\#!})   

# now run it, passing in the remaining command line arguments 
shift 1 
exec "${interp[@]}" "$script" "${@}" 
+1

क्या आप इस स्क्रिप्ट का वर्चुअल एनवी के साथ उपयोग कर रहे हैं इस पर विस्तार कर सकते हैं? हमारा निर्माण आभासी env के प्रारंभिक निर्माण के दौरान विफल रहता है क्योंकि #! easy_install का पथ पहले से ही बहुत लंबा है। – Blaskovicz

संबंधित मुद्दे