Re: [freebsd] exit utility

2018-02-08 Пенетрантность George L. Yermulnik
Hello!

On Thu, 08 Feb 2018 at 21:48:25 (+0200), Irina Liakh wrote:

> В процессе скриптописания возникла надобность в утилите, подобной
> true/false, только с заданным значением кода выхода (пока обошлась
> вызовом "sh -c 'exit 123'").
> Если такая есть, просто ткните в неё, плиз.
> Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
> целый шелл ради экситкода и не заморачиваются.

1. На чём скриптуете?
2. Какова цель затеи?

-- 
George L. Yermulnik
[YZ-RIPE]
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Maxim Sobolev
теоретически->гипотетически

2018-02-08 14:15 GMT-08:00 Maxim Sobolev :

> Ну чисто теоретически может у него там какой-то хитрый код который  ${?}
> обрабатывает? Напрямую ведь не заассайниш.
>
> -Max
>
> 2018-02-08 13:53 GMT-08:00 George L. Yermulnik :
>
>> Hello!
>>
>> On Thu, 08 Feb 2018 at 13:44:51 (-0800), Maxim Sobolev wrote:
>>
>> > Hmm:
>>
>> > 
>> > false_x() {
>> >   return "${1}"
>> > }
>>
>> > false_x 40
>> > echo ${?}
>> > 
>>
>> > Не комильфо?
>>
>> Пока не ясна задача топикстартерши, не ясно зачем вообще заморачиваться
>> именно "кодом выхода": если его нужно дальше в скрипте обрабатывать, то
>> тут и простой "echo" подойдёт.
>>
>> > -Max
>>
>> > 2018-02-08 12:54 GMT-08:00 George L. Yermulnik :
>>
>> > > Hello!
>>
>> > > On Thu, 08 Feb 2018 at 21:48:25 (+0200), Irina Liakh wrote:
>>
>> > > > В процессе скриптописания возникла надобность в утилите, подобной
>> > > > true/false, только с заданным значением кода выхода (пока обошлась
>> > > > вызовом "sh -c 'exit 123'").
>> > > > Если такая есть, просто ткните в неё, плиз.
>> > > > Если нету, скажите что это блажь, и суровые шелл-программисты
>> вызывают
>> > > > целый шелл ради экситкода и не заморачиваются.
>>
>> > > 1. На чём скриптуете?
>> > > 2. Какова цель затеи?
>>
>> > > --
>> > > George L. Yermulnik
>> > > [YZ-RIPE]
>> > > ___
>> > > freebsd mailing list
>> > > freebsd@uafug.org.ua
>> > > http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>>
>> > ___
>> > freebsd mailing list
>> > freebsd@uafug.org.ua
>> > http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>>
>> --
>> George L. Yermulnik
>> [YZ-RIPE]
>> ___
>> freebsd mailing list
>> freebsd@uafug.org.ua
>> http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>>
>
>
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Maxim Sobolev
Hmm:


false_x() {
  return "${1}"
}

false_x 40
echo ${?}


Не комильфо?

-Max

2018-02-08 12:54 GMT-08:00 George L. Yermulnik :

> Hello!
>
> On Thu, 08 Feb 2018 at 21:48:25 (+0200), Irina Liakh wrote:
>
> > В процессе скриптописания возникла надобность в утилите, подобной
> > true/false, только с заданным значением кода выхода (пока обошлась
> > вызовом "sh -c 'exit 123'").
> > Если такая есть, просто ткните в неё, плиз.
> > Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
> > целый шелл ради экситкода и не заморачиваются.
>
> 1. На чём скриптуете?
> 2. Какова цель затеи?
>
> --
> George L. Yermulnik
> [YZ-RIPE]
> ___
> freebsd mailing list
> freebsd@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность George L. Yermulnik
Hello!

On Thu, 08 Feb 2018 at 13:44:51 (-0800), Maxim Sobolev wrote:

> Hmm:

> 
> false_x() {
>   return "${1}"
> }

> false_x 40
> echo ${?}
> 

