Как получить более приятные сообщения об ошибках в этом bash-скрипте?

Я вижу, что ответ Бруно уже принят, но я полагаю, что я должен бросить свои два цента.

Одним из моих любимых инструментов является package.ubuntu.com. Используя инструмент поиска в нижней части страницы, я смог найти пакет samba4 в Precise. Оттуда вы можете либо загрузить пакет .deb, либо извлечь его содержимое, либо просто просмотреть список файлов в Интернете.

Надеюсь, что это поможет!

2
задан 7 March 2011 в 20:43

9 ответов

Для первого:

# run sed, capture any output
var1="$(sed -i "/connection.username/c connection.username=$name" $search)"

Для последнего:

# run sed, discard all output but keep exit status
sed -i "/connection.username/c connection.username=$name" $search >/dev/null 2>&1

Тем не менее, valid() ... странно, мягко говоря. Я бы записал его как

# valid label [status]
# check status ($? if not provided) and log success/failure
function valid {
  if [[ ${2-$?} == 0 ]]; then
    echo "$1 : status : OK"
  else
    echo "$1 : status : ERROR"
  fi
}

На самом деле, я бы сделал это несколько иначе, чем в начале:

# log label command [arguments...]
# run command, output success/failure to stderr.  If label is empty, use the
# command name:  'log "" echo hi' uses 'echo' as the label.
# log entries look like
#    label1 : status : OK
#    label2 : status : ERROR
#    Error output from foo:
#      Baz is broken; fix and try again.
log() {
  # save off label
  local label="${1:-$2}"
  shift # this removes $1 and shifts $2... to $1... so "$@" works later
  # run command, capture output
  # $(command) runs 'command' and substitutes its output
  # "$@" preserves quoting; $* would turn argument "foo bar" into two
  # arguments foo bar
  err="$("$@")"
  if [[ $? == 0 ]]; then
    status=OK
  else
    status=ERROR
  fi
  echo "$label : status : $status" >&2 # standard error
  if [[ $status == ERROR ]]; then
    # log output from command, indented for clarity
    echo "Error output from $2:"
    echo "$err" | sed 's/^/  /' >&2
  fi
}

save() {
  # this sed command is pedantically correct; if GNU sed lets you
  # do single-line 'c' commands as in the original, then go for it.
  # The backslash-return after the label argument is just for clarity;
  # 'log "foo" bar' works just as well.
  log "adding database ip" \
    sed -i "/:@/c\\
connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase\\
." "$search"
  # using the original (GNU?) sed syntax
  log "adding database SID" \
    sed -i "/connection.username/c connection.username=$name" "$search"
}

save

Я бы также включил метку времени и идентификатор программы и т. Д. в реальной программе.

Вероятно, вам следует изучить Руководство по разработке сценариев Advanced Bash, чтобы узнать больше о написании сценариев оболочки. Главы оболочки оболочки UNIX не распространяют расширения bash на исходную оболочку Bourne, но по-прежнему полезны для изучения «zen» сценариев оболочки.

4
ответ дан 25 May 2018 в 22:39
  • 1
    это прекрасно, спасибо, позвольте мне проверить, что :), спасибо – moata_u 7 March 2011 в 20:49
  • 2
    geekosaur, вы можете отредактировать свой пост и добавить комментарий! особенно в функции log (). – moata_u 7 March 2011 в 21:00
  • 3
    Нет проблем; Добавлены комментарии и комментарии к журналу. – geekosaur 7 March 2011 в 21:21
  • 4
    Котировка a="$(echo foo bar baz)" бесполезна - потребности все еще цитируются. f () { echo $1; } может быть функцией. f $a отобразит только «foo», а f "$a" отобразит «foo bar baz». Что есть, что вы получаете за a=$(echo foo bar baz). – user unknown 8 March 2011 в 00:08
  • 5
    "$(command)" запускает command и заменяет его вывод, сохраняя пробелы, табуляции и новые строки вместо того, чтобы по умолчанию сворачивать все их в одно пространство. "$@" заменяет аргументы командной строки (минус ярлык, который мы shift удалили), при этом все сохраненные цитаты. Таким образом, "$("$@")" означает «запустить команду, указанную в аргументах скрипта, и заменить ее вывод», - который мы затем назначим err для последующего использования. (Где, по-вашему, я назвал sed? Я использую его позже, чтобы отступать от команды, но это не связано.) – geekosaur 9 March 2011 в 13:31

Для первого:

