Как сделать так, чтобы переменная была одна и та же во всём скрипте?

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Bizdelnick писал:
14.02.2020 20:02
жучара писал(а):
14.02.2020 19:53
вы это имели ввиду?
Да, и ещё чуть ниже написано про -exec command {} +.
не использую. Мне бы с ; разобраться.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bizdelnick писал:
14.02.2020 20:02
жучара писал(а):
14.02.2020 19:53
вместо звёздочки подставляется сиксилиард имён файлов
Не подставляется. Допустимая длина командной строки ограничена, шелл её не превысит.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

То есть сколько-то подставится, потом для каждого из подставленных выполнится команда. Потом снова сколько-то подставится (допустим, 20). снова для каждого выполнится команда и так пока все необходимые файлы перебраны не будут?
Добавлено (20:18):
olecya писала:
14.02.2020 20:04
только файлы из ТЕКУЩЕЙ директории. У вас в текущей сиксилиард лежит? (надо запомнить сиксилиард)
то есть из текущей подставляет а не из текущей не подставляет?

Ну то ест вот так уже не подставит?

Shell

find ../foo * -type f -exec bash -c 'echo ${0%.*} >> dst' {} \;
Такое поведение должно быть где-нибудь прописано, например в мане. Чё-то я там найти не могу.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17245
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение Bizdelnick »

жучара писал(а):
14.02.2020 20:14
То есть сколько-то подставится, потом для каждого из подставленных выполнится команда. Потом снова сколько-то подставится (допустим, 20). снова для каждого выполнится команда и так пока все необходимые файлы перебраны не будут?
Нет. Просто будет выдано сообщение об ошибке. Команда не выполнится.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Bizdelnick писал:
14.02.2020 20:43
жучара писал(а):
14.02.2020 20:14
То есть сколько-то подставится, потом для каждого из подставленных выполнится команда. Потом снова сколько-то подставится (допустим, 20). снова для каждого выполнится команда и так пока все необходимые файлы перебраны не будут?
Нет. Просто будет выдано сообщение об ошибке. Команда не выполнится.
Будем считать, что у меня громадный-прегромадный буфер для find, в который всё влезает.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Bizdelnick писал:
14.02.2020 18:39
Должен не после первого, а после того, как буфер пайпа заполнился. То есть может и раньше, конечно, но не обязательно.
ладно, а вот тут почему-то сразу файл foo создаётся. Причём обязательно раньше и обязательно сразу.

Shell

# !/bin/bash
while read LINE
do
echo $LINE
done < <(find) > foo
Канал, вот этот вот

Shell

>
создаётся сразу так и в мане написано.

Shell

man bash
...
ПЕРЕНАПРАВЛЕНИЕ
...
Перед выполнением команды ее входной и выходной потоки могут быть перенаправлены с помощью специальных конструкций, обрабатываемых командным интерпретатором. Перенаправления также можно использовать для открытия и закрытия файлов в текущей среде работы командного интерпретатора. Следующие операторы перенаправления могут предшествовать простой команде или указываться в любом ее месте, или указываться после команды. Перенаправления обрабатываются в порядке их указания, слева направо.
...
То есть сразу же создаётся канал СРАЗУ ЖЕ файл foo. Переполнен канал, непереполнен, вообще неважно. Сразу файл foo создался и все. И сразу его имя туда и записалось. Как же так?
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17245
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение Bizdelnick »

жучара писал(а):
14.02.2020 21:37
То есть сразу же создаётся канал СРАЗУ ЖЕ файл foo. Переполнен канал, непереполнен, вообще неважно. Сразу файл foo создался и все. И сразу его имя туда и записалось. Как же так?
Создался сразу. Записалось имя, конечно же, не сразу, а только когда find его нашёл, передал в цикл, и уже оттуда оно было записано в файл.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Bizdelnick писал:
15.02.2020 00:12
жучара писал(а):
14.02.2020 21:37
То есть сразу же создаётся канал СРАЗУ ЖЕ файл foo. Переполнен канал, непереполнен, вообще неважно. Сразу файл foo создался и все. И сразу его имя туда и записалось. Как же так?
Создался сразу. Записалось имя, конечно же, не сразу, а только когда find его нашёл, передал в цикл, и уже оттуда оно было записано в файл.
Ну да. Такое дело. Тут сразу, а тут не сразу.
Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?
Почему так?
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17245
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение Bizdelnick »

Потому что в том случае сначала запускается find, который уже сам запускает bash, который создаёт файл.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Bizdelnick, спасибо, я понял. Отладчик бы помог.set -xvf так себе отладчик:

Shell

