Очередная программерская загогулина, на этот раз решение сразу не дам :)
Допустим, надо выполнить какую-либо команду на нескольких хостах, перечисленных в файле. Пишу:
cat file | (
while read host; do
ssh user@$host "command"
done
)
Ошибка, однако! В чем?
Кто сможет разобраться в уме, не запуская код, тому респект и уважуха :)
UPD:
Решил человек, скрывающийся под ником gds:
поток из “cat file” будет выкушан только первой запущенной командой “ssh …”?
gds, респект тебе уважуха :)
Я вернулся :)
За время учебного отпуска нагулял отличное рабочее настроение!
В первый рабочий день обратил внимание на небольшой юбилей: 1 год и 4 дня исполнилось моему процессу screen, запущенному на работе, которым я активно пользуюсь по 40 часов в неделю. Слава героям!!
Попутно веду свою маленькую коллекцию программерских загогулин, вот очередной экземпляр:
#!/usr/bin/perl
$var1 = "one|two|three";
$var2 = join('|', split ('|', $var1));
Опрос знакомых программистов показал, что предполагаемым значением $var2 является исходная строка ($var1). PERL думает иначе.
Вся мощь перла с его реально перегруженными функциями именно в этом моменте дала слабину: split в качестве первого аргумента принимает _только_ регулярное выражение, и, соответственно, символ ‘|’ воспринимается как логическое “или”.. Таким образом, в var2 будет “o|n|e||t|w|o”…
Пусть такое поведение и является документированным, меня оно все равно расстраивает..