GNU parallel вызывает команду, указанную вами через оболочку. Иногда это удобно, но часто неудобно, как вы заметили, из-за проблем с цитированием и зависимости от переменной окружения SHELL
. (Оле и я уже говорили об этом.)
Вы должны сказать parallel, что то, что вы передаете, является исполняемым файлом с аргументами, а не поведением по умолчанию, которое предполагает, что аргументы команда, выполняемая программой, названной переменной среды SHELL
, произвольно разделенной на части, которые соединяются вместе с пробелом между ними. Такой возможности нет; самое близкое, это сказать, что parallel заключает команду в кавычки, чтобы оболочка в конечном итоге выполнила правильную команду.
parallel -a oldfile.txt -k --block $BYTES --pipe-part -q sed 's/\s.*$// ; s/\(.*\)/\L\1/' > newfile.txt
Команда не работает, потому что sudo применяется к команде, однако перенаправление выполняется с текущим пользователем, и поэтому он не дает разрешений. Таким образом, echo запускается от имени пользователя root, однако >> / etc / crontab
выполняется с разрешениями пользователя вне sudo.
Это будет работать:
sudo /bin/bash -c '( echo " * * * * * root php /var/www/html/php/run.php cron" >> /etc/crontab )'
Вы можете использовать:
echo " * * * * * root php /var/www/html/php/run.php cron" | sudo tee -a /etc/crontab