# run sed, capture any output var1="$(sed -i "/connection.username/c connection.username=$name" $search)"

Для последнего:

# run sed, discard all output but keep exit status sed -i "/connection.username/c connection.username=$name" $search >/dev/null 2>&1

Тем не менее, valid() ... странно, мягко говоря. Я бы записал его как

# valid label [status] # check status ($? if not provided) and log success/failure function valid { if [[ ${2-$?} == 0 ]]; then echo "$1 : status : OK" else echo "$1 : status : ERROR" fi }

На самом деле, я бы сделал это несколько иначе, чем в начале:

# log label command [arguments...] # run command, output success/failure to stderr. If label is empty, use the # command name: 'log "" echo hi' uses 'echo' as the label. # log entries look like # label1 : status : OK # label2 : status : ERROR # Error output from foo: # Baz is broken; fix and try again. log() { # save off label local label="${1:-$2}" shift # this removes $1 and shifts $2... to $1... so "$@" works later # run command, capture output # $(command) runs 'command' and substitutes its output # "$@" preserves quoting; $* would turn argument "foo bar" into two # arguments foo bar err="$("$@")" if [[ $? == 0 ]]; then status=OK else status=ERROR fi echo "$label : status : $status" >&2 # standard error if [[ $status == ERROR ]]; then # log output from command, indented for clarity echo "Error output from $2:" echo "$err" | sed 's/^/ /' >&2 fi } save() { # this sed command is pedantically correct; if GNU sed lets you # do single-line 'c' commands as in the original, then go for it. # The backslash-return after the label argument is just for clarity; # 'log "foo" bar' works just as well. log "adding database ip" \ sed -i "/:@/c\\ connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase\\ ." "$search" # using the original (GNU?) sed syntax log "adding database SID" \ sed -i "/connection.username/c connection.username=$name" "$search" } save

Я бы также включил метку времени и идентификатор программы и т. Д. в реальной программе.

Вероятно, вам следует изучить Руководство по разработке сценариев Advanced Bash, чтобы узнать больше о написании сценариев оболочки. Главы оболочки оболочки UNIX не распространяют расширения bash на исходную оболочку Bourne, но по-прежнему полезны для изучения «zen» сценариев оболочки.

4
ответ дан 25 July 2018 в 22:23

Для первого:

# run sed, capture any output var1="$(sed -i "/connection.username/c connection.username=$name" $search)"

Для последнего:

# run sed, discard all output but keep exit status sed -i "/connection.username/c connection.username=$name" $search >/dev/null 2>&1

Тем не менее, valid() ... странно, мягко говоря. Я бы записал его как

# valid label [status] # check status ($? if not provided) and log success/failure function valid { if [[ ${2-$?} == 0 ]]; then echo "$1 : status : OK" else echo "$1 : status : ERROR" fi }

На самом деле, я бы сделал это несколько иначе, чем в начале:

# log label command [arguments...] # run command, output success/failure to stderr. If label is empty, use the # command name: 'log "" echo hi' uses 'echo' as the label. # log entries look like # label1 : status : OK # label2 : status : ERROR # Error output from foo: # Baz is broken; fix and try again. log() { # save off label local label="${1:-$2}" shift # this removes $1 and shifts $2... to $1... so "$@" works later # run command, capture output # $(command) runs 'command' and substitutes its output # "$@" preserves quoting; $* would turn argument "foo bar" into two # arguments foo bar err="$("$@")" if [[ $? == 0 ]]; then status=OK else status=ERROR fi echo "$label : status : $status" >&2 # standard error if [[ $status == ERROR ]]; then # log output from command, indented for clarity echo "Error output from $2:" echo "$err" | sed 's/^/ /' >&2 fi } save() { # this sed command is pedantically correct; if GNU sed lets you # do single-line 'c' commands as in the original, then go for it. # The backslash-return after the label argument is just for clarity; # 'log "foo" bar' works just as well. log "adding database ip" \ sed -i "/:@/c\\ connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase\\ ." "$search" # using the original (GNU?) sed syntax log "adding database SID" \ sed -i "/connection.username/c connection.username=$name" "$search" } save

Я бы также включил метку времени и идентификатор программы и т. Д. в реальной программе.

Вероятно, вам следует изучить Руководство по разработке сценариев Advanced Bash, чтобы узнать больше о написании сценариев оболочки. Главы оболочки оболочки UNIX не распространяют расширения bash на исходную оболочку Bourne, но по-прежнему полезны для изучения «zen» сценариев оболочки.

