शेल रूल

7.3 · 7.2 · 7.1 · 7.0 · 6.5

नियम

sh_binary

नियम का सोर्स देखें
sh_binary(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

sh_binary नियम का इस्तेमाल, एक्ज़ीक्यूटेबल शेल स्क्रिप्ट का एलान करने के लिए किया जाता है. (sh_binary गलत नाम है: इसके आउटपुट ज़रूरी नहीं कि बाइनरी हों.) इस नियम से यह पक्का होता है कि सभी डिपेंडेंसी बनाई गई हैं और वे runfiles एरिया में दिखती हैं. हमारा सुझाव है कि आप अपने sh_binary() नियमों को स्क्रिप्ट के नाम के बाद नाम दें.स्क्रिप्ट के नाम में एक्सटेंशन शामिल न करें (जैसे, .sh). नियम का नाम और फ़ाइल का नाम अलग-अलग होना चाहिए. sh_binary, शेलबैंग का इस्तेमाल करता है, ताकि किसी भी उपलब्ध इंटरप्रेटर का इस्तेमाल किया जा सके (उदाहरण के लिए, #!/bin/zsh)

उदाहरण

बिना किसी डिपेंडेंसी और कुछ डेटा फ़ाइलों वाली आसान शेल स्क्रिप्ट के लिए:

sh_binary(
    name = "foo",
    srcs = ["foo.sh"],
    data = glob(["datafiles/*.txt"]),
)

तर्क

विशेषताएं
name

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

deps

लेबल की सूची; डिफ़ॉल्ट [] है

इस टारगेट में जोड़ने के लिए, "लाइब्रेरी" टारगेट की सूची. deps के बारे में सामान्य टिप्पणियां देखने के लिए, ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.

इस एट्रिब्यूट का इस्तेमाल, उन अन्य sh_library नियमों की सूची बनाने के लिए किया जाना चाहिए जो srcs में मौजूद कोड पर निर्भर, भाषा में बदले गए प्रोग्राम का सोर्स कोड उपलब्ध कराते हैं. इन नियमों के मुताबिक दी गई फ़ाइलें इस टारगेट के runfiles में मौजूद होंगी.

srcs

लेबल की सूची; डिफ़ॉल्ट [] है

इनपुट फ़ाइलों की सूची.

इस एट्रिब्यूट का इस्तेमाल, इस लाइब्रेरी में मौजूद शेल स्क्रिप्ट की सोर्स फ़ाइलों को सूची में शामिल करने के लिए किया जाना चाहिए. स्क्रिप्ट, शेल के source या . कमांड का इस्तेमाल करके, दूसरी स्क्रिप्ट लोड कर सकती हैं.

env_inherit

स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से []

sh_library

नियम का सोर्स देखें
sh_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

इस नियम का मुख्य मकसद, मिलती-जुलती स्क्रिप्ट से बनी एक लॉजिकल "लाइब्रेरी" को एक साथ इकट्ठा करना है. इन स्क्रिप्ट में, ऐसी भाषा में लिखे गए प्रोग्राम होते हैं जिन्हें समझने के लिए, उन्हें कंपाइल या लिंक करने की ज़रूरत नहीं होती. जैसे, Bourne shell. साथ ही, इसमें उन प्रोग्राम के लिए ज़रूरी डेटा भी शामिल होता है जो रन-टाइम के दौरान इस्तेमाल किए जाते हैं. इसके बाद, एक या एक से ज़्यादा sh_binary नियमों के data एट्रिब्यूट से, ऐसी "लाइब्रेरी" का इस्तेमाल किया जा सकता है.

डेटा फ़ाइलों को इकट्ठा करने के लिए, filegroup नियम का इस्तेमाल किया जा सकता है.

प्रोग्रामिंग की भाषाओं में, "कोड" और "डेटा" के बीच हमेशा साफ़ तौर पर अंतर नहीं होता: आखिरकार, अनुवादक के हिसाब से प्रोग्राम सिर्फ़ "डेटा" होता है. इस वजह से, इस नियम में तीन एट्रिब्यूट हैं, जो सभी एक जैसे हैं: srcs, deps, और data. फ़िलहाल, इन सूचियों के एलिमेंट के बीच कोई अंतर नहीं किया जाता. तीनों एट्रिब्यूट में नियम, सोर्स फ़ाइलें, और जनरेट की गई फ़ाइलें सबमिट की जा सकती हैं. हालांकि, अन्य नियमों की तरह ही एट्रिब्यूट का इस्तेमाल उनके सामान्य मकसद के लिए करना अच्छा होता है.

उदाहरण

sh_library(
    name = "foo",
    data = [
        ":foo_service_script",  # an sh_binary with srcs
        ":deploy_foo",  # another sh_binary with srcs
    ],
)

तर्क

विशेषताएं
name

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

deps

लेबल की सूची; डिफ़ॉल्ट [] है

इस टारगेट में एग्रीगेट की जाने वाली "लाइब्रेरी" टारगेट की सूची. deps के बारे में सामान्य टिप्पणियां देखने के लिए, ज़्यादातर बिल्ड नियमों के मुताबिक तय किए गए सामान्य एट्रिब्यूट पर जाएं.

इस एट्रिब्यूट का इस्तेमाल, उन अन्य sh_library नियमों की सूची बनाने के लिए किया जाना चाहिए जो srcs में मौजूद कोड पर निर्भर, भाषा में बदले गए प्रोग्राम का सोर्स कोड उपलब्ध कराते हैं. इन नियमों से मिली फ़ाइलें, इस टारगेट के runfiles में मौजूद होंगी.

srcs

लेबल की सूची; डिफ़ॉल्ट [] है

इनपुट फ़ाइलों की सूची.

इस एट्रिब्यूट का इस्तेमाल, इस लाइब्रेरी से जुड़ी शेल स्क्रिप्ट सोर्स फ़ाइलों की सूची बनाने के लिए किया जाना चाहिए. स्क्रिप्ट, शेल के source या . कमांड का इस्तेमाल करके अन्य स्क्रिप्ट लोड कर सकती हैं.

sh_test

नियम का सोर्स देखें
sh_test(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, local, restricted_to, shard_count, size, tags, target_compatible_with, testonly, timeout, toolchains, visibility)

sh_binary नियम का इस्तेमाल, शैल स्क्रिप्ट को लागू करने के लिए किया जाता है. (sh_binary गलत नाम है: इसके आउटपुट ज़रूरी नहीं हैं कि बाइनरी हों.) इस नियम से यह पक्का होता है कि सभी डिपेंडेंसी बनाई गई हैं और वे runfiles एरिया में दिखती हैं. हमारा सुझाव है कि आप अपने sh_binary() नियमों का नाम स्क्रिप्ट के नाम में से एक्सटेंशन हटाकर, उनके नाम पर रखें (उदाहरण के लिए, .sh); नियम का नाम और फ़ाइल का नाम अलग-अलग होना चाहिए. sh_binary, शेलबैंग का इस्तेमाल करता है, ताकि किसी भी उपलब्ध इंटरप्रेटर का इस्तेमाल किया जा सके (उदाहरण के लिए, #!/bin/zsh)

उदाहरण

बिना किसी डिपेंडेंसी और कुछ डेटा फ़ाइलों वाली आसान शेल स्क्रिप्ट के लिए:

sh_binary(
    name = "foo",
    srcs = ["foo.sh"],
    data = glob(["datafiles/*.txt"]),
)

तर्क

विशेषताएं
name

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

deps

लेबल की सूची; डिफ़ॉल्ट [] है

इस टारगेट में जोड़ने के लिए, "लाइब्रेरी" टारगेट की सूची. ज़्यादातर बिल्ड नियमों में तय किए गए सामान्य एट्रिब्यूट पर deps के बारे में सामान्य टिप्पणियां देखें.

इस एट्रिब्यूट का इस्तेमाल, उन अन्य sh_library नियमों की सूची बनाने के लिए किया जाना चाहिए जो srcs में मौजूद कोड पर निर्भर, भाषा में बदले गए प्रोग्राम का सोर्स कोड उपलब्ध कराते हैं. इन नियमों से मिली फ़ाइलें, इस टारगेट के runfiles में मौजूद होंगी.

srcs

लेबल की सूची; डिफ़ॉल्ट [] है

इनपुट फ़ाइलों की सूची.

इस एट्रिब्यूट का इस्तेमाल, इस लाइब्रेरी से जुड़ी शेल स्क्रिप्ट सोर्स फ़ाइलों की सूची बनाने के लिए किया जाना चाहिए. स्क्रिप्ट, शेल के source या . कमांड का इस्तेमाल करके, दूसरी स्क्रिप्ट लोड कर सकती हैं.