| <html devsite> |
| <head> |
| <meta name="project_path" value="/_project.yaml"> |
| <meta name="book_path" value="/versions/7.4.0/_book.yaml"> |
| </head> |
| <body> |
| <!-- |
| This document is synchronized with Bazel releases. |
| To edit, submit changes to the Bazel source code. |
| --> |
| |
| <!-- Generated by //src/main/java/com/google/devtools/build/docgen:build-encyclopedia.zip --> |
| <html> |
| <body> |
| |
| <h1 class="page-title">Shell Rules</h1> |
| |
| {% dynamic setvar source_file "src/main/java/com/google/devtools/build/docgen/templates/be/rules.vm" %} |
| {% dynamic setvar version "7.4.0" %} |
| {% dynamic setvar original_path "/reference/be/shell" %} |
| {% include "_buttons.html" %} |
| |
| |
| |
| <h2>Rules</h2> |
| <ul> |
| <li> |
| <a href="#sh_binary"> |
| sh_binary </a> |
| </li> |
| <li> |
| <a href="#sh_library"> |
| sh_library </a> |
| </li> |
| <li> |
| <a href="#sh_test"> |
| sh_test </a> |
| </li> |
| </ul> |
| |
| <h2 id="sh_binary"> |
| sh_binary |
| </h2> |
| |
| <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShBinaryRule.java" target="_blank"> |
| View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span> |
| </a> |
| |
| <pre class="rule-signature">sh_binary(<a href="#sh_binary.name">name</a>, <a href="#sh_binary.deps">deps</a>, <a href="#sh_binary.srcs">srcs</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="common-definitions.html#binary.args">args</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#binary.env">env</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#binary.output_licenses">output_licenses</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre> |
| |
| |
| <p> |
| The <code>sh_binary</code> rule is used to declare executable shell scripts. |
| (<code>sh_binary</code> is a misnomer: its outputs aren't necessarily binaries.) This rule ensures |
| that all dependencies are built, and appear in the <code>runfiles</code> area at execution time. |
| We recommend that you name your <code>sh_binary()</code> rules after the name of the script minus |
| the extension (e.g. <code>.sh</code>); the rule name and the file name must be distinct. |
| <code>sh_binary</code> respects shebangs, so any available interpreter may be used (eg. |
| <code>#!/bin/zsh</code>) |
| </p> |
| |
| <h4 id="sh_binary_examples">Example</h4> |
| |
| <p>For a simple shell script with no dependencies and some data files: |
| </p> |
| |
| <pre class="code"> |
| sh_binary( |
| name = "foo", |
| srcs = ["foo.sh"], |
| data = glob(["datafiles/*.txt"]), |
| ) |
| </pre> |
| |
| |
| |
| <h3 id="sh_binary_args">Arguments</h3> |
| <table class="table table-condensed table-bordered table-params"> |
| <colgroup> |
| <col class="col-param" /> |
| <col class="param-description" /> |
| </colgroup> |
| <thead> |
| <tr> |
| <th colspan="2">Attributes</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td id="sh_binary.name"><code>name</code></td> |
| <td> |
| <p><a href="/versions/7.4.0/concepts/labels#target-names">Name</a>; required</p> |
| <p>A unique name for this target.</p> |
| |
| </td> |
| </tr> |
| <tr> |
| <td id="sh_binary.deps"> |
| <code>deps</code> |
| </td> |
| <td> |
| <p>List of <a href="/versions/7.4.0/concepts/labels">labels</a>; default is <code>[]</code></p> |
| The list of "library" targets to be aggregated into this target. |
| See general comments about <code>deps</code> |
| at <a href="/versions/7.4.0/reference/be/common-definitions#typical.deps">Typical attributes defined by |
| most build rules</a>. |
| <p> |
| This attribute should be used to list other <code>sh_library</code> rules that provide |
| interpreted program source code depended on by the code in <code>srcs</code>. The files |
| provided by these rules will be present among the <code>runfiles</code> of this target. |
| </p> |
| |
| </td> |
| </tr> |
| <tr> |
| <td id="sh_binary.srcs"> |
| <code>srcs</code> |
| </td> |
| <td> |
| <p>List of <a href="/versions/7.4.0/concepts/labels">labels</a>; required</p> |
| The file containing the shell script. |
| <p> |
| This attribute must be a singleton list, whose element is the shell script. |
| This script must be executable, and may be a source file or a generated file. |
| All other files required at runtime (whether scripts or data) belong in the |
| <code>data</code> attribute. |
| </p> |
| |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <h2 id="sh_library"> |
| sh_library |
| </h2> |
| |
| <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShLibraryRule.java" target="_blank"> |
| View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span> |
| </a> |
| |
| <pre class="rule-signature">sh_library(<a href="#sh_library.name">name</a>, <a href="#sh_library.deps">deps</a>, <a href="#sh_library.srcs">srcs</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre> |
| |
| |
| <p> |
| The main use for this rule is to aggregate together a logical |
| "library" consisting of related scripts—programs in an |
| interpreted language that does not require compilation or linking, |
| such as the Bourne shell—and any data those programs need at |
| run-time. Such "libraries" can then be used from |
| the <code>data</code> attribute of one or |
| more <code>sh_binary</code> rules. |
| </p> |
| |
| <p> |
| You can use the <a href="/versions/7.4.0/reference/be/general.html#filegroup"><code>filegroup</code></a> rule to aggregate data |
| files. |
| </p> |
| |
| <p> |
| In interpreted programming languages, there's not always a clear |
| distinction between "code" and "data": after all, the program is |
| just "data" from the interpreter's point of view. For this reason |
| this rule has three attributes which are all essentially equivalent: |
| <code>srcs</code>, <code>deps</code> and <code>data</code>. |
| The current implementation does not distinguish between the elements of these lists. |
| All three attributes accept rules, source files and generated files. |
| It is however good practice to use the attributes for their usual purpose (as with other rules). |
| </p> |
| |
| <h4 id="sh_library_examples">Examples</h4> |
| |
| <pre class="code"> |
| sh_library( |
| name = "foo", |
| data = [ |
| ":foo_service_script", # an sh_binary with srcs |
| ":deploy_foo", # another sh_binary with srcs |
| ], |
| ) |
| </pre> |
| |
| |
| |
| <h3 id="sh_library_args">Arguments</h3> |
| <table class="table table-condensed table-bordered table-params"> |
| <colgroup> |
| <col class="col-param" /> |
| <col class="param-description" /> |
| </colgroup> |
| <thead> |
| <tr> |
| <th colspan="2">Attributes</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td id="sh_library.name"><code>name</code></td> |
| <td> |
| <p><a href="/versions/7.4.0/concepts/labels#target-names">Name</a>; required</p> |
| <p>A unique name for this target.</p> |
| |
| </td> |
| </tr> |
| <tr> |
| <td id="sh_library.deps"> |
| <code>deps</code> |
| </td> |
| <td> |
| <p>List of <a href="/versions/7.4.0/concepts/labels">labels</a>; default is <code>[]</code></p> |
| The list of "library" targets to be aggregated into this target. |
| See general comments about <code>deps</code> |
| at <a href="/versions/7.4.0/reference/be/common-definitions#typical.deps">Typical attributes defined by |
| most build rules</a>. |
| <p> |
| This attribute should be used to list other <code>sh_library</code> rules that provide |
| interpreted program source code depended on by the code in <code>srcs</code>. The files |
| provided by these rules will be present among the <code>runfiles</code> of this target. |
| </p> |
| |
| </td> |
| </tr> |
| <tr> |
| <td id="sh_library.srcs"> |
| <code>srcs</code> |
| </td> |
| <td> |
| <p>List of <a href="/versions/7.4.0/concepts/labels">labels</a>; default is <code>[]</code></p> |
| The list of input files. |
| <p> |
| This attribute should be used to list shell script source files that belong to |
| this library. Scripts can load other scripts using the shell's <code>source</code> |
| or <code>.</code> command. |
| </p> |
| |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| <h2 id="sh_test"> |
| sh_test |
| </h2> |
| |
| <a class="button button-with-icon" href="https://github.com/bazelbuild/bazel/blob/master/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShTestRule.java" target="_blank"> |
| View rule source<span class="material-icons icon-after" aria-hidden="true">open_in_new</span> |
| </a> |
| |
| <pre class="rule-signature">sh_test(<a href="#sh_test.name">name</a>, <a href="#sh_test.deps">deps</a>, <a href="#sh_test.srcs">srcs</a>, <a href="common-definitions.html#typical.data">data</a>, <a href="common-definitions.html#test.args">args</a>, <a href="common-definitions.html#common.compatible_with">compatible_with</a>, <a href="common-definitions.html#common.deprecation">deprecation</a>, <a href="common-definitions.html#common.distribs">distribs</a>, <a href="common-definitions.html#test.env">env</a>, <a href="common-definitions.html#test.env_inherit">env_inherit</a>, <a href="common-definitions.html#common.exec_compatible_with">exec_compatible_with</a>, <a href="common-definitions.html#common.exec_properties">exec_properties</a>, <a href="common-definitions.html#common.features">features</a>, <a href="common-definitions.html#test.flaky">flaky</a>, <a href="common-definitions.html#typical.licenses">licenses</a>, <a href="common-definitions.html#test.local">local</a>, <a href="common-definitions.html#common.restricted_to">restricted_to</a>, <a href="common-definitions.html#test.shard_count">shard_count</a>, <a href="common-definitions.html#test.size">size</a>, <a href="common-definitions.html#common.tags">tags</a>, <a href="common-definitions.html#common.target_compatible_with">target_compatible_with</a>, <a href="common-definitions.html#common.testonly">testonly</a>, <a href="common-definitions.html#test.timeout">timeout</a>, <a href="common-definitions.html#common.toolchains">toolchains</a>, <a href="common-definitions.html#common.visibility">visibility</a>)</pre> |
| |
| |
| <p>A <code>sh_test()</code> rule creates a test written as a Bourne shell script.</p> |
| |
| <p>See the <a href="/versions/7.4.0/reference/be/common-definitions#common-attributes-tests"> |
| attributes common to all test rules (*_test)</a>.</p> |
| |
| <h4 id="sh_test_examples">Examples</h4> |
| |
| <pre class="code"> |
| sh_test( |
| name = "foo_integration_test", |
| size = "small", |
| srcs = ["foo_integration_test.sh"], |
| deps = [":foo_sh_lib"], |
| data = glob(["testdata/*.txt"]), |
| ) |
| </pre> |
| |
| |
| |
| <h3 id="sh_test_args">Arguments</h3> |
| <table class="table table-condensed table-bordered table-params"> |
| <colgroup> |
| <col class="col-param" /> |
| <col class="param-description" /> |
| </colgroup> |
| <thead> |
| <tr> |
| <th colspan="2">Attributes</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td id="sh_test.name"><code>name</code></td> |
| <td> |
| <p><a href="/versions/7.4.0/concepts/labels#target-names">Name</a>; required</p> |
| <p>A unique name for this target.</p> |
| |
| </td> |
| </tr> |
| <tr> |
| <td id="sh_test.deps"> |
| <code>deps</code> |
| </td> |
| <td> |
| <p>List of <a href="/versions/7.4.0/concepts/labels">labels</a>; default is <code>[]</code></p> |
| The list of "library" targets to be aggregated into this target. |
| See general comments about <code>deps</code> |
| at <a href="/versions/7.4.0/reference/be/common-definitions#typical.deps">Typical attributes defined by |
| most build rules</a>. |
| <p> |
| This attribute should be used to list other <code>sh_library</code> rules that provide |
| interpreted program source code depended on by the code in <code>srcs</code>. The files |
| provided by these rules will be present among the <code>runfiles</code> of this target. |
| </p> |
| |
| </td> |
| </tr> |
| <tr> |
| <td id="sh_test.srcs"> |
| <code>srcs</code> |
| </td> |
| <td> |
| <p>List of <a href="/versions/7.4.0/concepts/labels">labels</a>; required</p> |
| The file containing the shell script. |
| <p> |
| This attribute must be a singleton list, whose element is the shell script. |
| This script must be executable, and may be a source file or a generated file. |
| All other files required at runtime (whether scripts or data) belong in the |
| <code>data</code> attribute. |
| </p> |
| |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <!-- Generated footer --> |
| |
| </body> |
| </html> |