4
ответ дан 26 July 2018 в 21:08

Для первого:

# run sed, capture any output var1="$(sed -i "/connection.username/c connection.username=$name" $search)"

Для последнего:

# run sed, discard all output but keep exit status sed -i "/connection.username/c connection.username=$name" $search >/dev/null 2>&1

Тем не менее, valid() ... странно, мягко говоря. Я бы записал его как

# valid label [status] # check status ($? if not provided) and log success/failure function valid { if [[ ${2-$?} == 0 ]]; then echo "$1 : status : OK" else echo "$1 : status : ERROR" fi }

На самом деле, я бы сделал это несколько иначе, чем в начале:

# log label command [arguments...] # run command, output success/failure to stderr. If label is empty, use the # command name: 'log "" echo hi' uses 'echo' as the label. # log entries look like # label1 : status : OK # label2 : status : ERROR # Error output from foo: # Baz is broken; fix and try again. log() { # save off label local label="${1:-$2}" shift # this removes $1 and shifts $2... to $1... so "$@" works later # run command, capture output # $(command) runs 'command' and substitutes its output # "$@" preserves quoting; $* would turn argument "foo bar" into two # arguments foo bar err="$("$@")" if [[ $? == 0 ]]; then status=OK else status=ERROR fi echo "$label : status : $status" >&2 # standard error if [[ $status == ERROR ]]; then # log output from command, indented for clarity echo "Error output from $2:" echo "$err" | sed 's/^/ /' >&2 fi } save() { # this sed command is pedantically correct; if GNU sed lets you # do single-line 'c' commands as in the original, then go for it. # The backslash-return after the label argument is just for clarity; # 'log "foo" bar' works just as well. log "adding database ip" \ sed -i "/:@/c\\ connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase\\ ." "$search" # using the original (GNU?) sed syntax log "adding database SID" \ sed -i "/connection.username/c connection.username=$name" "$search" } save

Я бы также включил метку времени и идентификатор программы и т. Д. в реальной программе.

Вероятно, вам следует изучить Руководство по разработке сценариев Advanced Bash, чтобы узнать больше о написании сценариев оболочки. Главы оболочки оболочки UNIX не распространяют расширения bash на исходную оболочку Bourne, но по-прежнему полезны для изучения «zen» сценариев оболочки.

4
ответ дан 2 August 2018 в 03:50

Для первого:

# run sed, capture any output var1="$(sed -i "/connection.username/c connection.username=$name" $search)"

Для последнего:

# run sed, discard all output but keep exit status sed -i "/connection.username/c connection.username=$name" $search >/dev/null 2>&1

Тем не менее, valid() ... странно, мягко говоря. Я бы записал его как

# valid label [status] # check status ($? if not provided) and log success/failure function valid { if [[ ${2-$?} == 0 ]]; then echo "$1 : status : OK" else echo "$1 : status : ERROR" fi }

На самом деле, я бы сделал это несколько иначе, чем в начале:

# log label command [arguments...] # run command, output success/failure to stderr. If label is empty, use the # command name: 'log "" echo hi' uses 'echo' as the label. # log entries look like # label1 : status : OK # label2 : status : ERROR # Error output from foo: # Baz is broken; fix and try again. log() { # save off label local label="${1:-$2}" shift # this removes $1 and shifts $2... to $1... so "$@" works later # run command, capture output # $(command) runs 'command' and substitutes its output # "$@" preserves quoting; $* would turn argument "foo bar" into two # arguments foo bar err="$("$@")" if [[ $? == 0 ]]; then status=OK else status=ERROR fi echo "$label : status : $status" >&2 # standard error if [[ $status == ERROR ]]; then # log output from command, indented for clarity echo "Error output from $2:" echo "$err" | sed 's/^/ /' >&2 fi } save() { # this sed command is pedantically correct; if GNU sed lets you # do single-line 'c' commands as in the original, then go for it. # The backslash-return after the label argument is just for clarity; # 'log "foo" bar' works just as well. log "adding database ip" \ sed -i "/:@/c\\ connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase\\ ." "$search" # using the original (GNU?) sed syntax log "adding database SID" \ sed -i "/connection.username/c connection.username=$name" "$search" } save

Я бы также включил метку времени и идентификатор программы и т. Д. в реальной программе.

