标签: bash

如何获取 Bash shell 历史记录范围

如何获取/过滤特定范围内的历史条目?

我有一个很大的历史文件并且经常使用

history | grep somecommand

现在,我的记忆力很差,我还想看看我在输入命令时还做了什么。

现在我这样做:得到匹配,说4992 somecommand,然后我做

history | grep 49[0-9][0-9]
Run Code Online (Sandbox Code Playgroud)

这通常已经足够了,但我更愿意做得更精确,即查看从 4972 到 5012 的命令,即之前的 20 个命令和之后的 20 个命令。

我想知道是否有更简单的方法?我怀疑,自定义脚本是有序的,但也许其他人以前做过类似的事情。

linux bash history grep

9
推荐指数
2
解决办法
9613
查看次数

如何修复我的颜色 bash 提示包装?

我已经定义了一个 bash 提示(使用 PROMPT_FUNCTION),如下所示:

function get_hg_prompt_prefix() {
    local APPLIED_COLOR=$1; shift
    local UNAPPLIED_COLOR=$1; shift
    local ALERT_COLOUR=$1; shift
    local TEXTCOLOR=$1; shift
    local mercurial_prompt_line="{{patches|join(:)|pre_applied(${APPLIED_COLOR})|post_applied(${TEXTCOLOR})|pre_unapplied(${UNAPPLIED_COLOR})|post_unapplied(${TEXTCOLOR})}\n\r}"
    local mercurial_status_prompt="{ ${ALERT_COLOUR}{status}${TEXTCOLOR}}"

    echo "$(hg prompt "${mercurial_prompt_line}" 2>/dev/null)$(hg prompt "${mercurial_status_prompt}" 2>/dev/null)"
}

function set_prompt() {
    bright='\[[01m\]'
    colors_reset='\[[00m\]'
    HOSTCOLOR=${colors_reset}='\[[34m\]'
    USERCOLOR=${colors_reset}='\[[01m\]'
    TEXTCOLOR=${colors_reset}='\[[32m\]'
    APPLIED_COLOR=${colors_reset}='\[[32m\]'
    UNAPPLIED_COLOR=${colors_reset}='\[[37m\]'
    ALERT_COLOUR=${colors_reset}='\[[31m\]'

    hg_status="$(get_hg_prompt_prefix $APPLIED_COLOR $UNAPPLIED_COLOR $ALERT_COLOUR $TEXTCOLOR)"
    ps1_prefix="${hg_status}$colors_reset($bright$(basename $VIRTUAL_ENV)$colors_reset) "
    PROMPTEND='$'
    PS1="${ps1_prefix}${USERCOLOR}\u${colors_reset}${TEXTCOLOR}@${colors_reset}${HOSTCOLOR}\h${colors_reset}${TEXTCOLOR} (\W) ${PROMPTEND}${colors_reset} "
}

PROMPT_COMMAND=set_prompt
Run Code Online (Sandbox Code Playgroud)

一般来说,这给了我一个多行提示,显示一些 hg 状态信息以及我当前的 virtualenv,看起来(没有颜色)是这样的:

buggy-wins.patch
 ! (saas) user@computer (~) $ 
Run Code Online (Sandbox Code Playgroud)

问题是,这与提示长度的计算有关(我认为!)并导致奇怪的终端包装问题和光标放置。例如,在一个 80 字符的终端中,这是我看到的提示(** 包围的字符是光标位置):

