我想用当前正在执行的命令更新 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 窗格标题中显示当前命令,但它不起作用。有没有其他人对此有更好的解决方案,或者对上述问题有什么建议?
谢谢。
在下面的示例中,模块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)
我认为这是不一致的行为,并想了解为什么会发生这种情况.
我需要将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) 我想知道是否有人可以帮助这个?
我有一个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) 我正在尝试使用复杂的正则表达式来匹配文本正文中的URL.目的是划分文本中的URL.
我想做类似下面的事情
perl -pe 's/regex/left $1 right/g;' inputfile
Run Code Online (Sandbox Code Playgroud)
这将取代由词包围的匹配值的正则表达式的所有事件left和right这只是一个简单的例子来说明这一点-在真实的情景有加载-e表情,我期待再添这一特定匹配的目的.
正则表达式与URL匹配.我意识到匹配的URL是非常困难的,并且可能无法识别所有可能性,但合理的近似值会很好.我在http://daringfireball.net/2010/07/improved_regex_for_matching_urls找到了一个这样的近似值.
但是,我无法使用像上面这样的perl构造中的正则表达式.我尝试过不同的分隔符/,~但没有成功.
我刚刚发现了一个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行并重新运行它,然后它都foo并bar获得设定的值$1
我在这里错过了什么,或者这可能是一个bash错误?
(GNU bash,版本4.3.30)
我有一个 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》一书,但没有发现任何表明这是可能的。