Descargué un paquete de código abierto y make
. Pero ocurre un error cuando ejecuto el admin
script intentando comenzar. Descubrí que había algún problema con el path
. Pero todavía hay algún problema que me confunde:
#! /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
sed_quote_subst
: ¿Qué valor tiene? Debido a la existencia de''
, algunos metain''
están deshabilitados. Pero no sé cuáles son.#!/bin/bash
& zsh emulate: la primera línea declara que este script se ejecuta en bash. Entonces, ¿por qué hay una emulación, que es de zsh?alias -g '${1+"$@"}'='"$@"'
: Acabo de ingresar esto en otro bash y aparece el error:-g :invalid option
Estoy confundido acerca de la diferencia entre zsh y bash y cómo funcionan juntos. ¿Podrías explicármelo, por favor?
Soy nuevo en esto, por lo que es posible que esta pregunta no sea tan "útil" para usted. Pero tu respuesta puede ayudarme a comprender mejor este mundo.
Respuesta1
#!/bin/bash
& zsh emulate: la primera línea declara que este script se ejecuta en bash. Entonces, ¿por qué hay una emulación, que es de zsh?
La primera línea, el shebang, solo indica que si el script se ejecuta directamente, se ejecutará usando bash. Nada te impide ejecutarlo usando zsh:
zsh admin.sh
No sé por qué el autor pensó en realizar la prueba de zsh, pero lo hizo. Esta sección de código es para zsh y no se ejecutará en 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
alias -g '${1+"$@"}'='"$@"'
: Acabo de ingresar esto en otro bash y aparece el error:-g :invalid option
Estoy confundido acerca de la diferencia entre zsh y bash y cómo funcionan juntos. ¿Podrías explicármelo, por favor?
Esa es una pregunta muy amplia. No explicaré todas las diferencias entre zsh y bash; lea la documentación de ambos para eso. Para el punto específico de alias -g
, zsh tieneglobalalias. En bash, los alias sólo se sustituyen al principio de la línea. En zsh, alias -g
define alias globales que se sustituyen en todas partes de la línea.
Entonces, en zsh, si hago:
alias -g foo=bar
Y luego ejecuta:
echo foo
La salida será:
bar
Respuesta2
A tus preguntas les falta información, pero intentaré responderlas así:
sed regexp desmitificar
s/\([`"$\\]\)/\\\1/g' ^ ^ ^----------------- with The character with a leading \ | | | --- the characters `"$\ | |-- replace
Así
"
se convierte\"
No tengo idea, zsh no es mi taza de té cuando ejecutas scripts.
Pruebe si declaraciones 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