svn diff вызывает скрипт csh, вызывающий .cshrc, несмотря на флаг csh -f

Получил себе стандартный скрипт для передачи вывода svn diff в vimdiff на моем RHEL-боксе:

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

добавил его в путь и установил diff-cmd в ~/.subversion/config

Это отлично работает, и у меня есть все, что мне нужно. Однако кажется, что флаг -f для csh игнорируется, а мой файл .cshrc запускается: я вижу эхо-сообщения, выдаваемые им до открытия vimdiff.

Мой .cshrc подключается к нескольким серверам лицензий, поэтому это занимает некоторое время, что не так уж и важно.

Кстати, запуск этого скрипта напрямую (svndiff.sh x x x x x file1 file2) не вызывает .cshrc

svn (версия 1.6.11) делает это сам? Любые идеи, почему это происходит и что можно с этим сделать?


person SamBob    schedule 02.07.2015    source источник


Ответы (1)


Скорее всего, он называется csh svndiff.sh. Хэш-банг выполняется только, если он вызывается как ./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, если это возможно. Почти все вопросы, затронутые в статье «программирование Csh считается вредным " с 1995 года до сих пор относятся к tcsh 20 лет спустя.

person Martin Tournoij    schedule 02.07.2015
comment
Проверка подсказки выполняет свою работу, но она делает что-то еще, что я ломаю (запуск команд через ssh без интерактивной оболочки, которая требует запуска сценариев, которые я не хочу запускать в этом случае). Переименование svndiff.sh в svndiff останавливает svn, вызывая его как csh svndiff.sh и затем использует хэш-банг (который я, естественно, заменил на /bin/bash). - person SamBob; 03.07.2015
comment
Я ошибался! Переименование не решает проблему. Изменение моей оболочки по умолчанию не будет вариантом, в любом случае мне понадобятся эти сценарии в моем .bashrc, и у меня снова возникнет эта проблема. Бесполезно то, что я, по-видимому, не могу заставить svn diff вызывать diff-cmd напрямую, а не порождать внутри оболочки. - person SamBob; 03.07.2015
comment
Удалось использовать быструю проверку и поддерживать работу моих сценариев, проверяя $HOST, поскольку это различает случаи для меня. Спасибо, мне все еще интересно узнать больше о вызове svn (я полагаю) sh -c 'diff-cmd', а не о самом diff-cmd. - person SamBob; 03.07.2015