我想通过对文件的更改进行跟踪tail -f,然后grep在终止之前打印出与命令匹配的第一行。什么是最简单的方法来做到这一点?到目前为止,我一直在尝试这样的事情:
tail -f foo.log | grep 'bar' | head -1
Run Code Online (Sandbox Code Playgroud)
然而,管道只是挂起,大概是由于缓冲。我也试过
tail -f foo.log | grep --line-buffered 'bar' | head -1
Run Code Online (Sandbox Code Playgroud)
这会打印出该行,但除非我点击 ^C,否则该过程不会终止,大概是因为需要第二行输入来终止head -1。解决这个问题的最佳方法是什么?
我写了一些函数.bashrc以便tmux于使用:
#!/bin/bash
# .bashrc
# vim tmux
#----- --------------------
tabc() { tmux kill-window; }
tabe() { tmux new-window; }
tabf() { tmux find-window $@; }
tabn() { tmux next-window; }
tabo() { ; } # <-- How to `tabonly`?
tabp() { tmux previous-window; }
qa() { tmux kill-session; }
sp() { tmux split-window; }
vsp() { tmux split-window -h; }
on() { tmux kill-pane -a; }
typeset -fx tab{c,e,f,n,o,p} {,v}sp qa on
Run Code Online (Sandbox Code Playgroud)
我想执行tabonly命令,但不知道如何执行。
由于我目前在我的提示中尝试新东西,我需要一种方法来判断性能影响是什么。
我如何监控呈现提示所需的时间以及获取 .*rc 所需的时间?
当我在办公室使用桌面时,我run.sh在后台启动了4 次脚本。
run.sh parameter1 &
run.sh parameter2 &
run.sh parameter3 &
run.sh parameter4 &
Run Code Online (Sandbox Code Playgroud)
然后我回到家,在我的笔记本电脑上打开一个终端,ssh 到我办公室的桌面。运行时ps -u jack,我看到了启动的进程:
3562 pts/1 00:00:00 bash
4540 pts/2 00:00:00 bash
4643 pts/3 00:00:00 bash
4748 pts/4 00:00:00 bash
Run Code Online (Sandbox Code Playgroud)
但是当我输入时jobs,我什么也没有。为什么我可以看到这四个正在运行的后台进程?
顺便说一句,我怎样才能将它们带回我当前的终端,以便我可以杀死其中一个,比如说run.sh parameter4 &?
我想使用SendTo文件夹中的 bash shell 脚本。当我将批处理或 exe 的快捷方式放入SendTo文件夹时,它会显示在 shellSend To上下文子菜单中,但是当快捷方式指向 shell 脚本时,它不会。
我正在测试的操作系统是 Win7 Home Premium SP1。该扩展名.sh已与 MinGW 的 bash.exe 相关联。
我的 shell 脚本有一个.sh扩展名,我尝试.sh使用此实用程序取消关联扩展名(我认为 MinGW 最初设置了它,但没有用),并尝试使用以下命令将其重新关联到 bash:
ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript
Run Code Online (Sandbox Code Playgroud)
在管理员 cmd shell 中。尽管这适用于命令提示符和资源管理器外壳(通过双击),但它不会显示在Send To菜单中,也不会通过直接将文件拖到脚本顶部来接受参数。
有谁知道我会怎么做?
NFS 共享已挂载到/vol/mynfsLinux 客户端。它不显示任何文件夹,ls并且 bash 完成也不起作用/vol/mynfs。但是在更改到子目录后,所有文件都可见。
$ ls /vol/mynfs
total 0
$ cd /vol/mynfs/test
$ ls # shows all files as expected now.
Run Code Online (Sandbox Code Playgroud)
为什么文件首先不可见,如何使它们始终可见?
我有一个位图,我想将它连接到许多视频的前面,作为一种标题屏幕或免责声明屏幕。
我尝试将其转换为与视频其余部分具有相同属性的视频。所以首先我反省视频:
ffmpeg version 2.2.1 Copyright (c) 2000-2014 the FFmpeg developers
built on Apr 11 2014 22:50:38 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 66.100 / 52. 66.100
libavcodec 55. 52.102 / 55. 52.102
libavformat 55. 33.100 / 55. 33.100
libavdevice 55. 10.100 / 55. 10.100
libavfilter 4. 2.100 / 4. 2.100
libavresample 1. 2. 0 / 1. …Run Code Online (Sandbox Code Playgroud) 我一直在尝试创建一个临时命名的 fifo 并在引用Bash: create anonymous fifo我看到他们正在使用mktemp -u来获取 fifo 的文件名。手册页指出这是不安全的。
-u, --dry-run
do not create anything; merely print a name (unsafe)
Run Code Online (Sandbox Code Playgroud)
为什么这是不安全的,我如何负责任地使用这种技术?
我定义了一个 shell 函数(我们称之为clock),我想将它用作另一个命令的包装器,类似于time函数,例如clock ls -R.
我的 shell 函数执行一些任务,然后以exec "$@".
我希望这个函数即使使用 shell 内置函数也能工作,例如clock time ls -R应该输出内置函数的结果time,而不是/usr/bin/time可执行文件。但exec最终总是运行命令。
如何让我的 Bash 函数作为一个也接受 shell 内置函数作为参数的包装器工作?
编辑:我刚刚了解到它time不是内置的 Bash,而是与管道相关的特殊保留字。我仍然对内置解决方案感兴趣,即使它不适用于time,但更通用的解决方案会更好。
我有一个程序需要我在程序运行时输入数据。想象一下它是这样的:
$ ./program
Hi there. What's your name? Zambezi
What is your quest? To make a program which runs nicely
What is your favourite color? Red
...
Run Code Online (Sandbox Code Playgroud)
现在,我有许多测试输入来运行我的程序。它们都包含以下内容:
Arthur, King of the Britons
To seek the Holy Grail
...
Run Code Online (Sandbox Code Playgroud)
然而,我的一些测试脚本失败了,不幸的是我很难准确地破译它们失败的地方,因为我的终端看起来像这样:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
Run Code Online (Sandbox Code Playgroud)
有没有办法我仍然可以stdin通过文件提供输入,但仍然让终端看起来好像我已经输入了所有内容?
如果重要的话,Linux Mint 16 是我的操作系统。