标签: bash

如果输出不以换行符结尾,则彩色 bash 提示会覆盖上一个命令的输出

在我的系统上,当使用彩色提示时,如果输出的最后一个字符不是换行符,则上一个命令输出的最后一行将被覆盖。

例如:使用默认的非彩色 bash 提示符,我们有:

[myusername@myhostname 目录名]$ echo -n foo-bar
foo-bar[myusername@myhostname 目录名]$

这是预期的。

但是,使用以下彩色提示:

PS1='\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$ '

我们有(此处显示没有颜色):

myusername@myhostname:~/path/to/dirname$ echo -n foo-bar
myusername@myhostname:~/path/to/dirname$ rname$ 

光标现在位于行中的最后一个“r”。在提示符下键入一些字符会覆盖最后一个“rname$”。最终结果是,如果前一个命令的输出没有以换行符结尾,我就看不到它是什么。这是最重要的事情要解决。额外字符出现的方式,但过度写入,并不会打扰我,但也很好修复。

我已经尝试过使用来自 bash 文档的其他彩色提示,以及来自其他超级用户关于彩色提示的答案的一些彩色提示,它们的行为方式完全相同。

$ bash --version
GNU bash,版本 3.1.17(1)-release (x86_64-redhat-linux-gnu)
版权所有 (C) 2005 Free Software Foundation, Inc.

不确定,但我认为是CentOS,不知道是什么版本。给我一个命令来检查操作系统,我会运行它。

bash command-line colors prompt

5
推荐指数
1
解决办法
1360
查看次数

如何找出 $PATH 中路径的定义位置?

$PATH 中有一些我不想要的路径。我不确定他们是如何到达那里的;他们不是来自我的.profile. 有没有办法确定哪些脚本正在修改 $PATH?

bash path osx-lion

5
推荐指数
1
解决办法
2580
查看次数

如何在 shell 中挂起整个命令序列?

如何在 bash 或 zsh(或者其他一些 shell)中暂停整个命令序列?

例如,如果我运行:

sleep 100; echo foo
Run Code Online (Sandbox Code Playgroud)

并按Ctrl+ Zsleep暂停并置于后台,但echo随后立即运行。

我希望后者不会发生,即echo应该在sleep恢复并完成后运行。

bash zsh shell

5
推荐指数
1
解决办法
78
查看次数

使用时间获取进程的 CPU 使用率,而不是其子进程的 CPU 使用率

使用时time some_executable- 返回的系统和用户 CPU 时间实际上包括由指定的可执行文件启动的任何子进程的所有 CPU 时间(这对我来说实际上是新闻)。

但是,我只想获取启动进程产生的 CPU 时间,而不是它的子进程。那可能吗?

linux unix performance bash time

5
推荐指数
1
解决办法
1749
查看次数

如何在不包括 linux/mac 上的父目录的情况下 mv 点文件?

可能重复:
我可以保留 . 和 .. 出 .* 扩展?

我知道

mv * ~/whatever
mv .* ~/whatever
Run Code Online (Sandbox Code Playgroud)

但它试图移动...,这让我很痛苦。有没有办法 mv 所有文件,包括.*文件,但排除当前目录及其父目录?

linux unix bash command-line

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

如何在 OS X 中过滤命令的输出

我需要通过 creatbyproc.d 监视从未知应用程序到已知目录的写入。我将不得不让它启动并运行长达 36 小时,如果没有任何过滤器而不填满整个 HDD,这是不可能的。

这些日志很快就会变得非常大,我需要一种方法来只记录特定信息。

目前我的命令是:

sudo creatbyproc.d > /Users/MyUser/output.txt
Run Code Online (Sandbox Code Playgroud)

一个好的答案是按文件夹过滤: /private/tmp/

一个很好的答案将允许通配符过滤: /private/tmp/*.txt

bash bash-scripting macos

5
推荐指数
1
解决办法
2413
查看次数

Linux 启动脚本连接到蓝牙和 cron 以保持连接

我有一个迷你蓝牙键盘和一个运行基于 Debian 的发行版的 Raspberry Pi。我知道键盘的 MAC 地址,但对于这个问题,让我们使用AA:BB:CC:DD:EE:FF. 现在我必须连接有线键盘以及用于迷你键盘的蓝牙加密狗。在有线键盘上,我必须在设备启动时运行以下命令:

sudo hidd --connect AA:BB:CC:DD:EE:FF
Run Code Online (Sandbox Code Playgroud)

如果设备空闲时间过长,蓝牙就会断开连接,我必须拔出有线键盘并重新键入相同的命令。

我正在寻找的是一种在启动时运行该命令的方法,以及一种检测它是否断开连接以便自动重新连接的方法。

令人讨厌的是,当我运行该命令时,键盘必须处于配对模式(即使它已经配对),否则它会告诉我主机已关闭。因此,脚本可能需要防止它因不活动而断开连接,否则我将不得不将其重新置于配对模式以重新连接。

所以回顾一下:

  • 在启动时连接的脚本。我可以确保在打开键盘之前将键盘置于配对模式。
  • 防止它断开连接的脚本。也许某种信号每 60 秒发送一次?

linux bash bluetooth cron

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

每次从 OS X 登录和注销时如何执行脚本?

我想要的是将带有变量的 URL 发送到服务器,该服务器将根据某人登录和注销工作站的时间来跟踪他们何时出现。

我已经试过设置LoginHookcom.apple.loginwindow以“/Users/Username/Desktop/script.sh”。script.sh当我从终端自己执行它时工作,但它不从LoginHook.

该脚本执行以下内容,其中$USER应该是当前登录的用户名:

curl -kd "author=$USER&type=inout&message=in" https://some.server.com/timetrack
Run Code Online (Sandbox Code Playgroud)

script bash login osx-lion macos

5
推荐指数
1
解决办法
3182
查看次数

在 bash 或 zsh 脚本中使用所有内核的有效方法

如果我想使用只能使用一个内核的命令“do_something”处理大量文件,假设每个文件都可以独立处理,那么使用所有可用内核的最佳方法是什么?

此刻我做这样的事情:

#!/bin/zsh
TASK_LIMIT=8
TASKS=0
for i in *(.)
{
  do_something "$i"&
  TASKS=$(($TASKS+1))
  if [[ $TASKS -ge $TASK_LIMIT ]]; then
    wait; TASKS=0; fi
}
wait
Run Code Online (Sandbox Code Playgroud)

显然,这效率不高,因为在达到 $TASK_LIMIT 后,它会等待所有“do_something”完成。例如,在我的真实脚本中,我使用了大约 500% 的 8 核 CPU,而不是 >700%。

不使用 $TASK_LIMIT 运行不是一种选择,因为“do_something”可能会消耗大量内存。

理想情况下,脚本应该尝试将并行任务的数量保持在 $TASK_LIMIT:例如,如果 8 个任务中的第 1 个完成并且至少还有一个文件要处理,则脚本应该在下一个“do_something”运行而不是等待剩余的 7 个任务完成。有没有办法在 zsh 或 bash 中实现这一点?

bash zsh shell-script multi-core

5
推荐指数
1
解决办法
4841
查看次数

鱼壳中的“set -xe”

在 bash 中,set -x在脚本开头调用会导致在脚本执行时将命令打印在 stdout 上。什么是对的等效语法鱼贝

bash fish

5
推荐指数
1
解决办法
2546
查看次数