thời gian gần đây tôi phát hiện ra một số bash
mã mà sử dụng ít được biết đến (tốt, ít được biết đến tôi anyway) tính năng của chức năng chuyển hướng, chẳng hạn như đơn giản hóa đáng kể:Làm thế nào bạn có thể ghi đè chuyển hướng hàm trong bash?
function xyzzy() {
echo hello
} >/dev/null
Khi bạn gọi hàm với một đơn giản xyzzy
, nó sẽ tự động áp dụng các chuyển hướng gắn liền với chức năng bất kể những gì bạn đã làm khi gọi nó.
Điều tôi muốn biết là có cách nào để ghi đè hành vi này trong cuộc gọi đến chính hàm đó, để xem thông báo được tạo. Tôi cố gắng thay đổi tập tin chứa tất cả các chức năng vì (1) nó lớn, (2) nó thay đổi thường xuyên, và (3) nó được bảo vệ rất nhiều bởi nhóm hỗ trợ nó.
Tôi đã thử:
xyzzy >&1
để cố gắng ghi đè lên nó nhưng sản lượng vẫn không hiển thị (có thể vì >&1
có thể được coi là một không-op).
Nói cách khác, đưa ra kịch bản:
function xyzzy() {
echo hello
} >/tmp/junk
rm -f /tmp/junk
echo ================
echo Standard output
echo ----------------
xyzzy # something else here
echo ================
echo Function capture
echo ----------------
cat /tmp/junk
echo ================
nó hiện kết quả đầu ra:
================
Standard output
----------------
================
Function capture
----------------
hello
================
tôi có thể thay đổi gì cuộc gọi xyzzy
tới, để có được hello
in trong phần đầu ra tiêu chuẩn hơn là phần chụp chức năng?
Và điều này cần phải được mà không cố gắng để đọc các tập tin /tmp/junk
sau khi nó được tạo ra kể từ khi thực tế chuyển hướng có thể là /dev/null
vì vậy họ sẽ không được trong một tập tin.
Nhận xét không hữu ích: Tôi đã thử 'xyzzy 1>/tmp/aaa' và tệp được chạm vào nhưng không được lấp đầy dữ liệu. Nó có hành vi tương tự như 'xyzzy 2>/tmp/aaa'. – fedorqui
có thể đáng để hỏi điều này trên http://unix.stackexchange.com. – dogbane
@dogbane, tôi đã bị rách vì điều đó có vẻ như cả lập trình _and_ Unix. Tôi không muốn tiền đồn nhưng, nếu tôi không thể nhận được câu trả lời ở đây, tôi cho rằng tôi có thể thử nó ở đó sau này. – paxdiablo