Я скачал пакет с открытым исходным кодом и 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
sed_quote_subst
: какое значение он имеет? из-за существования''
, некоторые мета в''
отключены . Но я не знаю, какие именно.#!/bin/bash
& zsh emulate: Первая строка объявляет, что этот скрипт запущен в bash. Так почему же есть emulate, который из zsh?alias -g '${1+"$@"}'='"$@"'
: Я только что ввел это на другом bash и получаю ошибку:-g :invalid option
, Я запутался в разнице zsh и bash, и в том, как они работают вместе. Не могли бы вы объяснить мне это, пожалуйста?
Я новичок в этом деле, поэтому этот вопрос может быть не таким уж "полезным" для вас. Но ваш ответ может помочь мне лучше понять этот мир.
решение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
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
В ваших вопросах недостаточно информации, но я попробую ответить на них следующим образом:
sed regexp демистифицирует
s/\([`"$\\]\)/\\\1/g' ^ ^ ^----------------- with The character with a leading \ | | | --- the characters `"$\ | |-- replace
Так
"
становится\"
Понятия не имею, zsh не мой вариант для запуска скриптов.
Проверьте такие утверждения:
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