Всех рад видеть, привет! Сразу к делу. В оболочке Bash есть такая настройка, как «set -k», если по ней вызвать хелп, то получим следующее:
То есть, при активации этой настройки, всё, что будет похоже на присваивание переменным значений, поместится в среду команд. И совершенно не важно, где в строке находится это присваивание.
Короче говоря, если в команде используется синтаксис присваивания (HUY=512), то эта команда не получит этих присвоенных опций в качестве аргументов. Чтобы стало понятнее, давай на практике.
set -k
dd if=/dev/zero of=/dev/null count=1 bs=2048
По идее, команда dd должна прочитать блок размером 2048 байта из устройства** /dev/zero** и записать эти байты в устройство /dev/null. А после выполнения — завершить работу.
На экране должны получить нечто подобное:
1+0 records in
1+0 records out
2048 bytes (1.0 kB, 1.0 KiB) copied, 9.4642e-05 s, 10.8 MB/s
Но так как мы выполнили «set -k», все будет иначе. Утилита dd не получит указанных опций в качестве аргументов и будет пытаться читать и писать блоками по 512 байт (512 по умолчанию). После выполнения команды, мы получаем — Хуй с маслом! Ничего! Хотя ожидали получить — завершение работы.
Выполнив «set -k» утилита dd просто заблокировалась на чтении стандартного потока ввода и ожидает данные. Вот такие перлы!
Обожаю угорать над студентами, сначала втихую активируем «set -k» и просим решить простую задачку со звездочкой. Но задачка почему-то не решается. А дальше начинается гугл, strace и бессонные ночи.
Если нарвался на подобное поведение, как вариант, проверь этот самый «set -k». Деактивировать эту фигню, так: «set +k».
Давай, увидимся вечером, хорошего тебе дня!








Комментарии