Вероятно, вам следует изучить Руководство по разработке сценариев Advanced Bash, чтобы узнать больше о написании сценариев оболочки. Главы оболочки оболочки UNIX не распространяют расширения bash на исходную оболочку Bourne, но по-прежнему полезны для изучения «zen» сценариев оболочки.

4
ответ дан 4 August 2018 в 19:54

Для первого:

  # запустить sed, захватить любой выход var1 = "$ (sed -i" /connection.username/c connection.username = $ name "$ search)"   

Для последнего:

  # запустить sed, отбросить весь вывод, но сохранить статус выхода sed -i "/connection.username/c connection.username =  $ name "$ search & gt; / dev / null 2 ​​& amp; 1  

При этом valid () является ... странным, если не сказать больше , Я бы написал его как

  # действительная метка [статус] # статус проверки ($? If не предоставлен) и функция успеха журнала / неудачи действительна {if [[$ {2- $?} =  = 0]];  then echo "$ 1: status: OK" else echo "$ 1: status: ERROR" fi}  

На самом деле, я бы сделал это немного иначе, чем в начале:

  # команда метки журнала [arguments ...] # команда запуска, выход / неудача stderr.  Если метка пуста, используйте имя # команды: «log» «echo hi» использует «echo» в качестве метки.  # записи в журнале выглядят как # label1: status: OK # label2: status: ERROR # Ошибка выхода из foo: # Baz сломан;  исправить и повторить попытку.  log () {# save off label local label = "$ {1: - $ 2}" shift # это удаляет $ 1 и сдвигает $ 2 ... до $ 1 ... так что "$ @" работает позже # запускает команду, выводит вывод #  $ (команда) запускает 'команду' и заменяет свой вывод # "$ @" сохраняет цитирование;  $ * превратит аргумент "foo bar" в два аргумента # foo bar err = "$ (" $ @ ")", если [[$?  == 0]];  then status = OK else status = ERROR fi echo "$ label: status: $ status" & gt; & amp; 2 # стандартная ошибка, если [[$ status == ERROR]];  затем # log output from command, отступом для ясности echo "Ошибка вывода из $ 2:" echo "$ err" |  sed 's / ^ / /' & gt; & amp; 2 fi} save () {# эта команда sed является педантично правильной;  если GNU sed позволяет вам выполнять однострочные команды «c», как в оригинале, а затем идти за ним.  # Возврат обратной косой черты после аргумента label просто для ясности;  # «log» foo «bar» работает так же хорошо.  log "добавление базы данных ip" \ sed -i "/: @ / c \\ connection.url = jdbc: oracle: thin: @ $ ip: 1521: $ dataBase \\."  «$ search» # с использованием оригинального (GNU?) sed синтаксического журнала «Добавление базы данных SID» \ sed -i "/connection.username/c connection.username = $ name" "$ search"} save  

Я бы также включил временную метку и идентификатор программы и т. д. в реальной программе.

Вероятно, вам следует изучить Advanced Bash Scripting Guide , чтобы узнать больше о написании shell-скрипты. В главах программирования оболочки UNIX не распространяются расширения bash на исходную оболочку Bourne, но они по-прежнему полезны для изучения «zen» сценариев оболочки. [ ! d13]

4
ответ дан 6 August 2018 в 03:56

Для первого:

  # запустить sed, захватить любой выход var1 = "$ (sed -i" /connection.username/c connection.username = $ name "$ search)"   

Для последнего:

  # запустить sed, отбросить весь вывод, но сохранить статус выхода sed -i "/connection.username/c connection.username =  $ name "$ search & gt; / dev / null 2 ​​& amp; 1  

При этом valid () является ... странным, если не сказать больше , Я бы написал его как

  # действительная метка [статус] # статус проверки ($? If не предоставлен) и функция успеха журнала / неудачи действительна {if [[$ {2- $?} =  = 0]];  then echo "$ 1: status: OK" else echo "$ 1: status: ERROR" fi}  