> Не комильфо?

Пока не ясна задача топикстартерши, не ясно зачем вообще заморачиваться
именно "кодом выхода": если его нужно дальше в скрипте обрабатывать, то
тут и простой "echo" подойдёт.

> -Max

> 2018-02-08 12:54 GMT-08:00 George L. Yermulnik :

> > Hello!

> > On Thu, 08 Feb 2018 at 21:48:25 (+0200), Irina Liakh wrote:

> > > В процессе скриптописания возникла надобность в утилите, подобной
> > > true/false, только с заданным значением кода выхода (пока обошлась
> > > вызовом "sh -c 'exit 123'").
> > > Если такая есть, просто ткните в неё, плиз.
> > > Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
> > > целый шелл ради экситкода и не заморачиваются.

> > 1. На чём скриптуете?
> > 2. Какова цель затеи?

> > --
> > George L. Yermulnik
> > [YZ-RIPE]
> > ___
> > freebsd mailing list
> > freebsd@uafug.org.ua
> > http://mailman.uafug.org.ua/mailman/listinfo/freebsd

> ___
> freebsd mailing list
> freebsd@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd

-- 
George L. Yermulnik
[YZ-RIPE]
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Maxim Sobolev
Ну чисто теоретически может у него там какой-то хитрый код который  ${?}
обрабатывает? Напрямую ведь не заассайниш.

-Max

2018-02-08 13:53 GMT-08:00 George L. Yermulnik :

> Hello!
>
> On Thu, 08 Feb 2018 at 13:44:51 (-0800), Maxim Sobolev wrote:
>
> > Hmm:
>
> > 
> > false_x() {
> >   return "${1}"
> > }
>
> > false_x 40
> > echo ${?}
> > 
>
> > Не комильфо?
>
> Пока не ясна задача топикстартерши, не ясно зачем вообще заморачиваться
> именно "кодом выхода": если его нужно дальше в скрипте обрабатывать, то
> тут и простой "echo" подойдёт.
>
> > -Max
>
> > 2018-02-08 12:54 GMT-08:00 George L. Yermulnik :
>
> > > Hello!
>
> > > On Thu, 08 Feb 2018 at 21:48:25 (+0200), Irina Liakh wrote:
>
> > > > В процессе скриптописания возникла надобность в утилите, подобной
> > > > true/false, только с заданным значением кода выхода (пока обошлась
> > > > вызовом "sh -c 'exit 123'").
> > > > Если такая есть, просто ткните в неё, плиз.
> > > > Если нету, скажите что это блажь, и суровые шелл-программисты
> вызывают
> > > > целый шелл ради экситкода и не заморачиваются.
>
> > > 1. На чём скриптуете?
> > > 2. Какова цель затеи?
>
> > > --
> > > George L. Yermulnik
> > > [YZ-RIPE]
> > > ___
> > > freebsd mailing list
> > > freebsd@uafug.org.ua
> > > http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>
> > ___
> > freebsd mailing list
> > freebsd@uafug.org.ua
> > http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>
> --
> George L. Yermulnik
> [YZ-RIPE]
> ___
> freebsd mailing list
> freebsd@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd
>
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Valentin Nechayev
 Thu, Feb 08, 2018 at 21:48:25, spell wrote about "[freebsd] exit utility": 

> В процессе скриптописания возникла надобность в утилите, подобной
> true/false, только с заданным значением кода выхода (пока обошлась
> вызовом "sh -c 'exit 123'").
> Если такая есть, просто ткните в неё, плиз.
> Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
> целый шелл ради экситкода и не заморачиваются.

Метод 1 (кажется, самый эффективный)

$ set_status() { return $1; }
$ set_status 26
$ echo $?
26

Метод 2 (с fork, но без exec - всё равно дешевле, чем sh -c)

$ X=26
$ (exit $X)
$ echo $?
26


-netch-
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


[freebsd] exit utility

2018-02-08 Пенетрантность Irina Liakh
Всем добра!