user@astra:~$ cat bar.sh
# !/bin/bash

set -xvf
echo "Привет, мир!" > dst.txt
user@astra:~$
user@astra:~$ ./bar.sh
echo "Привет, мир!" > dst.txt
++ echo 'Привет, мир!'
user@astra:~$
Хе, так я и сам вижу что привет мир. Ты мне покажи > dst.txt отдельной строкой. Привет мир я и сам знаю...
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

olecya писала:
14.02.2020 20:04
только файлы из ТЕКУЩЕЙ директории. У вас в текущей сиксилиард лежит? (надо запомнить сиксилиард)
Добавлено (14.02.2020 20:06):
по моему getconf знает максимальные величины
ладно, пусть из текущей. А так почему имя итогового файла попадает в перечень?

Shell

user@astra:~$ ls
aaa
user@astra:~$ find -exec echo $1 > dst {} \;
user@astra:~$ cat dst
.
./dst
./aaa
user@astra:~$
Договорились же, что сперва перечисляет, потом записывает. А на самом деле записывание начинается до окончания перечисления.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
15.02.2020 16:36
find -exec echo $1 > dst {} \;
">" - один из спецсимволов шелла, и интерпретируется он шеллом, а не find. Его принято указывать в конце, но в принципе, можно где угодно, смысл не меняется. Ваша команда эквивалентна следующей: find -exec echo $1 {} \; > dst. Шелл открывает файл dst и передаёт его дескриптор команде find. Перед её запуском, разумеется, так как передавать дескрипторы после запуска не может. Кроме того, "$1" тоже будет обработано текущим шеллом, до запуска find. Вам уже выше писали, что нужно это оборачивать в bash -c '...', и все спецсимволы помещать внутрь этих одинарных кавычек, чтобы для текущего шелла они были просто строкой. Строкой, которая без изменений будет передана find, который, в свою очередь, передаст её запускаемому bash после опции -c.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Вообще всё по-другому чем вчера говорили.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
15.02.2020 17:00
Вообще всё по-другому чем вчера говорили.
Где же по-другому? Вот оно, обёрнуто как надо:
жучара писал(а):
14.02.2020 20:14
find ../foo * -type f -exec bash -c 'echo ${0%.*} >> dst' {} \;
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Говорили вчера, что сперва всё перечислится, что должно, а потом для каждого перечисленного выполнится команда -exec

А то, что вы написали про то, что > dst можно в конец переносить, так это для меня всё равно, что у меня было выражение:
2+2-2*2
А дай-ка, думаю, -2 в конец перенесу:
2+2*2-2
слов просто нет.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
15.02.2020 17:09
Говорили вчера, что сперва всё перечислится, что должно, а потом для каждого перечисленного выполнится команда -exec
Если быть точным, то говорили, что сперва запустится команда find, а уже она выполнит команду exec. Это ничуть не противоречит тому, что я написал. Просто в вашей команде текст > dst не является частью команды exec.
жучара писал(а):
15.02.2020 17:09
А то, что вы написали про то, что > dst можно в конец переносить, так это для меня всё равно, что у меня было выражение:
2+2-2*2
А дай-ка, думаю, -2 в конец перенесу:
2+2*2-2
слов просто нет.
Вы, похоже, воспринимаете эту команду как одно большое выражение, которое компьютер должен обработать целиком, учитывая сразу все аспекты. Это не так.

Рассмотрим 2 команды:
find -exec echo $1 > dst {} \;
и
find -exec bash 'echo $1 >> dst' sh {} \;

Сначала их обработает текущий шелл. В то, в каком порядке он производит подстановки, я вдаваться не буду. В данном случае это не имеет значения, а для более сложных случаев сами прочитаете.

Первая команда: добавть find к аргументам; добавить -exec к аргументам; добавить echo к аргументам; заглянуть в переменную $1 - там пусто, пропускаем; установить переадресацию > dst (открыть файл на перезапись с нуля); добавить {} к аргументам; добавить ; к аргументам (если бы не было экранировано, это был бы разделитель, а не аргумент).

Вторая: добавть find к аргументам; добавить -exec к аргументам; добавить bash к аргументам; добавить -c к аргументам; добавить echo $1 >> dst к аргументам (как один большой аргумент, дословно); добавить sh к аргументам; добавить {} к аргументам; добавить ; к аргументам.

В первом случае получился список аргументов: find -exec echo {} ; и установлена переадресация дескриптора 1 в уже открытый файл dst.

Во втором: find -exec bash -c echo $1 >> dst sh {} ; и нет переадресаций.

