Я вижу, что ответ Бруно уже принят, но я полагаю, что я должен бросить свои два цента.
Одним из моих любимых инструментов является package.ubuntu.com. Используя инструмент поиска в нижней части страницы, я смог найти пакет samba4 в Precise. Оттуда вы можете либо загрузить пакет .deb, либо извлечь его содержимое, либо просто просмотреть список файлов в Интернете.
Надеюсь, что это поможет!
Для первого:
# 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» сценариев оболочки.
Для первого:
# 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» сценариев оболочки.
Для первого:
# 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» сценариев оболочки.
Для первого:
# 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» сценариев оболочки.
Для первого:
# 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» сценариев оболочки.
Для первого:
# запустить 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]
Для первого:
# запустить 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]
Для первого:
# запустить 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]
Для первого:
# запустить 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]
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
"$ (command) & quot;
запускает команду
и заменяет ее вывод, сохраняя пробелы, табуляции и новые строки вместо того, чтобы по умолчанию сворачивать все их в одно пространство. «$ @»
заменяет аргументы командной строки (минус метка, которую мы сдвигаем
) с сохранением всех цитируемых. Таким образом, "$ (" $ @ ")"
означает "запустить команду, указанную в аргументах скрипта, и заменить ее выход" - которые мы затем назначим err
для последующего использования. (Где, по-вашему, я назвал sed
? Я использую его позже, чтобы сделать отступ от команды, но это не связано.)
– geekosaur
9 March 2011 в 13:31