Algo confuso em um scipts “admin” [fechado]

0

Eu baixei um pacote de código aberto e make . Mas erro acontece quando eu executo o script admin tentando começar. Eu achei que era algum problema sobre o path .Mas ainda há algum problema 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/\(['"$\]\)/\/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 tem? devido à existência de '' , alguns meta em '' estão desativados. Mas eu não sei quais são eles.
  2. #!/bin/bash & amp; emular zsh: A primeira linha declara que esse script está sendo executado no bash. Então, por que há um emulado, que é de zsh?
  3. alias -g '${1+"$@"}'='"$@"' : Acabei de inserir isso em outro bash e obter o erro: -g :invalid option , estou confuso sobre a diferença de zsh & amp; bash, e como eles funcionam juntos. Você poderia me explicar, por favor?

Eu sou uma nova mão para isso, então essa pergunta pode não ser tão "útil" para você. Mas sua resposta pode me ajudar a entender melhor esse mundo.

    
por Frank Wang 18.10.2015 / 08:49

2 respostas

1
% bl0ck_qu0te%

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

zsh admin.sh

Eu não sei porque o autor pensou em testar o zsh, mas eles fizeram. Esta seção de 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
% bl0ck_qu0te%

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

Então, em zsh, se eu fizer isso:

alias -g foo=bar

E, em seguida, execute:

echo foo

A saída será:

bar
    
por muru 18.10.2015 / 10:23
0

Suas perguntas não têm informações, mas vou tentar responder assim:

  1. sed regexp desmistifica

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

    Portanto, " se torna \"

  2. Eu não tenho ideia, zsh não é minha xícara de chá 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 
    
por Erik Johansson 18.10.2015 / 10:00