标签: bash

当我“退出”SSH 会话时,如何防止清除终端输出?

这是这种情况:我在 Ubuntu 中打开一个终端,然后执行ssh host-1,它按预期工作。从主机 1 开始,我做了ssh host-2,它再次正常工作并将我连接到主机 2。例如,我从 host-2 执行echo "blah",它会打印blah到屏幕上。问题:如果我这样做exit,屏幕会被清除,我只剩下以下内容:

Connection to host-2 closed.
myusername$

回到主机 1blah后,如何防止清除主机 2 上运行的命令(即,等)生成的屏幕输出exit

我已经完成了一些调试:我有一个朋友登录到主机 1 和主机 2,与上面完全一样,当他exit来自主机 2 时,他的屏幕没有被清除。所以它一定与我的环境有关......对吗?任何想法可能是什么?

我已经在 Windows XP 中使用 PuTTY 并从 Ubuntu 中的终端尝试过这个 - 无论如何都一样。

ssh bash

26
推荐指数
2
解决办法
6091
查看次数

bash:基于历史的智能自动完成?

我曾经发现了一个很棒的 bash 选项,但现在我不记得如何重新启用它。

它扩展了自动完成功能以查看您最近的历史记录。因此,如果您之前输入过open index.html然后open map.html输入

$ op
Run Code Online (Sandbox Code Playgroud)

并按Tab一次将自动完成到open map.html. 再次按下Tab将自动完成到open index.html

有谁知道我如何重新启用它?

bash autocomplete

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

如何在 gnu 屏幕下运行的 bash 脚本中响铃?

在屏幕外的 konsole 终端窗口中运行一个 bash shell,如果我输入,则 TERM 设置为 konsole-256color:

echo -n $'\a' 或
echo -n $'\eg' 或
./ringbell 其中 ./ringbell 的内容

#!/bin/bash
echo -n $'\eg';echo -n $'\a'

它们都会导致配置的音频铃声响起。如果我进入一个屏幕会话(我的 .screenrc 也将 term 设置为 konsole-256color),只有上述 3 个命令中的第二个(echo -n $'\eg')会导致听到音频铃声。我必须修改脚本还是屏幕有问题?

我手头的ubuntu版screen包是4.1.0~20120320gitdb59704-9。

linux terminal bash gnu-screen konsole

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

如何在 Mac OS X Yosemite 上更新 bash

只是想学习一下 bash 脚本。我的旧 bash 版本:

Bash version 3.2.53(1)-release...
Run Code Online (Sandbox Code Playgroud)

我已经用自制软件在 mac os x yosemite 上更新了我的 bash:

brew update
brew install bash
Run Code Online (Sandbox Code Playgroud)

然后在终端属性中,我将标准 shell 路径从 更改/bin/bash/usr/local/bin/bash(据我所知,这是自制软件安装更新后的 bash 的地方)。

然后我再次检查了结果(似乎一切都很好):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编写一个简单的 bash 脚本时:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done
Run Code Online (Sandbox Code Playgroud)

结果是:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times
Run Code Online (Sandbox Code Playgroud)

代替:

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 …
Run Code Online (Sandbox Code Playgroud)

bash shell shell-script bash-scripting macos

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

`tar: 无法连接到...: 解析失败` 是什么意思?

我正在编写一个练习 bash 脚本,它将文件夹保存为 tar 存档,名称为 date-foldername.bak

当未格式化的日期作为文件名的一部分插入时,脚本会失败,所以2022-05-09-work没问题,但默认的日期输出Mon 9 May 18:24:36 BST 2022将产生:

  tar: Cannot connect to Mon  9 May 18: resolve failed
Run Code Online (Sandbox Code Playgroud)

在这种情况下“解决失败”是什么意思?

这是代码:

#!/bin/bash

# Scrit accepts a folder name to back up as an parameter
# It saves the folder as a tar archive with the name date-foldername.bak 

echo "Beginning backup."
d=$(date)
echo "Today's date is $d"
tar --create --verbose --file="$d-$1.bak" "$1"
echo "Backup complete."
Run Code Online (Sandbox Code Playgroud)

linux bash tar

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

时间到达下午 4:00 时弹出通知?

我想知道是否有办法在特定时间从命令行显示通知或其他内容。就像时钟在下午 4:00 敲响一样。如果它使用 Ubuntu 的 notify-osd 工具显示它会很好:

在此处输入图片说明

linux bash notifications notify-osd ubuntu

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

如何在bash中添加日期?

例如,我有日期:1993 年 8 月 4 日,我想为其添加 348 天,我该如何在 bash 中做到这一点?

bash date

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

Bash 手册页:kill <pid> 与 kill -9 <pid>

我的手册页没有记录两者之间的区别

kill <pid>
Run Code Online (Sandbox Code Playgroud)

kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)

既然这些做了不同的事情,为什么 -9 没有记录在kill联机帮助页中? 我想也许这是一个特定于 shell 的东西,所以我也查看了 bash 手册页,但没有运气。

额外问题: -9 有什么作用?

unix bash kill manpages

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

并行运行命令并限制同时执行的命令数

顺序:for i in {1..1000}; do do_something $i; done- 太慢

并行:for i in {1..1000}; do do_something $i& done- 负载过多

如何并行运行命令,但不超过例如每时 20 个实例?

现在通常使用 hack like for i in {1..1000}; do do_something $i& sleep 5; done,但这不是一个好的解决方案。

更新 2:将接受的答案转换为脚本:http : //vi-server.org/vi/parallel

#!/bin/bash

NUM=$1; shift

if [ -z "$NUM" ]; then
    echo "Usage: parallel <number_of_tasks> command"
    echo "    Sets environment variable i from 1 to number_of_tasks"
    echo "    Defaults to 20 processes at a time, use like …
Run Code Online (Sandbox Code Playgroud)

linux bash parallel-processing

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

bash home/end/delete 键正在插入波浪号,或者如果前面有转义键,[1~ [3~

在bash,所述home/ end/delete键被插入,或者如果前面由逃逸密钥的代字号:[1~

所以我输入echo hellp,将光标移动到hel|lp并输入删除,然后bam,我得到了~tilde

另外,我输入echo hellp,将光标移到hel|lp并输入 esc 然后删除,然后 bam,我得到了[3~

$ echo hel~lp
hel~lp

$ echo hell[3~o
hell[3~o
~
Run Code Online (Sandbox Code Playgroud)

我的 bash 版本:

$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的行为cmd.exe

  1. 我希望 Esc 清除当前行/缓冲区
  2. 我希望 Home 将光标移动到第一个字符之前的行首
  3. 我希望 End 在第一个字符之前将光标移动到行尾
  4. 我想删除从当前行/缓冲区中删除下一个字符(光标右侧)

我必须编辑什么来解决这个问题?这是您的 bash 的默认设置吗?

更新:我在运行 Windows 程序 sh.exe(如您在 GNU bash 上面所见)的 Windows 机器上,使用 mingw 为 …

keyboard-shortcuts bash command-line key-binding

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