Algo confuso em um scipts "admin"

Algo confuso em um scipts "admin"

Baixei um pacote de código aberto e o make. Mas o erro acontece quando executo o adminscript tentando começar. Descobri que havia algum problema com o path.Mas ainda há algum problema que me confundiu:

#! /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: que valor isso tem? devido à existência de '', alguns meta-in ''estão desativados. Mas não sei quais são eles.
  2. #!/bin/bash& zsh emulate: A primeira linha declara que este script está sendo executado no bash. Então, por que existe uma emulação, que é do zsh?
  3. alias -g '${1+"$@"}'='"$@"': Acabei de inserir isso em outro bash e recebo o erro: -g :invalid optionestou confuso sobre a diferença entre zsh e bash e como eles funcionam juntos. Você poderia me explicar, por favor?

Eu sou um novato nisso, então esta pergunta pode não ser tão "útil" para você. Mas sua resposta pode me ajudar a entender melhor este mundo.

Responder1

  1. #!/bin/bash& zsh emulate: A primeira linha declara que este script está sendo executado no bash. Então, por que existe uma emulação, que é do zsh?

A primeira linha, o shebang, indica apenas que se o script for executado diretamente, ele será executado usando bash. Nada impede que você execute-o usando zsh:

zsh admin.sh

Não sei por que o autor pensou em testar o zsh, mas o fez. Esta seção do código é para zsh e não será executada no 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+"$@"}'='"$@"': Acabei de inserir isso em outro bash e recebo o erro: -g :invalid optionestou confuso sobre a diferença entre zsh e bash e como eles funcionam juntos. Você poderia me explicar, por favor?

Essa é uma questão muito ampla. Não vou explicar todas as diferenças entre zsh e bash - leia a documentação de ambos para isso. Para o ponto específico de alias -g, zsh temglobalapelido. No bash, os aliases são substituídos apenas no início da linha. No zsh, alias -gdefine aliases globais que são substituídos em qualquer lugar da linha.

Então, em zsh, se eu fizer:

alias -g foo=bar

E então execute:

echo foo

A saída será:

bar

Responder2

Suas perguntas carecem de informações, mas tentarei respondê-las assim:

  1. sed regexp desmistificar

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

    Assim "se torna\"

  2. Não tenho ideia, zsh não é minha preferência quando você está executando scripts.

  3. Teste se declarações como esta:

    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 
    

informação relacionada