我经常将bash脚本添加到我的git存储库中,并且脚本在之前的linux文件系统中具有可执行权限git add.但是,在将添加的文件推送到远程存储库并拉入另一个位置之后,这些文件将显示为具有非可执行权限.似乎有两种方法可以解决问题:
1. chmod u+x $script
git commit -am "fixing the script permissions... again..."
Run Code Online (Sandbox Code Playgroud)
要么
2. git update-index --chmod=+x $script
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以让git简单地查看脚本上的文件权限git add,并认识到"嘿,这是一个可执行文件!" 并直接使用exectuable权限将其添加到存储库?
可能重复:
grep从bash脚本运行时失去颜色
我有一个简单的bash脚本在我的grep结果上打印标题:
#!/bin/bash
for var in "$@"
do
if [[ $var != -* ]];
then
break
fi
done
echo
echo -en "\e[1;31m ====== GREP $var ======\e[0m\n"
echo
grep $@
Run Code Online (Sandbox Code Playgroud)
但是最后的命令在某种程度上与grep直接从提示符实际运行不一样,因为结果中缺少颜色.grep直接执行时,结果显示紫色的文件名和红色匹配,但现在所有输出都是正常的终端文本颜色.有人能告诉我如何从我的脚本中获取彩色版本吗?
我正在尝试调试一个经常导致GDB不在断点时停止并显示SIGTRAP的程序。加载动态库和其他普通内容时会发生这种情况。大概有1000种这样的情况在我的断点最终被击中之前发生,因此对我而言,手动“继续”所有这些不相关的SIGTRAP是不可行的。但是,如果使用命令handle SIGTRAP nostop noprint,那么GDB不会在我的断点处停止。
似乎必须有一种教育GDB的方法,以便它了解哪种SIGTRAP有利于停止,而哪种不利于停止。显然,GDB知道它是否处于断点,因为输出非常可靠地不同:在断点处,它提及“ breakpoint”并显示断点编号-但在其他任何SIGTRAP中,它仅表示“ SIGTRAP”。因此,我真的希望GDB自己对自己说:“哇,这是SIGTRAP,这里没有断点-看着我,我要停止并打印一个SIGTRAP消息。无用的SIGTRAP消息完全破坏了调试会话!我如何安静地继续呢?” 请让我知道是否有人可以这样做。
我的程序将数据指针传递给第三方插件,意图数据应该是只读的,因此阻止插件写入数据对象会很好.理想情况下,如果插件尝试写入,则会出现段错误.我听说有一些方法可以对内存区域进行双重映射,这样第二个虚拟地址范围就指向相同的物理内存页面.第二个映射没有写入权限,导出的指针将使用此地址范围而不是原始(可写)地址范围.我宁愿不更改原始内存分配,无论它们是否碰巧使用malloc或mmap或其他.有人可以解释如何做到这一点?
在Eclipse Team Synchronization透视图的Synchronize选项卡中,双击文件显示内置的双向差异/合并编辑器.如果我安装了外部合并实用程序,则不会在Team Synchronization透视图中使用它 - 只能从Edit Conflicts ...菜单项访问它.将3向合并工具显示为Team Synchronization中的编辑器会更好.有谁知道配置Eclipse这样做的方法?提前致谢.
拜伦
当我在随Ubuntu 12.04一起分发的OpenJDK 6 JVM上运行我的多线程Java程序时,所有线程都安排在一个核心上.但是当我从Oracle最新的1.7 JDK在JVM上运行完全相同的程序时,它很好地围绕所有24个可用内核旋转了我的20个线程.在OpenJDK的文档解释了Java线程将被分配到本地线程,但它似乎并不奏效.我的OpenJDK安装中是否存在配置错误,或者它是否真的不支持多核硬件?
OpenJDK的:
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
Oracle JDK:
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
Run Code Online (Sandbox Code Playgroud) 我有一个HashMap密集的Java程序,其中几个类具有从final字段计算的哈希码.例如:
public class Foo {
private final int bar;
private final String zot;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + bar;
result = prime * result + zot.hashCode();
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器可以观察到对象初始化后哈希码不能改变,并将其预先计算到附加private final字段中.当前的Java编译器是否像Oracle JDK 7中那样执行此操作?我可以解散.class文件,但是JIT也可能在运行时进行这种优化,我不会在那里看到它.无论如何,我对除此之外的其他情况感兴趣,因此找到一种识别编译器自动执行的任何优化的通用方法会很棒.
我正在尝试将子shell中的输出行读入数组,并且我不愿意设置IFS,因为它是全局的.我不希望脚本的一部分影响以下部分,因为这是不好的做法,我拒绝这样做.在命令不是一个选项后恢复IFS,因为在编辑脚本后将reversion保持在正确的位置太麻烦了.我如何向bash解释我希望每个数组元素都包含整行,而不必设置任何会破坏未来命令的全局变量?
这是一个显示IFS不必要粘性的例子:
lines=($(egrep "^-o" speccmds.cmd))
echo "${#lines[@]} lines without IFS"
IFS=$'\r\n' lines=($(egrep "^-o" speccmds.cmd))
echo "${#lines[@]} lines with IFS"
lines=($(egrep "^-o" speccmds.cmd))
echo "${#lines[@]} lines without IFS?"
Run Code Online (Sandbox Code Playgroud)
输出是:
42 lines without IFS
6 lines with IFS
6 lines without IFS?
Run Code Online (Sandbox Code Playgroud) 这个bash脚本应该从grep结果中删除前导空格:
#!/bin/bash
grep --color=always $@ | sed -r -e's/:[[:space:]]*/:/'
Run Code Online (Sandbox Code Playgroud)
但它与空白不匹配.如果我将替换文本更改为" - ",它会显示在输出中,但它仍然不会删除空格.我试过没有"*",逃避"*","+"等,但没有任何作用.有谁知道为什么不呢?
(我在Ubuntu 12.04上使用sed版本4.2.1.)
谢谢大家,这是我修改过的脚本,它显示了grep颜色并修剪了前导空白:
#!/bin/bash
grep --color=always $@ | sed -r -e's/[[:space:]]+//'
Run Code Online (Sandbox Code Playgroud)