На самом деле, я бы сделал это немного иначе, чем в начале:

  # команда метки журнала [arguments ...] # команда запуска, выход / неудача stderr.  Если метка пуста, используйте имя # команды: «log» «echo hi» использует «echo» в качестве метки.  # записи в журнале выглядят как # label1: status: OK # label2: status: ERROR # Ошибка выхода из foo: # Baz сломан;  исправить и повторить попытку.  log () {# save off label local label = "$ {1: - $ 2}" shift # это удаляет $ 1 и сдвигает $ 2 ... до $ 1 ... так что "$ @" работает позже # запускает команду, выводит вывод #  $ (команда) запускает 'команду' и заменяет свой вывод # "$ @" сохраняет цитирование;  $ * превратит аргумент "foo bar" в два аргумента # foo bar err = "$ (" $ @ ")", если [[$?  == 0]];  then status = OK else status = ERROR fi echo "$ label: status: $ status" & gt; & amp; 2 # стандартная ошибка, если [[$ status == ERROR]];  затем # log output from command, отступом для ясности echo "Ошибка вывода из $ 2:" echo "$ err" |  sed 's / ^ / /' & gt; & amp; 2 fi} save () {# эта команда sed является педантично правильной;  если GNU sed позволяет вам выполнять однострочные команды «c», как в оригинале, а затем идти за ним.  # Возврат обратной косой черты после аргумента label просто для ясности;  # «log» foo «bar» работает так же хорошо.  log "добавление базы данных ip" \ sed -i "/: @ / c \\ connection.url = jdbc: oracle: thin: @ $ ip: 1521: $ dataBase \\."  «$ search» # с использованием оригинального (GNU?) sed синтаксического журнала «Добавление базы данных SID» \ sed -i "/connection.username/c connection.username = $ name" "$ search"} save  

Я бы также включил временную метку и идентификатор программы и т. д. в реальной программе.

Вероятно, вам следует изучить Advanced Bash Scripting Guide , чтобы узнать больше о написании shell-скрипты. В главах программирования оболочки UNIX не распространяются расширения bash на исходную оболочку Bourne, но они по-прежнему полезны для изучения «zen» сценариев оболочки. [ ! d13]

4
ответ дан 7 August 2018 в 21:54

Для первого:

  # запустить sed, захватить любой выход var1 = "$ (sed -i" /connection.username/c connection.username = $ name "$ search)"   

Для последнего:

  # запустить sed, отбросить весь вывод, но сохранить статус выхода sed -i "/connection.username/c connection.username =  $ name "$ search & gt; / dev / null 2 ​​& amp; 1  

При этом valid () является ... странным, если не сказать больше , Я бы написал его как

  # действительная метка [статус] # статус проверки ($? If не предоставлен) и функция успеха журнала / неудачи действительна {if [[$ {2- $?} =  = 0]];  then echo "$ 1: status: OK" else echo "$ 1: status: ERROR" fi}  

На самом деле, я бы сделал это немного иначе, чем в начале:

  # команда метки журнала [arguments ...] # команда запуска, выход / неудача stderr.  Если метка пуста, используйте имя # команды: «log» «echo hi» использует «echo» в качестве метки.  # записи в журнале выглядят как # label1: status: OK # label2: status: ERROR # Ошибка выхода из foo: # Baz сломан;  исправить и повторить попытку.  log () {# save off label local label = "$ {1: - $ 2}" shift # это удаляет $ 1 и сдвигает $ 2 ... до $ 1 ... так что "$ @" работает позже # запускает команду, выводит вывод #  $ (команда) запускает 'команду' и заменяет свой вывод # "$ @" сохраняет цитирование;  $ * превратит аргумент "foo bar" в два аргумента # foo bar err = "$ (" $ @ ")", если [[$?  == 0]];  then status = OK else status = ERROR fi echo "$ label: status: $ status" & gt; & amp; 2 # стандартная ошибка, если [[$ status == ERROR]];  затем # log output from command, отступом для ясности echo "Ошибка вывода из $ 2:" echo "$ err" |  sed 's / ^ / /' & gt; & amp; 2 fi} save () {# эта команда sed является педантично правильной;  если GNU sed позволяет вам выполнять однострочные команды «c», как в оригинале, а затем идти за ним.  # Возврат обратной косой черты после аргумента label просто для ясности;  # «log» foo «bar» работает так же хорошо.  log "добавление базы данных ip" \ sed -i "/: @ / c \\ connection.url = jdbc: oracle: thin: @ $ ip: 1521: $ dataBase \\."  «$ search» # с использованием оригинального (GNU?) sed синтаксического журнала «Добавление базы данных SID» \ sed -i "/connection.username/c connection.username = $ name" "$ search"} save  

Я бы также включил временную метку и идентификатор программы и т. д. в реальной программе.

Вероятно, вам следует изучить Advanced Bash Scripting Guide , чтобы узнать больше о написании shell-скрипты. В главах программирования оболочки UNIX не распространяются расширения bash на исходную оболочку Bourne, но они по-прежнему полезны для изучения «zen» сценариев оболочки. [ ! d13]

