【问题标题】:svn diff calling a csh script calling .cshrc despite csh -f flagsvn diff 调用 csh 脚本调用 .cshrc 尽管有 csh -f 标志
【发布时间】:2015-07-02 15:31:45
【问题描述】:

在我的 RHEL 机器上获得了一个标准脚本,用于将 svn diff 输出传递给 vimdiff:

#!/bin/csh -f
vimdiff ${6} ${7}

将其添加到路径中,并在 ~/.subversion/config 中设置 diff-cmd

这很好用,而且我拥有我需要的所有差异。 但是,似乎 csh 的 -f 标志被忽略并且我的 .cshrc 文件正在运行:我可以在 vimdiff 打开之前看到它吐出的回显消息。

我的 .cshrc 连接到一堆许可证服务器,所以需要一段时间,这不太好。

顺便说一句,直接运行此脚本 (svndiff.sh x x x x x file1 file2) 不会调用 .cshrc

svn(版本 1.6.11)自己做这个吗?任何想法为什么会发生这种情况以及可以做些什么?

【问题讨论】:

    标签: svn csh tcsh vimdiff


    【解决方案1】:

    很可能它被称为csh svndiff.sh。 hashbang 只有 如果它被称为./svndiff.sh,则执行。

    还建议在您的 cshrc 中执行此操作:

    setenv PATH ~/Local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games
    # ...more environment settings
    
    # Only load these for interactive shells
    if ( $?prompt ) then
      set autolist
      # ...more settings, keybinds, etc.
    endif
    

    但是,真的,不要将csh 脚本用于此类事情。如果可能,请使用 bourne shell。从 1995 年开始,“Csh Programming Considered Harmful”中提出的几乎所有问题在 20 年后仍然适用于 tcsh

    【讨论】:

    • 提示检查完成了这项工作 - 但它使我做的其他事情中断(通过 ssh 运行命令而没有需要运行脚本的交互式 shell,我不想在这种情况下运行)重命名 @987654327 @ 到 svndiff 停止 svn 将其称为 csh svndiff.sh,然后使用 hashbang(我自然地用 /bin/bash 替换了它)。
    • 我错了!重命名并不能解决问题。更改我的默认 shell 不是一个选项,无论如何我都需要在我的 .bashrc 中使用这些脚本,我会再次遇到这个问题。我似乎无法强制 svn diff 直接调用 diff-cmd 而不是在 shell 中生成,这无济于事。
    • 设法使用提示检查并通过检查 $HOST 来保持我的脚本运行,因为这可以区分我的情况。谢谢,我仍然有兴趣了解更多关于 svn 调用(我认为) sh -c 'diff-cmd' 而不是 diff-cmd 本身的信息。
    猜你喜欢
    • 1970-01-01
    • 2019-11-27
    • 2012-11-05
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多