Shell scripts/zh: Difference between revisions

Ardenet (talk | contribs)
Created page with "某些环境(例如基于 BusyBox 的 OpenWRT)仅提供“受限” Shell(使用 <code>sh</code> 而非 <code>bash</code>)"
Ardenet (talk | contribs)
Created page with "函数 <code>writeShellScript</code> 可用于向 Nix 表达式中添加 Shell 脚本。"
Tags: Mobile edit Mobile web edit
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>


<div lang="en" dir="ltr" class="mw-content-ltr">
函数 <code>writeShellScript</code> 可用于向 Nix 表达式中添加 Shell 脚本。
The package <code>writeShellScript</code> can be used to add shell scripts to Nix expressions.
</div>


<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
Line 20: Line 18:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="External_builder.sh_script"></span>
== External builder.sh script ==
== 外部 builder.sh 脚本 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
较长的 Bash 脚本通常会保存为外部脚本文件,并在 Nix 中调用:
Longer Bash scripts are usually stored as external script files, and called from Nix:
</div>


{{file|default.nix|nix|3=
{{file|default.nix|nix|3=
Line 49: Line 44:
}}
}}


<div lang="en" dir="ltr" class="mw-content-ltr">
另见:
See also:
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://github.com/NixOS/nixpkgs/issues/23099 创造一个无源 derivation]
* [https://github.com/NixOS/nixpkgs/issues/23099 Make a derivation with no source]
* [https://nixos.org/guides/nix-pills/working-derivation.html Nix Pills: 7 . 制作 Derivation]
* [https://nixos.org/guides/nix-pills/working-derivation.html Nix Pills: Chapter 7. Working Derivation]
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
=== runCommand + builder.sh ===
=== runCommand + builder.sh ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
除了使用 <code>stdenv.mkDerivation</code> 之外,还可以通过 <code>runCommand</code> 来调用外部的 Bash 脚本:
Instead of <code>stdenv.mkDerivation</code>, <code>runCommand</code> can also be used to call an external Bash script:
</div>


{{file|default.nix|nix|3=
{{file|default.nix|nix|3=
Line 78: Line 65:
}}
}}


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Packaging"></span>
== Packaging ==
== 打包 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
示例:
Example:
</div>


<syntaxHighlight lang="nix">
<syntaxHighlight lang="nix">
Line 117: Line 101:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>wrapProgram</code> 会将原始脚本移动到 <code>.github-downloader.sh-wrapped</code>
<code>wrapProgram</code> will move the original script to <code>.github-downloader.sh-wrapped</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Command_not_found"></span>
=== Command not found ===
=== 命令未找到 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
例如,脚本会抛出错误 <code>svn: command not found</code>,这是因为缺少依赖包 <code>subversion</code>
For example, the script throws the error <code>svn: command not found</code>, because the dependency <code>subversion</code> is missing.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
当某个命令缺失时,可以使用 <code>nix-locate</code> 来查找对应的软件包名称。例如,<code>stat</code> 命令:
When a command is missing, you can use <code>nix-locate</code> to find the package name. for example, the <code>stat</code> command:
</div>


<syntaxHighlight lang="console">
<syntaxHighlight lang="console">
Line 138: Line 115:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Debugging_embedded_scripts"></span>
== Debugging embedded scripts ==
== 调试嵌入脚本 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
当 Bash 脚本执行失败时,它只会输出错误信息,而不会显示出错的代码位置。
When a bash script fails, it prints only an error message, but no code location.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
要跟踪命令和行号,可以使用
To trace commands and line numbers, one can use
</div>


{{file|test-trace.nix|nix|3=
{{file|test-trace.nix|nix|3=
Line 174: Line 146:
</syntaxHighlight>
</syntaxHighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
== POSIX shell ==
== POSIX shell ==
</div>


某些环境(例如基于 BusyBox 的 OpenWRT)仅提供“受限” Shell(使用 <code>sh</code> 而非 <code>bash</code>)
某些环境(例如基于 BusyBox 的 OpenWRT)仅提供“受限” Shell(使用 <code>sh</code> 而非 <code>bash</code>)