【问题标题】:What shell does Jenkins use?詹金斯使用什么外壳?
【发布时间】:2012-09-09 11:21:01
【问题描述】:

在调用shell 命令时,Jenkins 使用什么 shell?我在 Linux 机器上运行 Jenkins。

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    我尝试通过将以下 shell 命令添加到我的 Jenkins 构建来打印 env。

    env
    

    输出显示我的实例的 SHELL 设置为 tcsh

    【讨论】:

    • $SHELL 是出了名的不可靠。试试:ps -p $$
    【解决方案2】:

    来自“执行外壳”部分的帮助/问号图标:

    运行一个 shell 脚本(默认为 sh,但这是可配置的) 构建项目。

    如果您转到管理 Jenkins --> 配置系统,您将找到一个选项(称为“Shell 可执行文件”)来设置您希望您的 shell 脚本使用的 shell 的名称或绝对路径...

    对于我没有配置此选项的系统...它使用 bash!

    【讨论】:

    • 嗯,我在当前版本的 Jenkins 中没有看到这个 :(
    • 我看到 CentOS 7.1 上带有 jenkins 2.7.4 的默认 shell 是 bash(操作系统上的 sh 是 bash),Debian 8 docker 容器上带有 jenkins 2.32.1 的默认 shell 是破折号(操作系统上的 sh是破折号)。
    • 有一种方法可以直接在 Jenkinsfile 管道脚本中更改默认的 shell 解释器:support.cloudbees.com/hc/en-us/articles/…
    • 谢谢!我将 #!/bin/bash 添加到了我的 Jenkins 脚本的顶部,这样我就可以使用 BASH 数组语法,这会导致构建中出现微妙和难以理解的错误
    【解决方案3】:

    就像在任何 shell 脚本文件中一样,只需在脚本的第一行声明你的 shell:

    #!/bin/bash
    

    【讨论】:

    • 这不起作用。使用的 shell 始终是启动进程的 *nix 用户的默认 shell。
    • 这适用于我,使用截至 2016/05 的最新版本的 Jenkins。
    • @JohnMcGehee 你用的是什么版本的詹金斯?
    • 注意#号后面不能有空格!
    • @PabloJomer 我正在使用 Jenkins 1.625.3
    【解决方案4】:

    您可以使用 Jenkins > 管理 Jenkins > 配置系统 > Shell 可执行文件 设置默认 shell。

    对于使用不同于默认 shell 的作业,请使用 shebang 开始 Execute shell 构建步骤,例如:

    #!/usr/bin/tcsh -e -x
    
    command1
    command2
       ...
    

    您甚至可以使用/usr/bin/env 来使用Python:

    #!/usr/bin/env python3
    

    注意#!后面不能有空格

    #! /usr/bin/tcsh    # Wrong
    

    这会报错,

    java.io.IOException: Cannot run program ""
    

    我在 Jenkins 1.625.3 上测试了上述内容

    【讨论】:

    • 与接受的答案基本相同,4年后发布。
    【解决方案5】:

    Jenkins 默认在PATH 环境变量中查找sh,但是结果(例如/bin/sh)可能指向不同的shell。例如,在 Ubuntu 6.10 或更高版本上,/bin/sh 是 Dash 的符号链接。

    所以对于“Jenkins 中使用什么外壳......”这个问题,这取决于。为避免不确定性,您可以:(以 Bash 为例)

    1. 在管理 Jenkins > 配置系统 > Shell > Shell 可执行文件中显式配置 shell 可执行文件,例如,/bin/bash。 (系统范围的配置)
    2. 使用 shebang 行指定应使用的解释器,例如,#!/usr/bin/env bash(特定于工作)

    【讨论】:

    • 很好的答案,对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 2023-03-26
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多