В процессе скриптописания возникла надобность в утилите, подобной
true/false, только с заданным значением кода выхода (пока обошлась
вызовом "sh -c 'exit 123'").
Если такая есть, просто ткните в неё, плиз.
Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
целый шелл ради экситкода и не заморачиваются.
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность George L. Yermulnik
Hello!

On Thu, 08 Feb 2018 at 14:15:44 (-0800), Maxim Sobolev wrote:

> Ну чисто теоретически может у него там какой-то хитрый код который  ${?}
> обрабатывает? Напрямую ведь не заассайниш.

1. Топикстартерша =)
2. Я и говорю, что цель и задача не ясны.

> -Max

> 2018-02-08 13:53 GMT-08:00 George L. Yermulnik :

> > Hello!

> > On Thu, 08 Feb 2018 at 13:44:51 (-0800), Maxim Sobolev wrote:

> > > Hmm:

> > > 
> > > false_x() {
> > >   return "${1}"
> > > }

> > > false_x 40
> > > echo ${?}
> > > 

> > > Не комильфо?

> > Пока не ясна задача топикстартерши, не ясно зачем вообще заморачиваться
> > именно "кодом выхода": если его нужно дальше в скрипте обрабатывать, то
> > тут и простой "echo" подойдёт.

> > > -Max

> > > 2018-02-08 12:54 GMT-08:00 George L. Yermulnik :

> > > > Hello!

> > > > On Thu, 08 Feb 2018 at 21:48:25 (+0200), Irina Liakh wrote:

> > > > > В процессе скриптописания возникла надобность в утилите, подобной
> > > > > true/false, только с заданным значением кода выхода (пока обошлась
> > > > > вызовом "sh -c 'exit 123'").
> > > > > Если такая есть, просто ткните в неё, плиз.
> > > > > Если нету, скажите что это блажь, и суровые шелл-программисты
> > вызывают
> > > > > целый шелл ради экситкода и не заморачиваются.

> > > > 1. На чём скриптуете?
> > > > 2. Какова цель затеи?

> > > > --
> > > > George L. Yermulnik
> > > > [YZ-RIPE]
> > > > ___
> > > > freebsd mailing list
> > > > freebsd@uafug.org.ua
> > > > http://mailman.uafug.org.ua/mailman/listinfo/freebsd

> > > ___
> > > freebsd mailing list
> > > freebsd@uafug.org.ua
> > > http://mailman.uafug.org.ua/mailman/listinfo/freebsd

> > --
> > George L. Yermulnik
> > [YZ-RIPE]
> > ___
> > freebsd mailing list
> > freebsd@uafug.org.ua
> > http://mailman.uafug.org.ua/mailman/listinfo/freebsd

> ___
> freebsd mailing list
> freebsd@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd

-- 
George L. Yermulnik
[YZ-RIPE]
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность grayich

как вариант свою утилиту на сях сделать, простейший вариант:

int main (void) {
  return 123;
}


а вообще возможно оно и не нужно, непонятна нужда сего



On Thu, 8 Feb 2018 21:48:25 +0200
"Irina Liakh"  wrote:

> Всем добра!
> 
> В процессе скриптописания возникла надобность в утилите, подобной
> true/false, только с заданным значением кода выхода (пока обошлась
> вызовом "sh -c 'exit 123'").
> Если такая есть, просто ткните в неё, плиз.
> Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
> целый шелл ради экситкода и не заморачиваются.
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Eugene Grosbein
09.02.2018 3:02, Valentin Nechayev пишет:
>  Thu, Feb 08, 2018 at 21:48:25, spell wrote about "[freebsd] exit utility": 
> 
>> В процессе скриптописания возникла надобность в утилите, подобной
>> true/false, только с заданным значением кода выхода (пока обошлась
>> вызовом "sh -c 'exit 123'").
>> Если такая есть, просто ткните в неё, плиз.
>> Если нету, скажите что это блажь, и суровые шелл-программисты вызывают
>> целый шелл ради экситкода и не заморачиваются.
> 
> Метод 1 (кажется, самый эффективный)
> 
> $ set_status() { return $1; }
> $ set_status 26
> $ echo $?
> 26

