「管理」腳本中有些混亂的東西

「管理」腳本中有些混亂的東西

我下載了一個開源套件和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 中執行。那麼,為什麼會有一個來自 zsh 的 emulate 呢?
  3. alias -g '${1+"$@"}'='"$@"':我只是在另一個 bash 上輸入這個並收到錯誤:-g :invalid option,我對 zsh 和 bash 的區別以及它們如何協同工作感到困惑。請你給我解釋一下好嗎?

我是這方面的新手,所以這個問題對你來說可能沒那麼「有用」。但你的回答可以幫助我更了解這個世界。

答案1

  1. #!/bin/bash& zsh emulate:第一行聲明該腳本在 bash 中執行。那麼,為什麼會有一個來自 zsh 的 emulate 呢?

第一行 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 正規表示式揭秘

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

    於是就"變成了\"

  2. 我不知道,當你運行腳本時,zsh 不是我的菜。

  3. 測試 if 語句如下:

    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 
    

相關內容