~) $ **a**nis) crose@chris-rose (~
Run Code Online (Sandbox Code Playgroud)

在足够宽以显示提示的终端中,换行发生的时间比它应该的要早得多;这是我可以在 108 …

bash

9
推荐指数
1
解决办法
4601
查看次数

如何检查ssh期间是否发生任何错误?

我正在编写部署脚本,如果发生任何错误,我需要回滚。

例如:

#!/bin/bash
ssh myapp '
    mkdir /some/dir
    # check if above command failed, and execute rollback script if needed
'
# or maybe do it from here?
Run Code Online (Sandbox Code Playgroud)

现在当我执行这个脚本时,如果 mkdir 失败,它会在我的屏幕上打印它并继续执行。我需要抓住那个错误并做些什么。

linux ssh bash

9
推荐指数
2
解决办法
1万
查看次数

如何在 Bash 中一起使用 watch 和 jobs 命令?

如何将watch命令与jobs命令一起使用,以便我可以监视后台作业何时完成?

我按如下方式执行它,但我没有从作业中获得输出:

watch jobs
Run Code Online (Sandbox Code Playgroud)

如果我自己运行作业,我的测试后台作业会得到以下结果:

jobs
[1]+  Running                 nohup cat /dev/random >/dev/null &
Run Code Online (Sandbox Code Playgroud)

linux bash watch

9
推荐指数
1
解决办法
5564
查看次数

如何在 Bash 中重置已编辑的历史记录行?

在 Bash 中,您可以按向上(和向下)箭头来遍历历史记录。然后,您可以在执行该命令之前对其进行修改。有时我错误地修改了命令,并希望将其重置为最初的历史记录。有没有办法做到这一点?

我试过执行一个空行,然后再次遍历历史记录,但相关行仍处于编辑状态。

bash history command-line

9
推荐指数
1
解决办法
735
查看次数

如何创建“以管理员身份运行”的 bash 快捷方式

要在项目文件夹中以管理员身份运行 bash 控制台 (Windows),目前我首先以管理员身份启动 bash,然后手动导航到极其费力的文件夹。有什么方法可以将图形快捷方式直接添加到此文件夹中以用于“以管理员身份运行”bash 控制台?

bash windows-10

9
推荐指数
2
解决办法
3万
查看次数

将 SH 脚本关联到 Windows bash

如何将所有.sh文件关联到 Windows 10 周年更新中包含的新 BASH?

我曾尝试.sh使用默认系统提示关联文件,C:\Windows\System32\bash.exe但它只是闪烁控制台窗口而没有结果。

bash windows-10 windows-subsystem-for-linux windows-10-v1607

9
推荐指数
2
解决办法
4628
查看次数

如何在 Windows 上使用 bash 更改驱动器?

我刚刚下载了新的 Windows 10 更新,我正在尝试使用“Windows 上的 Bash on Ubuntu”访问 F 驱动器上的一些文件,但我似乎无法访问我的 F 驱动器。有人可以帮忙吗?我尝试过更改目录并挂载 F 驱动器。

bash ubuntu windows-10 windows-subsystem-for-linux

9
推荐指数
1
解决办法
2万
查看次数

适用于 Linux 和 SSH 端口转发的 Windows 子系统

是否可以在适用于 Linux 的 Windows 子系统中使用 SSH 端口转发?

如果我下载本机 OpenSSH 包,我可以转发端口:

> ssh -L 5432:localhost:5432 me@host
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.6.5-x86_64-linode71 x86_64)
etc
Run Code Online (Sandbox Code Playgroud)

但是如果我在 WSL bash 中尝试同样的事情:

$ ssh -L 5432:localhost:5432 me@host
bind: Address already in use
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.6.5-x86_64-linode71 x86_64)
etc
Run Code Online (Sandbox Code Playgroud)

我以管理员身份运行 bash(并且尝试过它也不是以管理员身份运行)。

ssh bash port-forwarding windows-subsystem-for-linux windows-10-v1607

9
推荐指数
1
解决办法
2万
查看次数

如何为 bash 源命令重定向标准输入?

我想要source一个文件并为该源重定向 STDIN。是否可以?

例如,我有这个我想获取的文件:

# test.sh
export VALUE=SOMETHING
Run Code Online (Sandbox Code Playgroud)

这适用于外壳:

> source test.sh
> echo $VALUE
SOMETHING
>
Run Code Online (Sandbox Code Playgroud)

然而这不起作用

> echo anything | source test.sh
> echo $VALUE

>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做到这一点,还是因为“源”在当前 shell 中运行而无法暂时重定向 STDIN?

bash

8
推荐指数
1
解决办法
5851
查看次数