+1

Только я бы обозвал функцию fail для похожести на true/false:

#!/bin/sh

fail() { return $1; }

# высосанный из пальца пример использования
while :
do
  if echo content > file; then
...
  else
fail 74 # EX_IOERR
  fi
done

Только вот зачем это всё? Любой shell-скрипт можно завершить непосредственно
командой exit с нужным кодом без вызова "утилиты", а функцию в нём командой 
return.

___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Valentin Nechayev
hi,

 Fri, Feb 09, 2018 at 08:02:31, eugen wrote about "Re: [freebsd] exit utility": 

> > $ set_status() { return $1; }
> > $ set_status 26
> > $ echo $?
> > 26
> 
> +1
> 
> Только я бы обозвал функцию fail для похожести на true/false:

И тогда fail без аргументов будет создавать код возврата 0? Это жуткое
нарушение POLA, примерно как если бы утилита "yes" выдавала поток слов
"no".
Тут ни fail, ни success не подходят. set_status всё-таки прямое и
нейтральное.


-netch-
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Valentin Nechayev
hi,

 Fri, Feb 09, 2018 at 08:16:53, spell wrote about "Re: [freebsd] exit utility": 

> > $ set_status() { return $1; }
> > $ set_status 26
> > $ echo $?
> > 26
> 
> Спасибо, оно!
> (затупила подумать в эту сторону)
> (хотя всё-таки это дополнительная громоздкость, и для полноты счастья
> хотелось бы готового (даже не утилиту, а builtin, устанавливающий экситкод
> (переменную $?), наподобие builtin true/false))

Его не предусматривают, мне кажется, потому, что $? неустойчива - она
модифицируется каждой следующей командой. Поэтому, если кому-то этот
статус нужен дольше, чем на проверку одним выстрелом, он копируется в
другую, явно названную переменную, которая хранит результат уже
постоянно. А этой переменной уже можно присвоить нужное значение
напрямую, без подобных хитростей. Даже если после этого пользовать
конструкции && ||, это делается достаточно легко в стиле

test $saved_status = 0 && ветка1 || ветка2

Поэтому мне изначально вся проблема кажется надуманной, или попыткой
решения в условиях "категорически запретили приводить стиль к
нормальному". Или же какие-то ситуации в духе "100500 веток case,
из которых 99% просто передают статус последней команды в теле ветки,
но для 1% его надо выставить вручную" (а почему тогда не true/false,
они же тоже встроены?) - тоже редкий и странный вариант.
Но в первом ответе я не хотел акцентироваться на этом. Достаточно
того, что функции и return встроены в любой современный шелл и стоят
реально копейки.


-netch-
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Irina Liakh
On Thu, Feb 08, 2018 at 10:02:15PM +0200, Valentin Nechayev wrote:
> 
> Метод 1 (кажется, самый эффективный)
> 
> $ set_status() { return $1; }
> $ set_status 26
> $ echo $?
> 26

Спасибо, оно!
(затупила подумать в эту сторону)
(хотя всё-таки это дополнительная громоздкость, и для полноты счастья
хотелось бы готового (даже не утилиту, а builtin, устанавливающий экситкод
(переменную $?), наподобие builtin true/false))
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Irina Liakh
On Thu, Feb 08, 2018 at 10:54:56PM +0200, George L. Yermulnik wrote:
> 
> 1. На чём скриптуете?
sh

> 2. Какова цель затеи?
Читабельность кода :)

На вход поступает некая строка (всегда разные), надо определить, не пустая
ли она, и в зависимости от этого ветвится код:

set_status `cat | wc -c` && echo zero string || echo nonzero string

Понятно, что можно так:

[ `cat | wc -c` -eq 0 ] && echo zero string || echo nonzero string

но это менее читабельно, кмк.
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Irina Liakh
On Thu, Feb 08, 2018 at 01:44:51PM -0800, Maxim Sobolev wrote:
> Hmm:
> 
> 
> false_x() {
>   return "${1}"
> }
> 
> false_x 40
> echo ${?}
> 
> 
> Не комильфо?