Теперь bash смотрит в первый аргумент (find в обоих случаях), находит соответствующую команду (/usr/bin/find) и запускает с этим списком аргументов. find становится для неё $0, -exec становится $1 и т.д.

Так как bash запустил команду find, теперь работает она. Она начинает искать файлы (в первом случае они будут включать только что созданный шеллом dst), и для каждого выполняет команду exec следующим образом. Она берёт все аргументы между -exec и ;, заменяет аргумент {} на имя файла, находит команду, соответствующую первому аргументу, и запускает с этими аргументами.

В первом случае это команда /bin/echo, аргументы echo имяфайла.

Во втором - команда /bin/bash, аргументы bash -c echo $1 >> dst sh имяфайла.

В первом случае всё очевидно: команда /bin/echo выводит аргумент имяфайла в дескриптор 1, который шелл недавно переадресовал в файл dst.

Во втором только что запущенный /bin/bash рассмотрит свои аргументы, начиная с $1, увидит -c в $1 и выполнит следующий за ним аргумент (echo $1 >> dst) как полноценную шелл-команду (а не просто исполняемый файл), передав ей всё, что справа он неё, в качестве аргументов, начиная с $0. Он начнёт парсить эту команду так же, как предыдущий шелл парсил ту, большую:
Добавить echo к аргументам; прочитать $1 (в ней имяфайла), разделить на аргументы по пробелам, добавить их все в список, тж. обработав в них шаблоны; установить переадресацию >> dst (открыть файл на дозапись в конец).
Получились аргументы: echo имяфайла и переадресация для этой команды дескриптора 1 в конец файла dst.
bash запустит эту команду, и она произведёт вывод. bash завершит работу, и продолжит работать find.

В первом случае find тоже продолжит работать после завершения /bin/echo.

find продолжит искать файлы и выполнять для них exec как было указано выше. Учтите, что файлы, появившиеся во время поиска, он может найти, а может и не найти. Как повезёт. В небольших каталогах обычно не находит. Во втором случае это dst, только что созданный запущенным через -exec башем; в первом таких нет - dst создан ранее, и будет гарантированно найден.




К слову, при беглом взгляде на эти команды всё это должно прокручиваться у вас в голове за долю секунды.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

/dev/random писал:
15.02.2020 18:04
Она берёт все аргументы между -exec и ;, заменяет аргумент {} на имя файла, находит команду, соответствующую первому аргументу, и запускает с этими аргументами.
Так это получается (для первого простого случая):
было:
find -exec echo $1 > dst {} \;

Выполняем указанные преобразования:
1) заменили {} на имя файла
find -exec echo -exec > dst имяфайла \;

2) вмеcто $1 подставляем первый параметр
find -exec echo -exec > dst имяфайла \;

что-то ерунда получается.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
15.02.2020 19:02
Так это получается (для первого простого случая):
было:
find -exec echo $1 > dst {} \;
Нет. Вы опять рассматриваете команду, как будто она должна обрабатываться как единое выражение. В этом первом случае команда find запускается со следующими аргументами: find -exec echo {} ;. Команда уже разбита на аргументы, и то, что не является аргументами, убрано. Между -exec и ; - только echo и {}.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

Ясно. Я простой человек и просто читаю маны. Любой простой человек, который прочтёт man find, поймёт, что >dst относится к echo, но не к find!
man find
...
-exec command ;
Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of `;' is encountered. The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a `\') or quoted to protect them from expansion by the shell. See the EXAMPLES section for examples of the use of the -exec option. The specified command is run once for each matched file. The command is executed in the starting directory. There are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead.
и разобьёт find -exec echo $1 > dst {} \; в уме на две логические части, find и echo $1 > dst

Потом будет их комбинировать как-то. Это я в оправдание своё, если чё.

+++++++++++++++++++++++++++++++++++++++++++++

Вот вчера весь сыр-бор был, как это всё работает, так:

find
echo $1 > dst
find
echo $1 > dst
find
echo $1 > dst
find
echo $1 > dst
find
echo $1 > dst
find
echo $1 > dst

Или эдак:

ffffffffffffffffiiiiiiiiiiiiiiiiiiiiiiiiiinnnnnnnnnnnnnnnnddddddddddddddd
echo $1 > dst
echo $1 > dst
echo $1 > dst
echo $1 > dst
echo $1 > dst
echo $1 > dst
echo $1 > dst

А оно и не так и не эдак.
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17245
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение Bizdelnick »

