Проверьте, включена ли подстановка

Это не ошибка, вы можете проверить это с помощью echo $?после запуска make install-info. Цель install-infoв Documentation/Makefileвыглядит так:

install-info: info
    $(INSTALL) -d -m 755 $(DESTDIR)$(infodir)
    $(INSTALL) -m 644 git.info gitman.info $(DESTDIR)$(infodir)
    if test -r $(DESTDIR)$(infodir)/dir; then \
      $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) git.info ;\
      $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) gitman.info ;\
    else \
      echo "No directory found in $(DESTDIR)$(infodir)" >&2 ; \
    fi

Программа с именем installкорректно создает информационные -страницы в /usr/local/git/share/info/, можете проверить:

$ ls -lh /usr/local/git/share/info/
total 2.3M
-rw-r--r-- 1 root root 218K Jun 13 21:46 git.info
-rw-r--r-- 1 root root 2.1M Jun 13 21:46 gitman.info

Цель install-infoбыла представлена ​​в коммите 4739809cи гласит:

If the info target directory does not already contain a "dir" file, no directory entry is created.

Файл с именем dirявляется частьюGNU texinfoно это не обязательно.

Также обратите внимание, что если у вас нет /usr/local/git/bin/в вашем $PATH, вы не можете запустить git, просто набрав gitпосле установки, как вы это сделали, вы должны сделать это вместо этого:

$ /usr/local/git/bin/git --version
git version 2.17.1

4
16.05.2020, 18:18
4 ответа

Если вы сделаете set -fили иным образом отключите подстановку :,$- будет содержатьf:

$ echo $-
himBHs
$ set -f
$ echo $-
fhimBHs
$ bash -fc 'echo $-'
fhBc

Так:

[[ $- = *f* ]]

Или:

case $- in
 *f*) ... ;;
esac
14
28.04.2021, 23:13

Переменная $-содержит текущие флаги.

Так что можно сделать

case "$-" in
   (*'f'*) echo "file globbing is disabled" ;;
   (*)     echo "file globbing is enabled" ;;
esac
5
28.04.2021, 23:13

По крайней мере, в bashя не знаю, зависит ли это от оболочки -, вы можете использовать test -o <optname>. Имя параметра, соответствующее -f, — noglob, поэтому вы можете сделать что-то вроде этого:

$ set -f
$ test -o noglob; echo $?
$ set +f
$ test -o noglob; echo $?

или в скрипте

if [ -o noglob ]; then
    echo globbing disabled
else
    echo globbing enabled
fi
7
28.04.2021, 23:13

Есть несколько способов.

  • Самый портативный тест расширяется$-

    set -f; [ -z "${-##*f*}" ] && echo noglob set
    
  • В bash и нескольких оболочках:

    [ -o noglob ] && echo noglob
    
  • Тест для нескольких оболочек:

    set -o | grep noglob
    
  • Тот, что предназначен только для bash,:

    $ shopt -op noglob
    shopt -o noglob               # +o if globbing is active.
    
  • И, если вам нужен тихий тест:

    if shopt -oq noglob; then echo noglob set; fi
    
  • Вы также можете проверить, что подстановка делает (достаточно переносимой):

    set --.*; if [ "$#" -gt 1 ]; then echo glob active; fi
    
3
28.04.2021, 23:13

Теги

Похожие вопросы