小编sta*_*fry的帖子

如何在 tmux 窗格标题中显示当前命令

我想用当前正在执行的命令更新 tmux 窗格标题,或者如果没有命令,则使用当前 shell 的名称。到目前为止我想出的是这个,在 bashrc 中:

case ${TERM} in

  screen*)       
    PROMPT_COMMAND='printf "\033]2;bash\033\\"'
    set -o functrace
    trap 'echo -ne "\033]2;$BASH_COMMAND\033\\"' DEBUG
    ;;

   ...

esac
Run Code Online (Sandbox Code Playgroud)

该方法源自此处:http : //www.davidpashley.com/articles/xterm-titles-with-bash.html

这部分有效 - 它完成了所需但会导致其他问题:新 shell 中的第一个提示前缀为

"'"' DEBUG"
Run Code Online (Sandbox Code Playgroud)

以及所有剩余的命令

"
Run Code Online (Sandbox Code Playgroud)

它还可以防止在命令行上给出的某些命令失败,例如:

$ ps -h $$
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
Run Code Online (Sandbox Code Playgroud)

因此,虽然上述确实允许在 tmux 窗格标题中显示当前命令,但它不起作用。有没有其他人对此有更好的解决方案,或者对上述问题有什么建议?

谢谢。

bash tmux

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

为什么向模块添加方法以不同方式添加子模块?

在下面的示例中,模块M包含在类中A,然后重新打开以添加子模块MM和方法.然后,它包含在课堂中B:

module M
  def foo; "foo" end 
end

class A
  include M
end

module MM
  def baz; "baz" end 
end

module M
  include MM
  def bar; "bar" end 
end

class B
  include M
end
Run Code Online (Sandbox Code Playgroud)

两者的实例A,并B可以访问M的方法,无论何时加入他们,但只B具有子模块的方法MM:

a = A.new
a.foo
a.bar
a.baz # => Error: not defined

b = B.new
b.foo
b.bar
b.baz
Run Code Online (Sandbox Code Playgroud)

我认为这是不一致的行为,并想了解为什么会发生这种情况.

ruby module

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

为什么'git status'会运行过滤器?

我需要将git repo克隆到现有目录中($HOME用于管理dotfiles).我正在做一个裸克隆并重新配置它,因为我需要克隆到现有的不干净的工作目录中.它工作,但我发现git status尝试在首次使用时运行过滤器.为什么会这样做,我该如何预防呢?

试试这个:

# create a test repo
mkdir test && cd test
git init
echo hello > hello.txt
git add .
git commit -m 1
echo 'hello.txt filter=foo diff=bar' > .gitattributes
git add .
git commit -m 2

# clone it bare and configure it
mkdir ../test2 && cd ../test2
git clone --bare ../test .git
git config core.bare false
git config core.logallrefupdates true
git reset
git checkout .
git config …
Run Code Online (Sandbox Code Playgroud)

git

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

当特定子进程终止时,如何在bash脚本中接收通知?

我想知道是否有人可以帮助这个?

我有一个bash脚本.它启动一个子流程,这是另一个基于gui的应用程序.然后bash脚本进入交互模式,从用户获取输入.这种交互模式无限期地继续.我希望它在子进程中的gui-application退出时终止.

我看过SIGCHLD,但这似乎不是答案.这是我尝试过的,但是当编程结束时我没有收到信号.

set -o monitor

"${prog}" &
prog_pid=$!

function check_pid {
    kill -0 $1 2> /dev/null
}

function cleanup {
    ### does cleanup stuff here
    exit
}


function sigchld {
    check_pid $prog_pid
    [[ $? == 1 ]] && cleanup
}

trap sigchld SIGCHLD
Run Code Online (Sandbox Code Playgroud)

更新了以下答案.我现在使用'nosid'的建议.我现在有另一个相关的问题,即随后的交互式过程是一个基本的菜单驱动过程,它阻止等待来自用户的键输入.如果子进程结束,则直到收到输入后才处理USR1信号.有没有办法强制立即处理信号?