Я бы не назвала это "false", т.к. код выхода может быть любой, в т.ч. и 0.
Но идея - да, она.
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность George L. Yermulnik
Hello!

On Fri, 09 Feb 2018 at 08:27:52 (+0200), Irina Liakh wrote:

> > 2. Какова цель затеи?
> Читабельность кода :)

> На вход поступает некая строка (всегда разные), надо определить, не пустая
> ли она, и в зависимости от этого ветвится код:

> set_status `cat | wc -c` && echo zero string || echo nonzero string

> Понятно, что можно так:

> [ `cat | wc -c` -eq 0 ] && echo zero string || echo nonzero string

> но это менее читабельно, кмк.

Это _читабельнее_, т.к. в этом нету скрытой за функцией логики.
Кстати, для проверки, является строка пустой или нет, существует builtin способ.

Из любопытства: а что Вы хотите считать непустой строкой? Мне кажется
"wc -с" может тут немного навредить.

-- 
George L. Yermulnik
[YZ-RIPE]
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Irina Liakh
On Fri, Feb 09, 2018 at 09:19:13AM +0200, Valentin Nechayev wrote:
> > (хотя всё-таки это дополнительная громоздкость, и для полноты счастья
> > хотелось бы готового (даже не утилиту, а builtin, устанавливающий экситкод
> > (переменную $?), наподобие builtin true/false))
> 
> Его не предусматривают, мне кажется, потому, что $? неустойчива - она
> модифицируется каждой следующей командой.

Это понятно. Я имела ввиду builtin, который не делает ничего кроме как
устанавливает код выхода (наподобие true/false)

> Поэтому мне изначально вся проблема кажется надуманной, или попыткой
> решения в условиях "категорически запретили приводить стиль к
> нормальному". Или же какие-то ситуации в духе "100500 веток case,
> из которых 99% просто передают статус последней команды в теле ветки,
> но для 1% его надо выставить вручную" (а почему тогда не true/false,
> они же тоже встроены?) - тоже редкий и странный вариант.

Ммм.. Попробую перефразировать свою задачу:
Требуется преобразовать строку в exitcode (0 или >0).

Можно, конечно, так:

[ $somestr = '0' ] && true || false

Но, по-моему, так было бы проще:

setstatus $somestr

Другими словами, в скрипте выполнять одно из двух действий в зависимости
от содержания строки, но используя для ветвления не test а exitcode.
Впрочем, я уже почти готова согласиться, что перемудрила..
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность George L. Yermulnik
Hello!

On Fri, 09 Feb 2018 at 08:58:30 (+0200), Irina Liakh wrote:

> Но всё равно есть ощущение, что builtin setstatus в арсенале не помешал бы..

Сформулируйте точную задачу и тогда Вам подскажут её решение без
дендро-фекальных методов =)

-- 
George L. Yermulnik
[YZ-RIPE]
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] exit utility

2018-02-08 Пенетрантность Irina Liakh
On Fri, Feb 09, 2018 at 08:27:52AM +0200, Irina Liakh wrote:
> На вход поступает некая строка (всегда разные), надо определить, не пустая
> ли она, и в зависимости от этого ветвится код:
> 
> set_status `cat | wc -c` && echo zero string || echo nonzero string
> 
> Понятно, что можно так:
> 
> [ `cat | wc -c` -eq 0 ] && echo zero string || echo nonzero string
> 
> но это менее читабельно, кмк.

Пожалуй, лучшее решение тут будет такое:

[ `cat` ] && echo nonzero string || echo zero string

Но всё равно есть ощущение, что builtin setstatus в арсенале не помешал бы..
___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd


Re: [freebsd] Listen queue overflow

2018-02-08 Пенетрантность Mikhail Golub

https://www.spinics.net/lists/samba/msg147419.html

Добавил опцию в smb4.conf:
kernel change notify = false

Пока в логе тишина.

___
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd