Что-то запуталось в скриптах «администратора»

Что-то запуталось в скриптах «администратора»

Я скачал пакет с открытым исходным кодом и make. Но ошибка происходит, когда я запускаю adminскрипт, пытаясь начать. Я обнаружил, что это была какая-то проблема с path. Но есть еще одна проблема, которая меня смутила:

#! /bin/bash

# ionadmin - temporary wrapper script for .libs/ionadmin
# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
#
# The ionadmin program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
#
# This wrapper script should never be moved out of the build directory.
# If it is, it will not operate correctly.

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
sed_quote_subst='s/\([`"$\\]\)/\\\1/g'

# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  emulate sh
  NULLCMD=:
  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
  1. sed_quote_subst: какое значение он имеет? из-за существования '', некоторые мета в ''отключены . Но я не знаю, какие именно.
  2. #!/bin/bash& zsh emulate: Первая строка объявляет, что этот скрипт запущен в bash. Так почему же есть emulate, который из zsh?
  3. alias -g '${1+"$@"}'='"$@"': Я только что ввел это на другом bash и получаю ошибку: -g :invalid option, Я запутался в разнице zsh и bash, и в том, как они работают вместе. Не могли бы вы объяснить мне это, пожалуйста?

Я новичок в этом деле, поэтому этот вопрос может быть не таким уж "полезным" для вас. Но ваш ответ может помочь мне лучше понять этот мир.

решение1

  1. #!/bin/bash& zsh emulate: Первая строка объявляет, что этот скрипт запущен в bash. Так почему же есть emulate, который из zsh?

Первая строка, shebang, указывает только на то, что если скрипт выполняется напрямую, он будет запущен с помощью bash. Ничто не мешает вам запустить его с помощью zsh:

zsh admin.sh

Я не знаю, почему автор решил проверить zsh, но он это сделал. Этот раздел кода для zsh и не будет работать в bash:

emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage.  Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
  1. alias -g '${1+"$@"}'='"$@"': Я только что ввел это на другом bash и получаю ошибку: -g :invalid option, Я запутался в разнице zsh и bash, и в том, как они работают вместе. Не могли бы вы объяснить мне это, пожалуйста?

Это очень обширный вопрос. Я не буду объяснять все различия zsh и bash — для этого прочтите документацию обоих. Что касается конкретного пункта alias -g, zsh имеетГлобальныйпсевдонимы. В bash псевдонимы подставляются только в начале строки. В zsh alias -gопределяет глобальные псевдонимы, которые подставляются везде в строке.

Итак, в zsh, если я сделаю:

alias -g foo=bar

И затем запустите:

echo foo

Результат будет следующим:

bar

решение2

В ваших вопросах недостаточно информации, но я попробую ответить на них следующим образом:

  1. sed regexp демистифицирует

    s/\([`"$\\]\)/\\\1/g'
    ^     ^         ^----------------- with The character with a leading \
          | 
    |     | --- the characters `"$\
    |
    |-- replace
    

    Так "становится\"

  2. Понятия не имею, zsh не мой вариант для запуска скриптов.

  3. Проверьте такие утверждения:

    if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 
         echo "Does the if statement run in my shell?"; 
    else 
         echo "The else statement runs in my shell"; 
    fi 
    

Связанный контент