Скройте ouput удара в то время как запускающий автоматизированный скрипт.

Почему не изменяют Вашу работу немного:

echo -e 'asdfZE3033141xycf\nasdfINSFRHxycf' | sed -e 's/^\(asdfZE[0-9]\{7\}\)xycf$/\1\n/'
5
01.11.2014, 01:29
3 ответа

Удаление - это операция записи, поэтому вам необходимо удалить доступ для записи из каталога, который содержит файл (используя файл ~ / foo / bar.txt в качестве примера):

chmod a-w ~/foo/

или

chmod 666 ~/foo/

Это, однако, все еще разрешает root, чтобы удалить файл. Если даже не хочу, чтобы все стало более сложным. Насколько я знаю , лучший способ (и это легко обходятся на обращении команды) - это установить его на «неизменяемое»:

sudo chattr +i ~/foo/bar.txt

, которые остановят root от удаления файла, но они всегда могут Просто запустите Chattr -i ~ / foo / bar.txt еще раз, чтобы отменить его, чтобы он больше похож на препятствие, чем полный блок. Это, однако, прекращает пользователей без root от удаления его, и они не будут иметь право запустить Chattr -i на нем, так что это самый простой способ, поскольку оно не влияет на все файлы в каталоге Отказ

-121--120270-

Перенаправляйте весь вывод как блок.

(
   yum -y update

   service restart nginx

   yum install atop

   cat /var/log/somelog.log > /home/cron/php/script

) > /dev/null 2>&1
9
27.01.2020, 20:31

Вы можете сохранить файловые дескрипторы STDOUT и STDERR, перезаписать их и восстановить их после того, как программы будут запущены:

exec 3>&1
exec 4>&2
exec 1>/dev/null
exec 2>/dev/null
./script-1
./script-2
...
./script-n
exec 1>&3
exec 2>&4
# delete the copies
exec 3>&-
exec 4>&-
8
27.01.2020, 20:31

Если вы хотите скрыть все вывода из команд, которые вы работаете (как вывода, так и ошибки), но все же сможете печатать сообщения самостоятельно, то подход Hauke ​​Highting - это абсолютно правильный путь к сделай это.

Это позволяет поддерживать ссылку на STDOUT (файловый дескриптор AKA 1) и STDERR (файловый дескриптор 2), перенаправляйте их на / dev / null, но все же используйте их, если вы хотите, чтобы сообщение было отображено. Я просто хотел бы добавить кучу комментирования, которые именно объясняют, что он делает.

exec 3>&1 # Open file descriptor 3, writing to wherever stdout currently writes
exec 4>&2 # Open file descriptor 4, writing to wherever stderr currently writes

exec 1>/dev/null # Redirect stdout to /dev/null, leaving fd 3 alone
exec 2>/dev/null # Redirect stderr to /dev/null, leaving fd 4 alone

# Programs won't show output by default; they write to fd 1 which is now /dev/null.
# This is because programs inherit file descriptors from the shell by default.
echo foo

# You can choose to show messages by having them write to fd 3 (old stdout) instead.
# This works by saying that echo's fd 1 (stdout) is the shell's fd 3.
echo bar >&3

# And when you're done you can reset things to how they were to start with
exec 1>&3 # Point stdout to where fd 3 currently points (the original stdout)
exec 2>&4 # Point stderr to where fd 4 currently points (the original stderr)

exec 3>&- # Close fd 3 (it now points to the same spot as fd 1, so we don't need it)
exec 4>&- # Close fd 4 (it now points to the same spot as fd 1, so we don't need it)

Если вы собираетесь использовать это в скрипте любого размера, и вы часто хотите печатать обновления статуса о том, как дела идут, вы, вероятно, захотите создать функции помощника, которые делают Echo » $ @ "> & 3 и echo" $ @ "> & 4 для печати сообщений на оригинальный Stdout и STDERR, поэтому вам не нужно перец ссылки на и 3 и и 4 по всему вашему скрипту.

и Это урок перенаправления перенаправления Bash-hackers.org - это довольно хорошее изображение визуального изображения того, насколько умеренно сложных перенаправлений, как они на самом деле работают.

2
27.01.2020, 20:31

Теги

Похожие вопросы