Использование перенаправления в сценарии оболочки linux, который запускается как sudo - PullRequest
3 голосов
/ 31 октября 2011

У меня есть сценарий оболочки Unix, который использует перенаправление stdout и stderr в файл журнала. Например test.sh:

ls -l &>> test.log

Моя проблема в том, что когда я запускаю скрипт с sudo:

sudo ./test.sh

& интерпретируется как "запуск в фоновом режиме".

Есть предложения?

Ответы [ 5 ]

4 голосов
/ 31 октября 2011

Полагаю, у вашего сценария test.sh нет шебанга в первой строке, например:

#!/bin/bash

Без этой строки несколько настроек среды влияют на то, как выполняется ваш скрипт. В вашем случае это означает, что другая оболочка, такая как ash, ksh, dash или любая другая, будет использоваться для выполнения скрипта из-за настроек пользователя root.

3 голосов
/ 31 октября 2011

Какая у вас строка хеш-взрыва в test.sh? Убедитесь, что вы указали оболочку, которая поддерживает этот синтаксис. На самом деле я не уверен, что это за оболочка - ни sh, ни bash, ни ksh, ни csh не имеют оператора перенаправления &>>, но что бы это ни было, вам нужно явно указать его:

#!/bin/fancysh

Либо используйте более переносимый синтаксис.

#!/bin/sh
ls -l >> test.log 2>&1
1 голос
/ 31 октября 2011

Вы пробовали бегать так:

ls -l >> test.log 2>&1 
0 голосов
/ 31 октября 2011

Проблема заключалась в том, что в сценарии не было строки Шебанга

#!/bin/bash

Я должен был это заметить ...

0 голосов
/ 31 октября 2011

Пожалуйста, измените порядок перенаправления на

    ls -l >>& test.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...