我正在尝试tail
在多台远程机器上创建一个日志文件并将输出转发到我的本地工作站。我希望在按下Ctrl-时关闭连接C。
目前我有以下功能,几乎可以按预期工作。
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
Run Code Online (Sandbox Code Playgroud)
连接关闭,我从tail
. 但是,由于输出是成批出现的,因此存在某种缓冲。
这是有趣的部分……
我可以在执行以下操作时看到相同的缓冲行为,并将“测试”附加到/var/log/server.log
远程机器上的文件4-5 次……
ssh server-01 "tail -f /var/log/server.log | grep test"
Run Code Online (Sandbox Code Playgroud)
......并找到了两种禁用它的方法......
将 -t 标志添加到 ssh。
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Run Code Online (Sandbox Code Playgroud)从远程命令中删除引号。
ssh server-01 tail -f /var/log/server.log | grep …
Run Code Online (Sandbox Code Playgroud)在bash
脚本中,我需要来自/proc/
文件的各种值。到现在为止,我有几十行像这样直接 grep 文件:
grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
为了提高效率,我将文件内容保存在一个变量中并进行了搜索:
a=$(</proc/meminfo)
echo "$a" | grep -oP '^MemFree: *\K[0-9]+'
Run Code Online (Sandbox Code Playgroud)
而不是多次打开文件,这应该只打开一次并grep变量内容,我认为这会更快 - 但实际上它更慢:
grep -oP '^MemFree: *\K[0-9]+' /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
dash
和也是如此zsh
。我怀疑/proc/
文件的特殊状态是一个原因,但是当我将 的内容复制/proc/meminfo
到常规文件并使用它时,结果是相同的:
a=$(</proc/meminfo)
echo "$a" | grep -oP '^MemFree: *\K[0-9]+'
Run Code Online (Sandbox Code Playgroud)
使用 here 字符串来保存管道使其稍微快一点,但仍然不如文件快:
bash 4.4.19 $ time for i in {1..1000};do grep ^MemFree /proc/meminfo;done >/dev/null
real 0m0.803s
user 0m0.619s
sys 0m0.232s
bash 4.4.19 $ a=$(</proc/meminfo)
bash 4.4.19 $ time for i in {1..1000};do echo …
Run Code Online (Sandbox Code Playgroud) 我想用 来安排作业at
,但我不确定如果计算机在指定时间挂起会发生什么:计算机再次唤醒后会立即执行命令(如anacron
)还是根本不执行(像cron
)?
如果您指定一个作业在过去的特定时间和日期绝对运行,该作业将尽快运行。
这就是联机帮助页所说的内容,但是它与我的情况不太匹配:我不想指定过去运行的作业,我想在将来运行它并询问at
如果计算机将如何处理它然后正在睡觉。
这不是计算机休眠时运行命令的副本,因为此问题询问是否at
会唤醒计算机以执行命令,也不是如何防止 atd 运行过去的作业?因为这是关于如何防止at
执行那些“旧”作业(尽管答案非常好!)。
我有一个bash
终端窗口,我只在其中执行一个命令foo
。因此,我希望每一行(当然在提示之后)都以“foo”开头,这样我只需输入函数的选项和参数,而不是循环函数名称。当然,能够更改自动插入的字符串也很好,但这对我来说不是必需的。
当我打开终端时,不输入任何内容,我想看到的是:
user@host:~/ $ foo
Run Code Online (Sandbox Code Playgroud)
然后我输入--option argument
,当我按下Enter该函数时foo
,将使用给定的--option
and调用该函数argument
。
我试图摆弄$PS1
和$PROMPT_COMMAND
使用xdotool type "foo "
并且令人惊讶的是它确实有效,但不幸的是它也在提示之前打印了“foo” ,这非常难看:
user@host:~/ $ PROMPT_COMMAND='xdotool type "foo "'
foo user@host:~/ $ foo
Run Code Online (Sandbox Code Playgroud)
我还发现并尝试了Ryan Caloras 的 bash-preexec script 中的preexec
函数,但它有完全相同的问题。
如何将 (a (executable-)string) 回显到提示中,使光标在行尾闪烁?是相关的,但那里的答案无法--option argument
向要执行的命令添加某些内容 ( )。不过我没有测试zsh
——bash
对于这么简单的事情应该有一个解决方案,你不觉得吗?
当在abiword
无头机器上调用文字处理器时,发出的警告之一如下(强调我的):
** (abiword:2020): WARNING **: clutter failed 0, get a life.
Run Code Online (Sandbox Code Playgroud)
这个警告是什么意思?这是复活节彩蛋吗?为什么abiword
要说这种尖酸刻薄的话?没有 GUI 会话,没有生命——这是暗示吗?
Abiword 的 SVN 存储库可以在abisource.com上找到。
bash ×2
command-line ×2
at ×1
gui ×1
headless ×1
linux ×1
prompt ×1
scheduling ×1
shell ×1
shell-script ×1
ssh ×1
tail ×1
variable ×1
zsh ×1