Tôi có thể chạy lệnh này từ dấu nhắc dòng lệnh của mình:
cp -r folder/!(exclude-me) ./
Để sao chép đệ quy tất cả nội dung folder ngoại trừ thư mục con có tên exclude-mevào thư mục hiện tại. Điều này hoạt động chính xác như dự định. Tuy nhiên, tôi cần cái này để làm việc trong một kịch bản bash tôi đã viết, nơi tôi có cái này:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Nhưng khi tôi chạy tập lệnh:
bash my-script.sh
Tôi nhận được điều này:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
Và tôi không biết tại sao nó hoạt động từ dấu nhắc lệnh, nhưng chính xác cùng một dòng không hoạt động trong tập lệnh bash.
env > file1trong kịch bản và thực hiện./it, và sau đóenv > file2vàsource it, với hy vọng rằng tôi đã tìm thấy một sự khác biệt trongenvs, mà không phải là trường hợp. Làm thế nào tôi có thể liệt kê tất cả sự khác biệt giữa hai shell (trong trường hợp này là tương tác so với không tương tác)?