等待看起来像这样:

stty raw                 # set the tty driver to raw mode 
max=$1                   # maximum valid choice
choice=$(expr $max + 1)  # invalid choice
while [[ $choice -gt $max ]]; do
    choice=`dd if=/dev/tty bs=1 count=1 …
Run Code Online (Sandbox Code Playgroud)

bash nonblocking child-process sigchld

4
推荐指数
1
解决办法
3672
查看次数

Perl正则表达式替换URL

我正在尝试使用复杂的正则表达式来匹配文本正文中的URL.目的是划分文本中的URL.

我想做类似下面的事情

perl -pe 's/regex/left $1 right/g;' inputfile
Run Code Online (Sandbox Code Playgroud)

这将取代由词包围的匹配值的正则表达式的所有事件leftright这只是一个简单的例子来说明这一点-在真实的情景有加载-e表情,我期待再添这一特定匹配的目的.

正则表达式与URL匹配.我意识到匹配的URL是非常困难的,并且可能无法识别所有可能性,但合理的近似值会很好.我在http://daringfireball.net/2010/07/improved_regex_for_matching_urls找到了一个这样的近似值.

但是,我无法使用像上面这样的perl构造中的正则表达式.我尝试过不同的分隔符/,~但没有成功.

regex url perl

4
推荐指数
1
解决办法
6803
查看次数

如果后跟管道(bash bug?),Bash变量默认不起作用

我刚刚发现了一个bash我不明白的奇怪行为.表达方式

${variable:=default}
Run Code Online (Sandbox Code Playgroud)

如果尚未设置,则设置variable为该值default.请考虑以下示例:

#!/bin/bash
file ${foo:=$1}
echo "foo >$foo<"
file ${bar:=$1} | cat
echo "bar >$bar<"
Run Code Online (Sandbox Code Playgroud)

输出是:

$ ./test myfile.txt
myfile.txt: ASCII text
foo >myfile.txt<
myfile.txt: ASCII text
bar ><
Run Code Online (Sandbox Code Playgroud)

您会注意到变量foo被赋值为$1但变量bar不是,即使它的默认结果被显示给file命令.

如果删除无害管进入cat从第4行并重新运行它,然后它都foobar获得设定的值$1

我在这里错过了什么,或者这可能是一个bash错误?

(GNU bash,版本4.3.30)

linux bash

4
推荐指数
1
解决办法
148
查看次数

来自数据文件的 Gnuplot 3D 条形图

我有一个 gnuplot 脚本,可以生成如下所示的条形图:

酒吧示例

输入数据位于具有多列的文件中,每列最终构成图表中的一个簇(示例中显示了 2 个簇)。每个文件在图表中贡献一个条形(示例中有 9 个)。每个文件可能有大量行。

该脚本获取输入数据文件,并使用该stats命令生成包含原始文件每列一行的新文件。每行包含其源列的平均值、最小值和最大值。

然后使用这些新文件绘制带有误差线的条形图。每个文件代表一个条形图,每一行构成一个簇。剧情代码如下:

plot for [f in FILES] f.'.stats' using 2:3:4 title columnhead(1), \
     '' using (0):xticlabels(1) with lines
Run Code Online (Sandbox Code Playgroud)

现在我有第二组文件,可以生成另一个类似的条形图。我想将这些图表组合成一个,这样就会有两行 3D 条形图,一排在另一排前面(用 3D 样式渲染 - 新的“z”轴代表两个数据集(两组)的FILES)。

这是一个示例来说明我所追求的外观(显然不是用 gnuplot 制作的!):

在此输入图像描述

我可以用 Gunplot 做到这一点吗?

我已经阅读了用户手册和《Gnuplot In Action》一书,但没有发现任何表明这是可能的。

gnuplot

3
推荐指数
1
解决办法
4321
查看次数

标签 统计

bash ×3

child-process ×1

git ×1

gnuplot ×1

linux ×1

module ×1

nonblocking ×1

perl ×1

regex ×1

ruby ×1

sigchld ×1

tmux ×1

url ×1