在我的系统上,当使用彩色提示时,如果输出的最后一个字符不是换行符,则上一个命令输出的最后一行将被覆盖。
例如:使用默认的非彩色 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,不知道是什么版本。给我一个命令来检查操作系统,我会运行它。
$PATH 中有一些我不想要的路径。我不确定他们是如何到达那里的;他们不是来自我的.profile. 有没有办法确定哪些脚本正在修改 $PATH?
如何在 bash 或 zsh(或者其他一些 shell)中暂停整个命令序列?
例如,如果我运行:
sleep 100; echo foo
Run Code Online (Sandbox Code Playgroud)
并按Ctrl+ Z,sleep暂停并置于后台,但echo随后立即运行。
我希望后者不会发生,即echo应该在sleep恢复并完成后运行。
使用时time some_executable- 返回的系统和用户 CPU 时间实际上包括由指定的可执行文件启动的任何子进程的所有 CPU 时间(这对我来说实际上是新闻)。
但是,我只想获取启动进程产生的 CPU 时间,而不是它的子进程。那可能吗?
可能重复:
我可以保留 . 和 .. 出 .* 扩展?
我知道
mv * ~/whatever
mv .* ~/whatever
Run Code Online (Sandbox Code Playgroud)
但它试图移动.和..,这让我很痛苦。有没有办法 mv 所有文件,包括.*文件,但排除当前目录及其父目录?
我需要通过 creatbyproc.d 监视从未知应用程序到已知目录的写入。我将不得不让它启动并运行长达 36 小时,如果没有任何过滤器而不填满整个 HDD,这是不可能的。
这些日志很快就会变得非常大,我需要一种方法来只记录特定信息。
目前我的命令是:
sudo creatbyproc.d > /Users/MyUser/output.txt
Run Code Online (Sandbox Code Playgroud)
一个好的答案是按文件夹过滤: /private/tmp/
一个很好的答案将允许通配符过滤: /private/tmp/*.txt
我有一个迷你蓝牙键盘和一个运行基于 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)
如果设备空闲时间过长,蓝牙就会断开连接,我必须拔出有线键盘并重新键入相同的命令。
我正在寻找的是一种在启动时运行该命令的方法,以及一种检测它是否断开连接以便自动重新连接的方法。
令人讨厌的是,当我运行该命令时,键盘必须处于配对模式(即使它已经配对),否则它会告诉我主机已关闭。因此,脚本可能需要防止它因不活动而断开连接,否则我将不得不将其重新置于配对模式以重新连接。
所以回顾一下:
我想要的是将带有变量的 URL 发送到服务器,该服务器将根据某人登录和注销工作站的时间来跟踪他们何时出现。
我已经试过设置LoginHook在com.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) 如果我想使用只能使用一个内核的命令“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 中,set -x在脚本开头调用会导致在脚本执行时将命令打印在 stdout 上。什么是对的等效语法鱼贝?
bash ×10
linux ×3
command-line ×2
macos ×2
osx-lion ×2
unix ×2
zsh ×2
bluetooth ×1
colors ×1
cron ×1
fish ×1
login ×1
multi-core ×1
path ×1
performance ×1
prompt ×1
script ×1
shell ×1
shell-script ×1
time ×1