Tôi đang làm việc trên một kịch bản và tôi cần xây dựng tar
lệnh một cách linh hoạt.
Đây là hai ví dụ để minh họa những gì tôi đang cố gắng làm:
#!/bin/bash
TAR_ME="/tmp"
EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*")
_tar="tar "`printf -- '--exclude="%s" ' "${EXCLUDE[@]}"`" -zcf tmp.tar.gz"
echo COMMAND: "${_tar}"
${_tar} "$TAR_ME"
echo -e "\n\nNEXT:\n\n"
EXCLUDE=("--exclude=/tmp/hello\ hello" "--exclude=/tmp/systemd*" "--exclude=/tmp/Temp*")
_tar="tar "`printf -- '%s ' "${EXCLUDE[@]}"`" -zcf test.tar.gz"
echo COMMAND: "${_tar}"
${_tar} "$TAR_ME"
Tôi muốn có thể sử dụng _tar
như một lệnh, tôi đã có thể làm cho nó hoạt động với đường dẫn cổ điển, nhưng tôi cần nó để làm việc với các khoảng trắng trong tên thư mục. Và mỗi lần tôi gặp lỗi giống như:
COMMAND: tar --exclude="/tmp/hello hello" --exclude="/tmp/systemd*" --exclude="/tmp/Temp*" -zcf tmp.tar.gz /tmp
tar: hello": Cannot stat: No such file or directory
COMMAND: tar --exclude=/tmp/hello\ hello --exclude=/tmp/systemd* --exclude=/tmp/Temp* -zcf test.tar.gz
tar: hello: Cannot stat: No such file or directory
Chỉ cần một điều bạn cần biết, tôi cần kịch bản của mình để hoạt động trên các máy rất cũ, nghĩa là tôi không thể sử dụng các tính năng bash cuối cùng.
eval
trước khi thực hiện?