如何获取/过滤特定范围内的历史条目?
我有一个很大的历史文件并且经常使用
history | grep somecommand
现在,我的记忆力很差,我还想看看我在输入命令时还做了什么。
现在我这样做:得到匹配,说4992 somecommand,然后我做
history | grep 49[0-9][0-9]
Run Code Online (Sandbox Code Playgroud)
这通常已经足够了,但我更愿意做得更精确,即查看从 4972 到 5012 的命令,即之前的 20 个命令和之后的 20 个命令。
我想知道是否有更简单的方法?我怀疑,自定义脚本是有序的,但也许其他人以前做过类似的事情。
我已经定义了一个 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 …
我正在编写部署脚本,如果发生任何错误,我需要回滚。
例如:
#!/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 失败,它会在我的屏幕上打印它并继续执行。我需要抓住那个错误并做些什么。
如何将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) 在 Bash 中,您可以按向上(和向下)箭头来遍历历史记录。然后,您可以在执行该命令之前对其进行修改。有时我错误地修改了命令,并希望将其重置为最初的历史记录。有没有办法做到这一点?
我试过执行一个空行,然后再次遍历历史记录,但相关行仍处于编辑状态。
要在项目文件夹中以管理员身份运行 bash 控制台 (Windows),目前我首先以管理员身份启动 bash,然后手动导航到极其费力的文件夹。有什么方法可以将图形快捷方式直接添加到此文件夹中以用于“以管理员身份运行”bash 控制台?
如何将所有.sh文件关联到 Windows 10 周年更新中包含的新 BASH?
我曾尝试.sh使用默认系统提示关联文件,C:\Windows\System32\bash.exe但它只是闪烁控制台窗口而没有结果。
bash windows-10 windows-subsystem-for-linux windows-10-v1607
我刚刚下载了新的 Windows 10 更新,我正在尝试使用“Windows 上的 Bash on Ubuntu”访问 F 驱动器上的一些文件,但我似乎无法访问我的 F 驱动器。有人可以帮忙吗?我尝试过更改目录并挂载 F 驱动器。
是否可以在适用于 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
我想要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 ×10
linux ×3
windows-10 ×3
windows-subsystem-for-linux ×3
history ×2
ssh ×2
command-line ×1
grep ×1
ubuntu ×1
watch ×1