这是这种情况:我在 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 中的终端尝试过这个 - 无论如何都一样。
我曾经发现了一个很棒的 bash 选项,但现在我不记得如何重新启用它。
它扩展了自动完成功能以查看您最近的历史记录。因此,如果您之前输入过open index.html然后open map.html输入
$ op
Run Code Online (Sandbox Code Playgroud)
并按Tab一次将自动完成到open map.html. 再次按下Tab将自动完成到open index.html。
有谁知道我如何重新启用它?
在屏幕外的 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。
只是想学习一下 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 脚本,它将文件夹保存为 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) 我想知道是否有办法在特定时间从命令行显示通知或其他内容。就像时钟在下午 4:00 敲响一样。如果它使用 Ubuntu 的 notify-osd 工具显示它会很好:

我的手册页没有记录两者之间的区别
kill <pid>
Run Code Online (Sandbox Code Playgroud)
和
kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)
既然这些做了不同的事情,为什么 -9 没有记录在kill联机帮助页中? 我想也许这是一个特定于 shell 的东西,所以我也查看了 bash 手册页,但没有运气。
额外问题: -9 有什么作用?
顺序: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) 在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:
我必须编辑什么来解决这个问题?这是您的 bash 的默认设置吗?
更新:我在运行 Windows 程序 sh.exe(如您在 GNU bash 上面所见)的 Windows 机器上,使用 mingw 为 …
bash ×10
linux ×4
autocomplete ×1
command-line ×1
date ×1
gnu-screen ×1
key-binding ×1
kill ×1
konsole ×1
macos ×1
manpages ×1
notify-osd ×1
shell ×1
shell-script ×1
ssh ×1
tar ×1
terminal ×1
ubuntu ×1
unix ×1