2014-01-23 2 views
0

Я хотел бы запустить некоторые команды в своем сценарии оболочки, но хотел бы знать, что какой-то метод не возвращает ничего.Как подавить вывод команды?

пример:

#!/bin/bash] 
rm/home/user 

return: rm: can not lstat `/ home/user ': No such file or directory 

Я бы поставил команду, чтобы запустить незримо нет возврата!

+5

Что все эти пространства между ними с каждым слэш? – fedorqui

+0

что вы пытаетесь сделать? Для удаления папки используйте 'rm -rf/home/user', но удаление папки пользователя, вероятно, является плохим. Чтобы удалить файл, выполните команду 'rm/home/use/file.txt' Обратите внимание на отсутствие пробелов. Чтобы поместить команду rm в скрипт, shebang должен быть '#!/Bin/bash', опять же, обратите внимание на отсутствие пробелов. –

+2

Сообщение об ошибке не соответствует отображаемому вами коду. Пожалуйста, не перепечатывайте, используйте вырезать и вставлять. –

ответ

1

Ваша прямая ошибка исходит из неправильного интервала в пути, должна быть rm /home/whatever без пробелов в пути, если у вас нет фактических пробелов в именах dir (в этом случае вам нужно будет указать или убежать должным образом)

О подавлении выхода. Перенаправление stdout здесь немного странно.

$ touch test.txt 
$ rm test.txt > /dev/null 2>&1 

^ interactive rm is actually asking if you really want to delete the file here, but not printing the message 

Если вы просто хотите, чтобы не получать сообщения об ошибках, просто перенаправить поток ошибок (дескриптор файла 2) в/DEV/нуль

$ rm test.txt 2> /dev/null 

или

$ rm test.txt 2>&- 

Если вы хотите, чтобы не запрашивать do you really want to delete сообщения типа, используйте знак силы -f

$ rm -f test.txt 2> /dev/null 

или

$ rm -f test.txt 2>&- 

Для удаления каталога вы либо хотите rmdir, если он пустой или использовать рекурсивную -r флаг, однако, это вытрет все,/дома/пользователя, так что вам действительно нужно быть осторожным ,

Если вы не работаете в режиме --verbose, я не могу придумать ни одного случая, когда ему нужно закрыть stdout для команды rm.

Кроме того, как Баш 4, если вы хотите, чтобы перенаправить как стандартный вывод и стандартный поток ошибок в том же месте, просто использовать rm whatever &> /dev/null или что-то подобное

+0

Проблема решена, спасибо вам очень функционально и объяснили. –

+0

@FilipiSilva Нет проблем, рад, что я мог бы помочь. – BroSlow

4

Чтобы подавить стандартный вывод команды, обычным способом является передача вывода на нулевое устройство с помощью somecommand arg1 arg2 > /dev/null. Для подавления выхода ошибки стандартная ошибка может быть перенаправлена ​​на одно и то же место: somecommand arg1 arg1 > /dev/null 2>&1.

+0

Также работает более короткая альтернатива '>/dev/null 2> & 1':'> &/dev/null' ('&>/dev/null'). Также обратите внимание, что вы можете настойчиво перенаправить потоки с помощью 'exec', чтобы последующие команды не нуждались в явном перенаправлении - см. Раздел« Использование exec »по адресу http://www.faqs.org/docs/abs/HTML/io-redirection.html. – mklement0

Смежные вопросы