4
ответ дан 10 August 2018 в 10:09

Для первого:

  # запустить sed, захватить любой выход var1 = "$ (sed -i" /connection.username/c connection.username = $ name "$ search)"   

Для последнего:

  # запустить sed, отбросить весь вывод, но сохранить статус выхода sed -i "/connection.username/c connection.username =  $ name "$ search & gt; / dev / null 2 ​​& amp; 1  

При этом valid () является ... странным, если не сказать больше , Я бы написал его как

  # действительная метка [статус] # статус проверки ($? If не предоставлен) и функция успеха журнала / неудачи действительна {if [[$ {2- $?} =  = 0]];  then echo "$ 1: status: OK" else echo "$ 1: status: ERROR" fi}  

На самом деле, я бы сделал это немного иначе, чем в начале:

  # команда метки журнала [arguments ...] # команда запуска, выход / неудача stderr.  Если метка пуста, используйте имя # команды: «log» «echo hi» использует «echo» в качестве метки.  # записи в журнале выглядят как # label1: status: OK # label2: status: ERROR # Ошибка выхода из foo: # Baz сломан;  исправить и повторить попытку.  log () {# save off label local label = "$ {1: - $ 2}" shift # это удаляет $ 1 и сдвигает $ 2 ... до $ 1 ... так что "$ @" работает позже # запускает команду, выводит вывод #  $ (команда) запускает 'команду' и заменяет свой вывод # "$ @" сохраняет цитирование;  $ * превратит аргумент "foo bar" в два аргумента # foo bar err = "$ (" $ @ ")", если [[$?  == 0]];  then status = OK else status = ERROR fi echo "$ label: status: $ status" & gt; & amp; 2 # стандартная ошибка, если [[$ status == ERROR]];  затем # log output from command, отступом для ясности echo "Ошибка вывода из $ 2:" echo "$ err" |  sed 's / ^ / /' & gt; & amp; 2 fi} save () {# эта команда sed является педантично правильной;  если GNU sed позволяет вам выполнять однострочные команды «c», как в оригинале, а затем идти за ним.  # Возврат обратной косой черты после аргумента label просто для ясности;  # «log» foo «bar» работает так же хорошо.  log "добавление базы данных ip" \ sed -i "/: @ / c \\ connection.url = jdbc: oracle: thin: @ $ ip: 1521: $ dataBase \\."  «$ search» # с использованием оригинального (GNU?) sed синтаксического журнала «Добавление базы данных SID» \ sed -i "/connection.username/c connection.username = $ name" "$ search"} save  

Я бы также включил временную метку и идентификатор программы и т. д. в реальной программе.

Вероятно, вам следует изучить Advanced Bash Scripting Guide , чтобы узнать больше о написании shell-скрипты. В главах программирования оболочки UNIX не распространяются расширения bash на исходную оболочку Bourne, но они по-прежнему полезны для изучения «zen» сценариев оболочки. [ ! d13]

4
ответ дан 13 August 2018 в 16:30
  • 1
    это прекрасно, спасибо, позвольте мне проверить, что :), спасибо – moata_u 7 March 2011 в 20:49
  • 2
    geekosaur, вы можете отредактировать свой пост и добавить комментарий! особенно в функции log (). – moata_u 7 March 2011 в 21:00
  • 3
    Нет проблем; Добавлены комментарии и комментарии к журналу. – geekosaur 7 March 2011 в 21:21
  • 4
    Котировка a = "$ (echo foo bar baz)" бесполезна - потребности все еще цитируются. f () {echo $ 1; } может быть функцией. f $ a отобразит только «foo», а f «$ a» отобразит «foo bar baz». Что вы получаете за a = $ (echo foo bar baz) . – user unknown 8 March 2011 в 00:08
  • 5
    "$ (command) & quot; запускает команду и заменяет ее вывод, сохраняя пробелы, табуляции и новые строки вместо того, чтобы по умолчанию сворачивать все их в одно пространство. «$ @» заменяет аргументы командной строки (минус метка, которую мы сдвигаем ) с сохранением всех цитируемых. Таким образом, "$ (" $ @ ")" означает "запустить команду, указанную в аргументах скрипта, и заменить ее выход" - которые мы затем назначим err для последующего использования. (Где, по-вашему, я назвал sed ? Я использую его позже, чтобы сделать отступ от команды, но это не связано.) – geekosaur 9 March 2011 в 13:31

Другие вопросы по тегам:

Похожие вопросы: