Ты не делаешь ничего плохого: это то, чего мы должны ожидать.
Первый cat <&0
потребляет все содержимое стандартного входа, потому что именно это и делает cat
: он считывает все свои входные данные до конца.
Когда запускается второй cat <&0
, на стандартном входе ничего не остаётся: конец файла уже был достигнут раньше.
Если в скрипте оболочки вам нужно сделать 2 или более проходов через стандартный вход, вы должны сбросить его в временный файл, а затем обрабатывать временный файл столько раз, сколько вам нужно.
Безопасное создание временных файлов в /tmp
и обеспечение их правильной утилизации, когда ваш скрипт завершается или умирает, является для вас упражнением :-)
Кстати, <&0
является ненужным и ничего не делает. Его функция заключается в том, чтобы направить стандартный ввод на файловый дескриптор 0... который является стандартным вводом... который по определению является тем, где стандартный ввод уже указывает! Вместо этого можно просто выполнить эту команду cat
.
Оба ГККУ
и Gksudo
проходят ваш пароль на sudo
. Попробуйте запустить их в терминале с вариантом - Debug
:
gksu --debug gedit
Вы заметите, что они запускают Sudo
с опцией -H
(а также Как -U
и -P
-P для имени пользователя / пароля и -S
, чтобы избежать терминала).
Следовательно, вам действительно нужно использовать Sudo -H
вместо ГККСУ
или ГКККУДО
.