标签: bash

Jenkins Pipeline sh 步骤挂起

我目前在 Ubuntu 18.04 上运行 Jenkins 时遇到问题。sh 管道步骤挂起并最终超时并显示以下消息:

[Pipeline] sh
process apparently never started in /var/lib/jenkins/workspace/members-only-demo@tmp/durable-494a3b0d
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
Cannot contact : java.io.FileNotFoundException: File '/var/lib/jenkins/workspace/members-only-demo@tmp/durable-494a3b0d/output.txt' does not exist
Run Code Online (Sandbox Code Playgroud)

这是线程转储:

Thread #6
    at DSL.sh(completed process (code -2) in /var/lib/jenkins/workspace/members-only-demo@tmp/durable-494a3b0d; recurrence period: 15000ms; check task scheduled; cancelled? false done? false)
    at WorkflowScript.run(WorkflowScript:9)
    at DSL.stage(Native Method)
    at WorkflowScript.run(WorkflowScript:8)
    at DSL.node(running on )
    at WorkflowScript.run(WorkflowScript:3)
Run Code Online (Sandbox Code Playgroud)

管道脚本如下:

#!/usr/bin/env groovy
node {
        stage('Checkout') {
            checkout([$class: 'GitSCM', branches: [[name: '*/da-demo']], doGenerateSubmoduleConfigurations: …
Run Code Online (Sandbox Code Playgroud)

linux bash jenkins

5
推荐指数
1
解决办法
9334
查看次数

使用 AWS Session Manager 的 SSH ProxyCommand - 未启动 shell

我正在尝试设置通过 AWS Session Manager 使用 ssh 命令连接的代理(由 ansible 使用)。截至目前,我可以使用 AWS CLI 命令连接到我的虚拟机,如下所示

aws ssm start-session --target i-XXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

考虑到这一点,我尝试在 ssh 配置中设置 ProxyCommand,这与 AWS 推荐的相同

host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --region eu-west-2"
Run Code Online (Sandbox Code Playgroud)

现在它变得很奇怪,它显示为连接已打开,但它只是挂在那里,没有将输入重定向到虚拟机,也没有打印提示。

$ ssh i-XXXXXXXXXXXX  -vvvvvvvvv
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/foo/.ssh/config
debug1: /home/foo/.ssh/config line 1: Applying options for i-*
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Executing …
Run Code Online (Sandbox Code Playgroud)

linux ssh bash amazon-web-services ubuntu

5
推荐指数
1
解决办法
4937
查看次数

无法在 macOS 中的新 zsh shell 中打开 Jupyter Notebook

我最近升级到 macOS Catalina,它提示我升级到 zsh shell。但现在当我尝试运行时jupyter notebook,它说找不到命令。我尝试在其中寻找它,.bashrc.bashrc不存在。我该怎么办?我pip install jupyter在 home /Users/username 上做了,我使用的是 python3。

terminal bash zsh shell macos

5
推荐指数
1
解决办法
3万
查看次数

针对 Mac OS Catalina 从 bash 迁移到 zsh

你们中有些人可能知道,升级到 Mac OS Catalina 后,Apple 提示用户迁移到 zsh 作为默认 shell。

现在,每次打开 bash 时都会出现一条警告。可以将以下行添加到您的 ~/.bash_profile 中(对于感兴趣的人),以禁用它。

export BASH_SILENCE_DEPRECATION_WARNING=1
Run Code Online (Sandbox Code Playgroud)

然而,我认为很多人(包括我)都想转向 zsh。

我当前的 ~/.bash_profile 如下所示:

# searches this directory for executables first
export PATH="/usr/local/bin:$PATH"

# jenv
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# pyenv
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

# nodenv
export PATH="$HOME/.nodenv/bin:$PATH"
eval "$(nodenv init -)"

# node-build-definitions
export NODE_BUILD_DEFINITIONS="/usr/local/opt/node-build-update-defs/share/node-build"

# bash auto-completion
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion    
fi …
Run Code Online (Sandbox Code Playgroud)

bash zsh oh-my-zsh macos-catalina

5
推荐指数
1
解决办法
9523
查看次数

如何或在哪里定义要在 bash、zsh、sh 脚本中使用的全局函数?

假设我有这三个脚本文件:(所有 3 个都是可执行的)

bash-test.sh:

#!/bin/bash
HelloFromBash RocketNuts
Run Code Online (Sandbox Code Playgroud)

zsh-test.sh:

#!/bin/zsh
HelloFromZsh RocketNuts
Run Code Online (Sandbox Code Playgroud)

sh-test.sh:

#!/bin/sh
HelloFromSh RocketNuts
Run Code Online (Sandbox Code Playgroud)

从 shebang 中您可以看出,这些脚本分别由不同的 shell 执行,即bashzsh、 和sh

这三个函数“HelloFromXyz”全部应该像这样定义:
function HelloFromBash { echo "Hello $1, this is Bash speaking" }
对于 zsh 和 sh 变体来说类似。

但问题是:我想在全局范围内定义这些函数,每个特定的 shell 都有一个函数。

如何或在哪里为这三个 shell 定义全局函数?这样,当我运行上面的三个脚本时,它们每个都可以使用该 shell 的特定全局函数。

如果有一种统一的方法可以同时为多个 shell 定义(或导出,或任何适当的术语)全局函数,那就更好了。但我相信情况并非如此,每个 shell 似乎都使用自己的机制。

(编辑)我知道无论是交互式 shell 和/或登录 shell 都可能存在差异。我希望该函数在所有情况下都可以在 shell 脚本中使用。所以我可以手动打开终端,并运行使用所述全局函数的脚本。或者我可以运行一个调用相同 shell 脚本的后台进程。
如果这需要在多个文件中定义或导出相同的函数,或者在另一个文件中包含/采购一个函数,我很想了解详细信息。

bash zsh sh shell-script global

5
推荐指数
1
解决办法
4583
查看次数

Tmux 似乎没有加载 .bashrc

我正在尝试开始使用 tmux 并“修复”tmux 在启动时不加载的事实.bashrc。我尝试进行所有修复,例如添加source ~/.bashrc~/.profile创建~/.bash_profile并添加。即使我启动 tmux 并运行也source ~/.bashrc没有任何变化。

.bashrc对用户名后面的目录显示方式以及颜色进行了一些细微的更改。当我启动 tmux 时,目录将按照没有任何更改的方式显示,.bashrc并且颜色与文本颜色相同,而在正常的 bash 会话中情况并非如此。

有人知道如何解决这个问题吗?

linux terminal bash tmux

5
推荐指数
1
解决办法
1128
查看次数

从 MacOS 到 Ubuntu 的 SFTP 不支持箭头键、退格键或 Tab 补全

使用 sftp 从 Mac 到 Ubuntu 机器时,箭头键、退格键和 Tab 补全功能不起作用。具体来说,箭头键和退格键会产生字符序列,而制表符只会插入一个制表符。但是,当使用 sftp 从 Ubuntu 机器到 Mac 时,我没有任何问题。我无法弄清楚差异在哪里。我的目标是能够通过 sftp 进入 Ubuntu 机器并使用箭头键、退格键和制表符补全。

壳:

我已经在两台机器上尝试过zshbash从 /bin/sh 升级是大多数其他类似问题建议的修复)

SSHD_配置:

我已经在 Ubuntu 机器上的 sshd_config 文件中尝试了Subsystem sftp /usr/lib/openssh/sftp-server两者。Subsystem sftp internal-sftpMac 正在使用/usr/libexec/sftp-server.

我意识到这些设置是不同的,所以我怀疑这导致了差异,但我不知道到底是什么差异,也不知道如何解决它。我也找不到太多关于这些不同 sftp 服务器的文档。

谢谢您的任何建议!

bash sftp ubuntu macos

5
推荐指数
2
解决办法
1883
查看次数

具有长文件名的文件显示为空

我对 Windows 不太熟悉,所以请耐心等待。

我有一个文件夹,其中有几个文件名很长的文件,可以正常列出,但如果我尝试使用任何 Windows 应用程序打开它们,它们会显示为空(通过 file:/// 尝试过 Atom、VS Code、Notepad++ 和 Chrome) )。

如果我从终端(Git Bash 和 Powershell)捕获它们,它们可以毫无问题地显示。

向上移动目录,使完整路径更短,解决了问题。

我非常困惑为什么会发生这种情况。至少我预计会出现某种“文件名太长”的异常,当然我没想到它们会假装工作并且只是显示为空。

所以问题是:这是预期/已知的行为吗?或者也许有什么东西正在打破一切?(就像,我不知道,一个不支持长名称的防病毒软件,即使应用程序支持)。

请注意,至少有一个应用程序 (Atom) 是针对 64 位编译的,以防万一。

powershell google-chrome bash notepad++ windows-10

5
推荐指数
0
解决办法
420
查看次数

向此处的字符串添加新行

如何在此处的字符串中添加换行符?
我认为这非常有用。
例如:

gpg -e <<< 'login: my_login\npassword: my_password'
Run Code Online (Sandbox Code Playgroud)

我知道 的-e选项echo

linux bash

5
推荐指数
1
解决办法
2009
查看次数

通过 Windows 终端启动 WSL 脚本:节点:未找到命令

我正在尝试使用语法从 WT 在 WSL 中运行 node.js 脚本wsl.exe <command>

但是,当以这种方式启动时,我无法让它找到 Node 并得到以下信息:

PS C:\> wsl.exe -- node -v
/bin/bash: node: command not found
Run Code Online (Sandbox Code Playgroud)

在 WSL 中,节点已安装并按预期工作:

/mnt/c$ node -v
v14.13.0
Run Code Online (Sandbox Code Playgroud)

在 bash 脚本中以防万一:

// test.sh
#!/bin/bash
node -v

/mnt/c$ ./test.sh
v14.13.0

PS C:\> wsl.exe -- ./test.sh
/mnt/c/test.sh: line 2: node: command not found

Run Code Online (Sandbox Code Playgroud)

我做错了什么?

bash node.js windows-10 windows-subsystem-for-linux

5
推荐指数
1
解决办法
692
查看次数