жучара писал(а):
15.02.2020 20:08
Любой простой человек, который прочтёт man find, поймёт, что >dst относится к echo, но не к find!
Это не относится ни к echo, ни к find. Эта конструкция обрабатывается шеллом. Поэтому в мане по find Вы про неё, конечно же, ничего не найдёте, ведь find может быть запущен из разных шеллов (хоть из cmd.exe), а может и вообще без шелла, напрямую через execve.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 1039
ОС: Fedora

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение s.xbatob »

жучара писал(а):
15.02.2020 16:36
А так почему имя итогового файла попадает в перечень?
потому что цепочки пайпов или перенаправлений разрешаются как только до них доходит дело. Ешё и справа налево (и причины этому есть), так что файл по > будет создан до того, как будет вызван процесс, в нашем случае find
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

/dev/random писал:
15.02.2020 18:04
find -exec echo $1 > dst {} \;
Мне не совсем понятно, так у нас в этой команде
find -exec echo $1 > dst {} \;

Имя каждого найденного файла сперва подставляется сюда {}, а потом сюда $1?

Может, я дурак, может, чё, но по вашему объяснению, вот так должно работать

find -exec echo {} > dst.txt \;

и ведь работает, без $1
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
20.02.2020 18:01
Мне не совсем понятно, так у нас в этой команде
find -exec echo $1 > dst {} \;

Имя каждого найденного файла сперва подставляется сюда {}, а потом сюда $1?
Вы опять допускаете ту же самую ошибку, которую я вам уже третий раз говорю не допускать. Я уже писал, как это происходит. Сначала команда обрабатывается текущим шеллом. Подстановку {} выполняет find, но никакого find пока нет! Забудьте пока про find. Это просто какая-то непонятная шеллу команда. Поставьте себя на место шелла и мысленно обработайте эту строку.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

/dev/random писал:
20.02.2020 18:09
жучара писал(а):
20.02.2020 18:01
Мне не совсем понятно, так у нас в этой команде
find -exec echo $1 > dst {} \;

Имя каждого найденного файла сперва подставляется сюда {}, а потом сюда $1?
Вы опять допускаете ту же самую ошибку, которую я вам уже третий раз говорю не допускать. Я уже писал, как это происходит. Сначала команда обрабатывается текущим шеллом. Подстановку {} выполняет find, но никакого find пока нет! Забудьте пока про find. Это просто какая-то непонятная шеллу команда. Поставьте себя на место шелла и мысленно обработайте эту строку.
Предлагаю обработать другую строку, вот эту (попроще):
find -exec echo {} > dst \;

Получится результат один к одному, как у вас:
получился список аргументов: find -exec echo {} ; и установлена переадресация дескриптора 1 в уже открытый файл dst.
Оно теперь будет работать, только в путь. Вопрос: $1-то зачем нужно?
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
20.02.2020 18:28
Вопрос: $1-то зачем нужно?
Он там был потому, что вы его туда вписали. Но без обёртки в bash -c '...' он только вносит путаницу, и я вам об этом уже говорил. Ещё одна вещь, которая без этой обёртки только вносит путаницу - это то, что у вас > dst идёт перед \;, а не после. Без этой обёртки обе эти вещи (и $1, и > dst) обрабатываются текущим шеллом, до запуска find, и в список параметров, передаваемых find, не входят. Если бы $1 был непустым, то в список параметров вошло бы его разрезанное по пробелам содержимое.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

/dev/random писал:
20.02.2020 18:37
жучара писал(а):
20.02.2020 18:28
Вопрос: $1-то зачем нужно?
Он там был потому, что вы его туда вписали. Но без обёртки в bash -c '...' он только вносит путаницу, и я вам об этом уже говорил. Ещё одна вещь, которая без этой обёртки только вносит путаницу - это то, что у вас > dst идёт перед \;, а не после. Без этой обёртки обе эти вещи (и $1, и > dst) обрабатываются текущим шеллом, до запуска find, и в список параметров, передаваемых find, не входят. Если бы $1 был непустым, то в список параметров вошло бы его разрезанное по пробелам содержимое.
Действительно, я её придумал, а зачем? Похоже, просто по запарке. А $1 пустой и на вывод не влияет, но такое впечатление будто очень важный параметр, пока вникать не начнёшь. Извините, что потревожил лишний раз.
Про > dst тоже точно сказано, ну так это до меня ещё начали так писать
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

жучара писал(а):
20.02.2020 18:44
ну так это до меня ещё начали так писать
Нет. По ссылке такое расположение имеет смысл, у вас - нет. Обратите внимание, что там это часть заключённой в одинарные кавычки строки.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

