Параметры командной строки
С и — компилируемый язык. После сборки программа представляет собой исполняемый файл (мы не рассматриваем создание динамических библиотек, драйверов и т.д.). Наши программы очень простые и не содержат библиотек времени выполнения (Runtime libraries), поэтому могут быть перенесены на компьютер с такой же операционной системой (и подобной архитектурой) и там запущены.
Программа во время запуска может принимать параметры. Они являются аргументами функции main. Общий вид функции main следующий
Первым аргументом argc является число переданных функции параметров. Второй аргумент – массив строк – собственно сами параметры. Так как параметры у функции могут быть любыми, то они передаются как строки, и уже сама программа должна их разбирать и приводить к нужному типу.
Первым аргументом (argv[0]) всегда является имя программы. При этом имя выводится в зависимости от того, откуда была запущена программа.
Первый аргумент — это имя программы
Теперь научимся немного работать с командной строкой. Это понадобится для того, чтобы передавать аргументы нашей программе. Сочетание клавиш Win+R вызывает окно «Выполнить». Наберите в нём cmd и вы откроете командную строку. Также можно найти cmd.exe поиском в меню Пуск. В юникс-подобных операционных системах можно вызвать программу «терминал».
Мы не будем изучать сколько-нибудь много команд. Только те, которые понадобятся в работе.
Стандартная для всех операционных систем команда cd осуществляет переход к нужной папке. Существует два зарезервированных имени — . (точка) и .. (две точки). Точка — это имя текущей папки.
никуда не переходит
.. обращение к родительской папке
переход в родительскую папку
Для перехода по нужному пишется cd адрес. Например, нужно перейти на windows в папку C:\Windows\System32
В линуксе если нужно перейти в папку /var/mysql
Если путь содержит пробелы, то он пишется в двойных кавычках
cd «D:\Docuents and Settings\Prolog»
Терминал имеет следующие полезные особенности: если нажать стрелку вверх, по появится предыдущая выполненная команда. Если нажать tab, то терминал попытается дополнить строку до известной ему команды, или дополнить путь, перебирая все папки и файлы в текущей папке.
Наберите cd C:\
нажимайте tab и смотрите, что происходит.
Ещё одна важная команда dir на windows и ls на linux, выводит на консоль содержимое текущей папки (той папки, в которой вы находитесь в данный момент)
Ваша программа вернула своё полное имя. Перейдите в папку, где располагается ваша программа и посмотрите её содержимое
Переходим в папку, в которой располагается наша программа и смотрим содержимое
Теперь, после того, как мы перешли в нашу папку, можно выполнить нашу программу. Для этого наберите её имя.
Вызов программы из командной строки
Заметьте — имя изменилось. Так как программа вызывается из своей папки, то выводится относительно имя. Теперь изменим программу и сделаем так, чтобы она выводила все аргументы. которые ей переданы.
Соберите проект. Перед сборкой убедитесь, что программа закрыта. Теперь вызовите программу, передав ей разные аргументы. Для этого напишите имя программы и через пробел аргументы
Передача аргументов программе
Давайте теперь напишем программу, которая получает два аргумента числа и выводит их сумму
Соберём и вызовем
Функция принимает в качестве аргументов два числа
Таким образом работает большинство программ. Кликая на ярлык, вы вызываете программу, на которую он ссылается. Большинство программ также принимают различные аргументы. Например, можно вызвать браузер firefox из командной строки и передать аргументы
firefox.exe «www.mozilla.org» «learnc.info» и он сразу же откроет в двух вкладках сайты по указанным адресам.
Многие стандартные команды также имеют параметры. В windows принято, что они начинаются с прямого слеша, в юниксе с минуса или двух минусов. Например
выводит только папки, а в терминале linux
ls -l выводит все файлы и папки с указанием атрибутов
Для просмотра дополнительных команд windows наберите в командной строке help или смотрите руководство (его легко найти в интернете). Для линукса команд и их опций гораздо больше, а некоторые из них являются самостоятельными языками программирования, так что стоит выучить хотя бы минимальный набор и их опции.
Всё ещё не понятно? – пиши вопросы на ящик
Bash-скрипты, часть 3: параметры и ключи командной строки
Освоив предыдущие части этой серии материалов, вы узнали о том, что такое bash-скрипты, как их писать, как управлять потоком выполнения программы, как работать с файлами. Сегодня мы поговорим о том, как добавить скриптам интерактивности, оснастив их возможностями по получению данных от пользователя и по обработке этих данных.
Наиболее распространённый способ передачи данных сценариям заключается в использовании параметров командной строки. Вызвав сценарий с параметрами, мы передаём ему некую информацию, с которой он может работать. Выглядит это так:
В данном примере сценарию передано два параметра — «10» и «20». Всё это хорошо, но как прочесть данные в скрипте?
Чтение параметров командной строки
Оболочка bash назначает специальным переменным, называемым позиционными параметрами, введённые при вызове скрипта параметры командной строки:
- $0 — имя скрипта.
- $1 — первый параметр.
- $2 — второй параметр — и так далее, вплоть до переменной $9 , в которую попадает девятый параметр.
Запустим сценарий с параметрами:
Вот что он выведет в консоль.
Вывод параметров, с которыми запущен скрипт
Обратите внимание на то, что параметры командной строки разделяются пробелами.
Взглянем на ещё один пример использования параметров. Тут мы найдём сумму чисел, переданных сценарию:
Запустим скрипт и проверим результат вычислений.
Сценарий, который находит сумму переданных ему чисел
Параметры командной строки не обязательно должны быть числами. Сценариям можно передавать и строки. Например, вот скрипт, работающий со строкой:
Он выведет то, что мы от него ожидаем.
Сценарий, работающий со строковым параметром
Что если параметр содержит пробелы, а нам надо обрабатывать его как самостоятельный фрагмент данных? Полагаем, если вы освоили предыдущие части этого руководства, ответ вы уже знаете. Заключается он в использовании кавычек.
Если скрипту надо больше девяти параметров, при обращении к ним номер в имени переменной надо заключать в фигурные скобки, например так:
Проверка параметров
Если скрипт вызван без параметров, но для нормальной работы кода предполагается их наличие, возникнет ошибка. Поэтому рекомендуется всегда проверять наличие параметров, переданных сценарию при вызове. Например, это можно организовать так:
Вызовем скрипт сначала с параметром, а потом без параметров.
Вызов скрипта, проверяющего наличие параметров командной строки
Подсчёт параметров
В скрипте можно подсчитать количество переданных ему параметров. Оболочка bash предоставляет для этого специальную переменную. А именно, переменная $# содержит количество параметров, переданных сценарию при вызове.
В результате скрипт сообщит о том, что ему передано 5 параметров.
Подсчёт количества параметров в скрипте
Эта переменная даёт необычный способ получения последнего из переданных скрипту параметров, не требующий знания их количества. Вот как это выглядит:
Вызовем скрипт и посмотрим, что он выведет.
Обращение к последнему параметру
Захват всех параметров командной строки
В некоторых случаях нужно захватить все параметры, переданные скрипту. Для этого можно воспользоваться переменными $* и $@ . Обе они содержат все параметры командной строки, что делает возможным доступ к тому, что передано сценарию, без использования позиционных параметров.
Переменная $* содержит все параметры, введённые в командной строке, в виде единого «слова».
В переменной $@ параметры разбиты на отдельные «слова». Эти параметры можно перебирать в циклах.
Рассмотрим разницу между этими переменными на примерах. Сначала взглянем на их содержимое:
Вот вывод скрипта.
Переменные $* и $@
Как видно, при выводе обеих переменных получается одно и то же. Теперь попробуем пройтись по содержимому этих переменных в циклах для того, чтобы увидеть разницу между ними:
Взгляните на то, что скрипт вывел в консоль. Разница между переменными вполне очевидна.
Разбор переменных $* и $@ в цикле
Переменная $* содержит все переданные скрипту параметры как единый фрагмент данных, в то время как в переменной $@ они представлены самостоятельными значениями. Какой именно переменной воспользоваться — зависит от того, что именно нужно в конкретном сценарии.
Команда shift
Использовать команду shift в bash-скриптах следует с осторожностью, так как она, в прямом смысле слова, сдвигает значения позиционных параметров.
Когда вы используете эту команду, она, по умолчанию, сдвигает значения позиционных параметров влево. Например, значение переменной $3 становится значением переменной $2 , значение $2 переходит в $1 , а то, что было до этого в $1, теряется. Обратите внимание на то, что при этом значение переменной $0 , содержащей имя скрипта, не меняется.
Воспользовавшись командой shift , рассмотрим ещё один способ перебора переданных скрипту параметров:
Скрипт задействует цикл while , проверяя длину значения первого параметра. Когда длина станет равна нулю, происходит выход из цикла. После проверки первого параметра и вывода его на экран, вызывается команда shift , которая сдвигает значения параметров на одну позицию.
Использование команды shift для перебора параметров
Используя команду shift , помните о том, что при каждом её вызове значение переменной $1 безвозвратно теряется.
Ключи командной строки
Ключи командной строки обычно выглядят как буквы, перед которыми ставится тире. Они служат для управления сценариями. Рассмотрим такой пример:
И проанализируем то, что он выведет в терминал.
Обработка ключей в скрипте
В этом коде использована конструкция case , которая сверяет переданный ей ключ со списком обрабатываемых скриптом ключей. Если переданное значение нашлось в этом списке, выполняется соответствующая ветвь кода. Если при вызове скрипта будет использован любой ключ, обработка которого не предусмотрена, будет исполнена ветвь «*».
Как различать ключи и параметры
Часто при написании bash-скриптов возникает ситуация, когда надо использовать и параметры командной строки, и ключи. Стандартный способ это сделать заключается в применении специальной последовательности символов, которая сообщает скрипту о том, когда заканчиваются ключи и начинаются обычные параметры.
Эта последовательность — двойное тире (—). Оболочка использует её для указания позиции, на которой заканчивается список ключей. После того, как скрипт обнаружит признак окончания ключей, то, что осталось, можно, не опасаясь ошибок, обрабатывать как параметры, а не как ключи. Рассмотрим пример:
Этот сценарий использует команду break для прерывания цикла while при обнаружении в строке двойного тире.
Вот что получится после его вызова.
Обработка ключей и параметров командной строки
Как видно, когда скрипт, разбирая переданные ему данные, находит двойное тире, он завершает обработку ключей и считает всё, что ещё не обработано, параметрами.
Обработка ключей со значениями
По мере усложнения ваших скриптов, вы столкнётесь с ситуациями, когда обычных ключей уже недостаточно, а значит, нужно будет использовать ключи с некими значениями. Например, вызов сценария в котором используется подобная возможность, выглядит так:
Скрипт должен уметь определять, когда вместе с ключами командной строки используются дополнительные параметры:
Вызовем этот скрипт в таком виде:
Посмотрим на результаты его работы.
Обработка параметров ключей
В данном примере в конструкции case обрабатываются три ключа. Ключ -b требует наличия дополнительного параметра. Так как обрабатываемый ключ находится в переменной $1 , соответствующий ему параметр будет находиться в $2 (тут используется команда shift , поэтому, по мере обработки, всё, что передано сценарию, сдвигается влево). Когда с этим мы разобрались, осталось лишь извлечь значение переменной $2 и у нас будет параметр нужного ключа. Конечно, тут понадобится ещё одна команда shift для того, чтобы следующий ключ попал в $1 .
Использование стандартных ключей
При написании bash-скриптов вы можете выбирать любые буквы для ключей командной строки и произвольно задавать реакцию скрипта на эти ключи. Однако, в мире Linux значения некоторых ключей стали чем-то вроде стандарта, которого полезно придерживаться. Вот список этих ключей:
Если вы работаете в Linux, вам, скорее всего, знакомы многие из этих ключей. Использовав их в общепринятом значении в своих скриптах, вы поможете пользователям взаимодействовать с ними, не беспокоясь о чтении документации.
Получение данных от пользователя
Ключи и параметры командной строки — это отличный способ получить данные от того, кто пользуется скриптом, однако в некоторых случаях нужно больше интерактивности.
Иногда сценарии нуждаются в данных, которые пользователь должен ввести во время выполнения программы. Именно для этой цели в оболочке bash имеется команда read .
Эта команда позволяет принимать введённые данные либо со стандартного ввода (с клавиатуры), либо используя другие дескрипторы файлов. После получения данных, эта команда помещает их в переменную:
Обратите внимание на то, что команда echo , которая выводит приглашение, вызывается с ключом -n . Это приводит к тому, что в конце приглашения не выводится знак перевода строки, что позволяет пользователю скрипта вводить данные там же, где расположено приглашение, а не на следующей строке.
Обработка пользовательского ввода
При вызове read можно указывать и несколько переменных:
Вот что выведет скрипт после запуска.
Несколько переменных в команде read
Если, вызвав read , не указывать переменную, данные, введённые пользователем, будут помещены в специальную переменную среды REPLY :
Использование переменной среды REPLY
Если скрипт должен продолжать выполнение независимо от того, введёт пользователь какие-то данные или нет, вызывая команду read можно воспользоваться ключом -t . А именно, параметр ключа задаёт время ожидания ввода в секундах:
Если данные не будут введены в течение 5 секунд, скрипт выполнит ветвь условного оператора else , выведя извинения.
Ограничение времени на ввод данных
Ввод паролей
Иногда то, что вводит пользователь в ответ на вопрос скрипта, лучше на экране не показывать. Например, так обычно делают, запрашивая пароли. Ключ -s команды read предотвращает отображение на экране данных, вводимых с клавиатуры. На самом деле, данные выводятся, но команда read делает цвет текста таким же, как цвет фона.
Вот как отработает этот скрипт.
Ввод конфиденциальных данных
Чтение данных из файла
Команда read может, при каждом вызове, читать одну строку текста из файла. Когда в файле больше не останется непрочитанных строк, она просто остановится. Если нужно получить в скрипте всё содержимое файла, можно, с помощью конвейера, передать результаты вызова команды cat для файла, конструкции while , которая содержит команду read (конечно, использование команды cat выглядит примитивно, но наша цель — показать всё максимально просто, ориентируясь на новичков; опытные пользователи, уверены, это поймут).
Напишем скрипт, в котором используется только что описанный подход к чтению файлов.
Посмотрим на него в деле.
Чтение данных из файла
Тут мы передали в цикл while содержимое файла и перебрали все строки этого файла, выводя номер и содержимое каждой из них.
Итоги
Сегодня мы разобрали работу с ключами и параметрами командной строки. Без этих средств диапазон использования скриптов оказывается чрезвычайно узким. Даже если скрипт написан, что называется, «для себя». Тут же мы рассмотрели подходы к получению данных от пользователя во время выполнения программы — это делает сценарии интерактивными.
В следующий раз поговорим об операциях ввода и вывода.
Уважаемые читатели! Спасибо вам за то, что делитесь опытом в комментариях к предыдущим частям этого цикла материалов. Если вам есть что сказать об обработке всего того, что можно передать в скрипт при запуске или во время его работы, уверены, многим будет интересно об этом почитать.
Урок №110. Аргументы командной строки
На этом уроке мы рассмотрим, что такое аргументы командной строки в языке C++ и то, как они используются.
Аргументы командной строки
Из урока №3 мы уже знаем, что при компиляции и линкинге, компилятор создает исполняемый файл. Когда программа запускается, выполнение начинается с первой строки функции main(). До этого урока мы объявляли main() следующим образом:
Обратите внимание, в этой версии функции main() никаких параметров нет. Тем не менее, многие программы нуждаются в некоторых входных данных. Например, предположим, что вы пишете программу под названием Picture, которая принимает изображение в качестве входных данных, а затем делает из этого изображения миниатюру (уменьшенная версия изображения). Как функция picture() узнает, какое изображение нужно принять и обработать? Пользователь должен сообщить программе, какой файл следует открыть. Это можно сделать следующим образом:
Тем не менее, здесь есть потенциальная проблема. Каждый раз при запуске программа будет ожидать пользовательский ввод. Это не проблема, если вы вручную запускаете программу из командной строки один раз для одного изображения. Но это уже проблема, если вы хотите работать с большим количеством файлов или чтобы другая программа имела возможность запустить эту программу.
Рассмотрим это детально. Например, вы хотите создать миниатюры для всех файлов-изображений, которые находятся в определенном каталоге. Как это сделать? Вы можете запускать эту программу столько раз, сколько есть изображений в каталоге, введя каждое имя файла вручную. Однако, если есть сотни изображений, такой подход будет, мягко говоря, не очень эффективным! Решением здесь будет написать программу, которая перебирала бы каждое имя файла в каталоге, вызывая каждый раз функцию picture() для каждого файла.
Теперь рассмотрим случай, когда у вас есть веб-сайт, и вы хотите, чтобы он создавал миниатюру каждый раз, когда пользователь загружает изображение на сайт. Эта программа не может принимать входные данные из Интернета и следует логический вопрос: «Как тогда вводить имя файла?». Выходом является вызов веб-сервером функции picture() автоматически каждый раз после загрузки файла.
В обоих случаях нам нужно, чтобы внешняя программа передавала имя файла в качестве входных данных в нашу программу при её запуске, вместо того, чтобы функция picture() сама дожидалась, пока пользователь вручную введет имя файла.
Аргументы командной строки — это необязательные строковые аргументы, передаваемые операционной системой в программу при её запуске. Программа может их использовать в качестве входных данных, либо игнорировать. Подобно тому, как параметры одной функции предоставляют данные для параметров другой функции, так и аргументы командной строки предоставляют возможность людям или программам предоставлять входные данные для программы.
Передача аргументов командной строки
Исполняемые программы могут запускаться в командной строке через вызов. Например, для запуска исполняемого файла MyProgram , который находится в корневом каталоге диска C в Windows, вам нужно ввести:
Чтобы передать аргументы командной строки в MyProgram , вам нужно будет их просто перечислить после имени исполняемого файла:
Теперь, при запуске MyProgram , SomeContent.txt будет предоставлен в качестве аргумента командной строки. Программа может иметь несколько аргументов командной строки, разделенных пробелами:
C:\>MyProgram SomeContent.txt SomeOtherContent.txt
Это также работает и с Linux (хотя структура каталогов будет отличаться от структуры каталогов в Windows).
Если вы запускаете свою программу из среды IDE, то ваша IDE должна предоставить способ ввода аргументов командной строки.
Для пользователей Visual Studio: Щелкните правой кнопкой мыши по нужному проекту в меню «Обозреватель решений» > «Свойства» :
Затем выберите «Свойства конфигурации» > «Отладка» . На правой панели будет строка «Аргументы команды» . Вы сможете здесь ввести аргументы командной строки, и они будут автоматически переданы вашей программе при её запуске:
Пользователям Code::Blocks: Выберите «Project» > «Set program`s arguments. » :
Использование аргументов командной строки
Теперь, когда вы знаете, как передавать аргументы командной строки в программу, следующим шагом будет доступ к ним из программы. Для этого используется уже другая форма функции main(), которая принимает два аргумента ( argc и argv ) следующим образом:
Учение основ cmd(bat) (ДЛЯ НОВИЧКОВ)
Хэллоу пикабушник. Я хочу, чтобы ты понял весь программный язык cmd(bat) на понятном языке. Ну, давай приступим?
Для начала Разберем, что такое cmd(bat) и с чем его едят?
С этим мы разобрались, теперь, зачем он нужен? Дело в том, что некоторые вещи можно быстрее выполнить в командной строке, а некоторые настройки в принципе отсутствуют в графическом интерфейсе пользователя. Так же следует иметь в виду, что до сих пор существуют утилиты, не имеющие графического интерфейса, а иногда он оказывается недоступен, например из-за сбоя.
Как открыть командную сроку(cmd.exe)
И так, давайте создадим на рабочем столе текстовый документ, а далее впишем в него
Для вывода сообщения в BAT файлах используется команда echo: Вывод сообщений и переключение режима отображения команд на экране. ECHO [ON. OFF] ECHO [сообщение] Ввод ECHO без параметров позволяет выяснить текущий режим отображения команд.
В данном случае напишем @Echo off
После напишем такую строку A: Что это такое? Это так сказать, строка, позволяющая делать оборот(обратно выполнять функции,команды после этой строки)
Далее после A: напишем, echo HELLO MY FRIEND (тут вышла ошибочка, пишем :A, а не A: )
echo — команда, позволяющая показывать сообщения, в моем случае это «HELLO MY FRIEND«
После давайте напишем команду, которая будет открывать окно, в данном случае это команда «Start»
Команда START — запуск приложения в новом окне
Команда START позволяет запускать приложения в отдельном окне, с возможностью указания некоторых параметров их выполнения.
Формат командной строки:
START [«заголовок»] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | REALTIME| /ABOVENORMAL | /BELOWNORMAL] [/WAIT] [/B] [команда/программа] [параметры]
Параметры командной строки:
«заголовок» — заголовок окна. Обязательно в двойных кавычках.
путь — рабочий каталог.
B — запуск приложения без создания нового окна с отключением обработки сочетания клавиш CTRL+C. Если приложение не обрабатывает сочетание клавиш CTRL+C самостоятельно, единственным способом его прерывания является использование сочетания клавиш CTRL+Break.
I — Новой средой станет исходная среда, переданная cmd.exe, а не текущая среда.
MIN — Запуск команды/программы в свернутом окне.
MAX — Запуск команды/программы в развернутом окне.
SEPARATE — Запуск 16-разрядной программы Windows в отдельной области памяти.
SHARED — Запуск 16-разрядной программы Windows в общей области памяти.
LOW — Запуск приложения с приоритетом IDLE (самый низкий приоритет).
NORMAL — Запуск приложения с приоритетом NORMAL.
HIGH — Запуск приложения с приоритетом HIGH.
REALTIME — Запуск приложения с приоритетом REALTIME (самый высокий приоритет).
WAIT — Запуск приложения с ожиданием его завершения.
ABOVENORMAL — Запуск приложения с классом приоритета ABOVENORMAL (выше стандартного)
BELOWNORMAL — Запуск приложения с классом приоритета BELOWNORMAL (ниже стандартного)
команда/программа — Если это внутренняя команда cmd.exe или пакетный файл, обработчик команд (cmd.exe) запускается с ключом /K. Это означает, что окно не будет закрыто после завершения команды. Если это не внутренняя команда cmd.exe и не пакетный файл, значит, это программа, которая будет запущена в графическом или текстовом окне.
Но давайте напишем start http://google.com — при данное команде, будет открываться гугл.
После напишем echo I KILLED YOUR WINDOWS (Мини шуточка пхпх) — команда которая будет выводить текст. И на последок пишем goto A (для работы круга)
Вот как все это должно выглядеть
Нажимаем «Файл» «Сохранить как» Рабочий стол
Тип файла выбираем «Все файлы» и к названии вашего файла(в моем случае пикабу) приписываем .bat
Все, теперь открываем и проверяем!
Теперь можем видеть такую картину:
в вк вы можете попросить меня скинуть вам немножко жоще батник xD
Как сделать распараллеливание с помощью cmd?
Вызов одной программы после неё вызов ещё сорока, которые должны работать параллельно. После того как те сорок отработают вызов тех, которые должны отработать последовательно.
А как можно открыть фай батником из папки в которой он находится?
Наш маленький секрет
Ответ Vzazu в «Ревнивец»
У меня тоже есть, что рассказать!
Было лет 15 назад. Выходной, часов 6 утра, сладко спим с парнем. Звонок на сотовый, зачем-то взяла трубку, там оооочень возмущённый женский голос:
— Это ConDar? (имя прям угадала, но оно у меня распространëнное)
— Вы зачем моему Диме звоните?
Тут я аж проснулась:
— Какому Диме? Вы о чём вообще?
— Моему Димеееее. Хватит звонить.
— Девушка, у меня из знакомых Дим только бывший одноклассник, которого я с самого выпуска и не видела. И вообще, 6 утра! Совесть имейте.
— В смысле 6 утра? Я куда звоню?
— В Москву вы звоните!
— Ой, кажется, правда ошиблась, я из Уфы. Извините.
Трубку положила, очень надеялась спать дальше, тут звонок с этого же номера и, собственно, фраза, из-за которой я и запомнила эту историю:
— Я, конечно, извиняюсь, что опять звоню, но, скажите, пожалуйста: я могу вам доверять?
Шпионам на заметку
Живу в Англии, парень англичанин. Через год совместного проживания случайно обратили внимание, что мы чихаем по-разному. Я чихаю АААПЧХИИИИ, а он АААЧХУУУУ. Задумались, стали расспрашивать окружающих, как они чихают. После опроса выяснилось: а) это не тот вопрос, который люди от тебя ожидают; б) все опрошенные русские апчхикают, а европейцы апчхукают
Если тут есть шпионы, мотайте на ус.
Агностик
Человечность
На волне постов про опаздывающих
По юности встречался я с одной дамой. Отношения наши были недолгими, около полугода. Но запомнились тем, что она постоянно опаздывала.
«В 7 буду готова, заезжай!»
В 7 часов я у нее под подъездом, звоню — «Выхожу, выхожу!». И пошло время ожидания) В среднем каждый раз по полчаса я ее ждал. Я не знаю с чем была связана эта особенность, но она реально не видела в этом ничего плохого. Ни разу не слышал от нее извинений, ни разу не объяснила в чем дело.
В начале это воспринималось мною снисходительно, но со временем начинало напрягать. Говорил об этом не раз. В ответ «Ой ха ха хи хи, ну опоздала немного, ты же подождал и ничего с тобой не случилось».
В последний раз я просидел в машине под ее подъездом 55 минут. Когда она вышла, то высказал ей всё в лицо и уехал без неё. Видимо это очень задело ее гордость, т.к. после этого ни звонка, ни смски от нее не поступало.
А для общих знакомых причиной нашего расставания было «Он повысил на меня голос!».
Ира, если ты это прочитала и узнала себя, то купи себе часы!
Насекомых на мясо, ленивцев на почту
Тут даже Корчевников ох..ел
Ответ ConDar в «Ревнивец»
Мама на и днях рассказала.
Звонок на мобильный. Там какая-то баба:
— Ты че моему Равшану (имя точно не помню, но подобное) звонишь? Ты что-то на него имеешь?
— Какой Равшан.
— Такой-то! Я его жена, зачем ты ему звонишь?
— Дура, мне 62 года! А Равшан мне машину чинит.
— Ой, извините.
Ответ на пост «Слабаки и соплегоны?»
А я просто оставлю это здесь. Харьков-2023. Жена в Польше. Теперь уже «с другом», подробнее тяжело рассказывать. Родители на связь выходят только когда надо чтобы приехал помог со Светом, водой, отвезти куда-то. Брат в Полтаве. У друзей свои проблемы. Позавчера даже с работы далеко уезжать не стал. В магазине рядом взял бутылку коньяка, в сзади фуфайки расстелил (у меня ВАЗ-2104). На буке ТБВ включил, телефон отключил и бутылку коняшки с лимончиком и плавленым сырком сожрал.
Наутро выслушал какое я говно от всех.
Теперь сижу думаю, а нахрен мне вообще всё это нужно.
А чем вы покорили свою женщину?
Как жена говорит мне сейчас:
— Ты писец, как оригинально покорил меня. 2001 год. Я перебиваюсь на хлебе и воде. Сыну варила кашу, что он не съел, то моё. Реально голодала. Какие там лямуры? Выжить бы. Но ты прилип. Ладно, думаю, жизнь мимо проходит, а он симпатичный такой. Слово за слово, рядом работаем, да просто кофе попьём.
А ты на свиданку нашу первую вместо цветов принёс котелок плова в пакете, в полотенце завёрнутый. Типа, сам готовил, попробуй, вкусно!
Ну всё, подумала я, моё! Беру!
И взяла меня) А я её.
22 года в сентябре будет, как вместе. Теперь двое детей, внук и два кота)
Ответ BanPObespredelu в «Про вакансии»
Ооо!Как мне это знакомо!
Устроилась оператором на Почту России в 2012 году, тогда ещё был голый оклад плюс премия, если отделение на неё выйдет.Начальница отделения не особо стремилась к премии, предпенсионный возраст и хороший оклад, мотивации не добавлял, ну и всю основную работу она свалила потихоньку на меня.Себе же оставила, закрытие и открытие смены, на что уходило пол часа в день, а весь остальной её рабочий день проходил по принципу: чай сам себя не попьёт!
Ну а мне и пофиг, больше работы, быстрее смена проходит.
Но тут её вызвали на собрание… с собрания она вернулась слегка озадаченная и в резкой форме велела мне впредь, работать на компьютере под её паролем и её фамилией.
Но я тоже не пальцем делана, начала спорить, что не имею права заходить под чужим паролем и в случае моих ошибок спросят с неё.Так и не добившись внятного ответа, я позвонила в отдел кадров, девочке с которой периодически общались.
Она то мне и пояснила, что со следующего месяца мы переходим на сдельную оплату труда и заработок будет зависеть от рабочих операций произведённых за месяц.
Тут то всё стало ясно…
Естественно работала я как работала, под своим паролем и через месяц получила зарплату раза в три больше, чем у начальницы.А когда с пришли расчетные листы ( они приходили не лично каждому, а в общем письме сразу на всех)она мне заявила, что это расчетчица ошиблась и сказала отдать ей половину, она в контору сама отнесёт.Конечно же я позвонила расчетчице и нет, никто не ошибся, всё моё!
И было жутко обидно, что я то к человеку по- хорошему, а меня не единожды пытались использовать.