我目前在 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) 我正在尝试设置通过 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) 我最近升级到 macOS Catalina,它提示我升级到 zsh shell。但现在当我尝试运行时jupyter notebook,它说找不到命令。我尝试在其中寻找它,.bashrc但.bashrc不存在。我该怎么办?我pip install jupyter在 home /Users/username 上做了,我使用的是 python3。
你们中有些人可能知道,升级到 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) 假设我有这三个脚本文件:(所有 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 执行,即bash、zsh、 和sh。
这三个函数“HelloFromXyz”全部应该像这样定义:
function HelloFromBash { echo "Hello $1, this is Bash speaking" }
对于 zsh 和 sh 变体来说类似。
但问题是:我想在全局范围内定义这些函数,每个特定的 shell 都有一个函数。
如何或在哪里为这三个 shell 定义全局函数?这样,当我运行上面的三个脚本时,它们每个都可以使用该 shell 的特定全局函数。
如果有一种统一的方法可以同时为多个 shell 定义(或导出,或任何适当的术语)全局函数,那就更好了。但我相信情况并非如此,每个 shell 似乎都使用自己的机制。
(编辑)我知道无论是交互式 shell 和/或登录 shell 都可能存在差异。我希望该函数在所有情况下都可以在 shell 脚本中使用。所以我可以手动打开终端,并运行使用所述全局函数的脚本。或者我可以运行一个调用相同 shell 脚本的后台进程。
如果这需要在多个文件中定义或导出相同的函数,或者在另一个文件中包含/采购一个函数,我很想了解详细信息。
我正在尝试开始使用 tmux 并“修复”tmux 在启动时不加载的事实.bashrc。我尝试进行所有修复,例如添加source ~/.bashrc或~/.profile创建~/.bash_profile并添加。即使我启动 tmux 并运行也source ~/.bashrc没有任何变化。
我.bashrc对用户名后面的目录显示方式以及颜色进行了一些细微的更改。当我启动 tmux 时,目录将按照没有任何更改的方式显示,.bashrc并且颜色与文本颜色相同,而在正常的 bash 会话中情况并非如此。
有人知道如何解决这个问题吗?
使用 sftp 从 Mac 到 Ubuntu 机器时,箭头键、退格键和 Tab 补全功能不起作用。具体来说,箭头键和退格键会产生字符序列,而制表符只会插入一个制表符。但是,当使用 sftp 从 Ubuntu 机器到 Mac 时,我没有任何问题。我无法弄清楚差异在哪里。我的目标是能够通过 sftp 进入 Ubuntu 机器并使用箭头键、退格键和制表符补全。
壳:
我已经在两台机器上尝试过zsh(bash从 /bin/sh 升级是大多数其他类似问题建议的修复)
SSHD_配置:
我已经在 Ubuntu 机器上的 sshd_config 文件中尝试了Subsystem sftp /usr/lib/openssh/sftp-server两者。Subsystem sftp internal-sftpMac 正在使用/usr/libexec/sftp-server.
我意识到这些设置是不同的,所以我怀疑这导致了差异,但我不知道到底是什么差异,也不知道如何解决它。我也找不到太多关于这些不同 sftp 服务器的文档。
谢谢您的任何建议!
我对 Windows 不太熟悉,所以请耐心等待。
我有一个文件夹,其中有几个文件名很长的文件,可以正常列出,但如果我尝试使用任何 Windows 应用程序打开它们,它们会显示为空(通过 file:/// 尝试过 Atom、VS Code、Notepad++ 和 Chrome) )。
如果我从终端(Git Bash 和 Powershell)捕获它们,它们可以毫无问题地显示。
向上移动目录,使完整路径更短,解决了问题。
我非常困惑为什么会发生这种情况。至少我预计会出现某种“文件名太长”的异常,当然我没想到它们会假装工作并且只是显示为空。
所以问题是:这是预期/已知的行为吗?或者也许有什么东西正在打破一切?(就像,我不知道,一个不支持长名称的防病毒软件,即使应用程序支持)。
请注意,至少有一个应用程序 (Atom) 是针对 64 位编译的,以防万一。
如何在此处的字符串中添加换行符?
我认为这非常有用。
例如:
gpg -e <<< 'login: my_login\npassword: my_password'
Run Code Online (Sandbox Code Playgroud)
我知道 的-e选项echo。
我正在尝试使用语法从 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)
我做错了什么?