2014-09-14 12 views
10

Tôi có một kịch bản lệnh shell với rất nhiều echo trong đó. Tôi muốn chuyển hướng đầu ra đến một logfile. Tôi biết có cuộc gọi lệnh cmd > logfile.txt, hoặc để làm điều đó trong file echo 'xy' > logfile.txt, nhưng là nó có thể chỉ cần đặt tên file trong kịch bản mà sau đó tự động viết bài của echo để tập tin này?Đầu ra echo chuyển hướng trong kịch bản lệnh shell để logfile

+1

làm bạn muốn chuyển hướng * chỉ * 'echo's? có các lệnh khác tạo ra đầu ra không? –

+0

Không đầu ra khác ngoài tiếng vang của – wasp256

Trả lời

14

Bạn có thể thêm dòng này vào đầu script của bạn:

#!/bin/bash 
# redirect stdout/stderr to a file 
exec &> logfile.txt 

HOẶC khác để chuyển hướng chỉ stdout sử dụng:

exec > logfile.txt 
+0

Tôi muốn viết đăng trong tập tin và cũng muốn nó xuất hiện trên console. Bạn có thể vui lòng hướng dẫn những gì tôi nên sử dụng cho nó. –

+0

@ s.singh: Bạn có thể sử dụng lệnh '| tee file.log' cho rằng – anubhava

+0

@ wasp256: Điều này có phù hợp với bạn không? – anubhava

5

Bạn có thể dễ dàng chuyển hướng các phần khác nhau của shell script của bạn vào một tập tin (hoặc một vài tệp) sử dụng các hệ vỏ con:

{ 
    command1 
    command2 
    command3 
    command4 
} > file1 
{ 
    command5 
    command6 
    command7 
    command8 
} > file2 
8

Tôi đã cố gắng quản lý bằng lệnh dưới đây. Điều này sẽ ghi đầu ra trong tệp nhật ký cũng như in trên bảng điều khiển.

#!/bin/bash 

# Log Location on Server. 
LOG_LOCATION=/home/user/scripts/logs 
exec > >(tee -i $LOG_LOCATION/MylogFile.log) 
exec 2>&1 

echo "Log Location should be: [ $LOG_LOCATION ]" 
0
LOG_LOCATION="/path/to/logs"  
exec >> $LOG_LOCATION/mylogfile.log 2>&1 
Các vấn đề liên quan