Tôi (thực sự) mới làm quen với lập trình chức năng (thực tế chỉ tiếp xúc với nó bằng python) nhưng dường như là một cách tiếp cận tốt cho một số tác vụ chuyên sâu trong danh sách trong môi trường shell.
Tôi thích làm điều gì đó như thế này:
$ [ git clone $host/$repo for repo in repo1 repo2 repo3 ]
Có shell Unix nào với các loại tính năng này không? Hoặc có thể một số tính năng để cho phép truy cập shell dễ dàng (lệnh, env / vars, readline, v.v.) từ bên trong python (ý tưởng là sử dụng trình thông dịch tương tác của python để thay thế cho bash).
BIÊN TẬP:
Có lẽ một ví dụ so sánh sẽ làm rõ. Giả sử tôi có một danh sách gồm dir / file :
$ FILES=( build/project.rpm build/project.src.rpm )
Và tôi muốn thực hiện một nhiệm vụ thực sự đơn giản: sao chép tất cả các tệp vào dist / AND cài đặt nó trong hệ thống (đó là một phần của quá trình xây dựng):
Sử dụng bash:
$ cp $ {tập tin [*]} dist / $ cd dist && rpm -Uvh $ (với f trong $ {files [*]}; làm tên cơ sở $ f; xong))
Sử dụng phương pháp "vỏ pythonic" (lưu ý: đây là mã tưởng tượng):
$ cp [os.path.join ('dist', os.path.basename (tệp)) cho tệp trong PHIM] 'dist'
Bạn có thể thấy sự khác biệt ? Đó là những gì tôi đang nói về. Làm thế nào không thể thoát khỏi vỏ với các loại công cụ tích hợp này? Thật là một nỗi đau thực sự khi xử lý các danh sách trong shell, thậm chí nó là một nhiệm vụ rất phổ biến: danh sách các tệp, danh sách các PID, danh sách mọi thứ.
Và một điểm thực sự, thực sự, quan trọng: sử dụng cú pháp / công cụ / tính năng mà mọi người đều biết: sh và python.
IPython đường may là một hướng tốt, nhưng nó phình to: nếu tên var bắt đầu bằng '$', thì nó thực hiện điều này, nếu '$$' thì nó sẽ làm điều đó. Cú pháp của nó không phải là "tự nhiên", rất nhiều quy tắc và "cách giải quyết" ( [ ln.upper() for ln in !ls ]
-> lỗi cú pháp)