/dev/random писал:
20.02.2020 19:07
жучара писал(а):
20.02.2020 18:44
ну так это до меня ещё начали так писать
Нет. По ссылке такое расположение имеет смысл, у вас - нет. Обратите внимание, что там это часть заключённой в одинарные кавычки строки.
Ну и не надо меня жалеть, надо было сразу спрашивать, зачем у меня пустой параметр и зачем у меня перенаправление в центре! Бить по башке сразу! А то я написал две чуши и сканало. Не должно так быть. Время только зря потеряли.
Я просто читаю маны.
Спасибо сказали:

MiK13
Сообщения: 877
ОС: Linux Debian

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение MiK13 »

olecya писала:
14.02.2020 20:04
(надо запомнить сиксилиард)
Думаю, что не стоит это запоминать :)
Я, правда, не раз слышал это слово, но, по-моему, его просто произносят люди, которые не знакомы с наименованием больших чисел.
Но есть похожие числительные: секстиллиард (тысяча секстиллионов, 1000᛫1000000⁶ и септиллиард (тысяча септиллионов, 1000᛫1000000⁷
Образованы от латинских названий чисел 6 (секст) и 7 (септ)
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5071
ОС: Gentoo

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение /dev/random »

MiK13 писал:
05.05.2020 16:05
Но есть похожие числительные: секстиллиард (тысяча секстиллионов, 1000᛫1000000⁶ и септиллиард (тысяча септиллионов, 1000᛫1000000⁷
Они есть только в длинной системе наименований. В России используется короткая, с одним-единственным исключением: слово "миллиард" взято из длинной. Других -ардов в русском языке нет.
Спасибо сказали:

MiK13
Сообщения: 877
ОС: Linux Debian

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение MiK13 »

/dev/random писал:
05.05.2020 17:08
MiK13 писал:
05.05.2020 16:05
Но есть похожие числительные: секстиллиард (тысяча секстиллионов, 1000᛫1000000⁶ и септиллиард (тысяча септиллионов, 1000᛫1000000⁷
Они есть только в длинной системе наименований. В России используется короткая, с одним-единственным исключением: слово "миллиард" взято из длинной. Других -ардов в русском языке нет.
Я это знаю. Просто хотел указать, что числительного сиксилиард нет. Но есть похожие на него секстиллиард и септиллиард.
Кстати, когда я впервые узнал о подобной системе наименования больших чисел (а познакомился именно с длинной системой наименований), то в ней то же не было подобных '-ардов'. Был максимум миллиард. А после биллиона к названиям типа триллион, квадрильон и т.д. впереди добавлялось слово "тысяча". То есть был бы не секстиллиард, а тысяча секстиллионов.
Когда-то я прочитал, что длинная система наименований используется в Великобритании, а во многих других странах (в том числе и в России используется короткая. Как и в США. И из-за этого немного путался, когда слышал про биллион.
Но длинная система наименований на мой взгляд более логична (pow(1e6,N)), чем короткая (pow(1e3,N+1))
И ещё. По-моему, в конце 60-х годов в одной книжке прочитал про "сферу Дайсона". И там было указано предполагаемое количество населения. Было названо число и было указано чему оно равно, то есть сколку в нём нулей. И было это исходя из длинной системы наименованний.
По-моему, в книге "Занимательная арифметика" Перельмана, изданная в 30-х годах было наименование больших чисел. И также по длинной системе наименований.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 625
ОС: астралинукс

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение жучара »

olecya писала:
01.12.2019 14:32
Пайп открывает подоболочку для выполнения следующего кода, чтобы выполнение происходило в той же оболочке
необходимо включить опцию

Код: Выделить всё

shopt -s lastpipe
или поместить команду в скобки

Код: Выделить всё

find | (your command \
else command)
Что-то не очень помогает (скрипт запускается "sudo skript.sh", в скрипте есть команды, которые необходимо выполнить от имени пользователя user)
#!/bin/bash
#skript.sh
VAL=foo
echo $VAL
shopt -s lastpipe
su user -c 'VAL=cafebabe && echo $VAL'
echo $VAL
#!/bin/bash
#skript.sh
VAL=foo
echo $VAL
(su user -c 'VAL=cafebabe && echo $VAL')
echo $VAL
Приходится выкручиваться так:
#!/bin/bash
#skript.sh
VAL=foo
echo $VAL
VAL=$(su user -c 'VAL=cafebabe && echo $VAL')
echo $VAL
Я просто читаю маны.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 17245
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы переменная была одна и та же во всём скрипте?

Сообщение Bizdelnick »

жучара писал(а):
12.05.2020 15:26
Что-то не очень помогает
И не поможет. su запускает оболочку пользователя, которая ничего не знает про локальные переменные оболочки, выполняющей скрипт. bash-заклинания тут бессильны, потому что su — не bash.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: