Tôi có một tập lệnh bash xây dựng một dòng lệnh trong một chuỗi dựa trên một số tham số trước khi thực hiện nó trong một lần. Các phần được nối với chuỗi lệnh được cho là được phân tách bằng các đường ống để tạo điều kiện "truyền phát" dữ liệu qua từng thành phần.
Một ví dụ rất đơn giản:
#!/bin/bash
part1=gzip -c
part2=some_other_command
cmd="cat infile"
if [ ! "$part1" = "" ]
then
cmd+=" | $part1"
fi
if [ ! "$part2" = "" ]
then
cmd+=" | $part2"
fi
cmd+="> outfile"
#show command. It looks ok
echo $cmd
#run the command. fails with pipes
$cmd
Vì một số lý do, các đường ống dường như không hoạt động. Khi tôi chạy tập lệnh này, tôi nhận được các thông báo lỗi khác nhau liên quan đến phần đầu tiên của lệnh (trước ống đầu tiên).
Vì vậy, câu hỏi của tôi là liệu có thể xây dựng một lệnh theo cách này hay không, và cách tốt nhất để làm điều đó là gì?
infile
tồn tại trong thư mục hiện tại?