Sau đây, mã shell rất phi mạnh mẽ sẽ cung cấp cho các mount point của $path
:Cho mount point của một con đường
(for i in $(df|cut -c 63-99); do case $path in $i*) echo $i;; esac; done) | tail -n 1
Có cách nào tốt hơn để làm điều này trong vỏ?
Postscript
Kịch bản này thực sự là khủng khiếp, nhưng có chất lượng cứu chuộc mà nó hoạt động trên hệ thống của tôi. Lưu ý rằng một số điểm gắn kết có thể là tiền tố của $path
.
Ví dụ Trên một hệ thống Linux:
[email protected]:~$ path=/sys/block/hda1 [email protected]:~$ for i in $(df -a|cut -c 57-99); do case $path in $i*) echo $i;; esac; done| tail -1 /sys
Trên một hệ thống Mac OSX
cas local$ path=/dev/fd/0 cas local$ for i in $(df -a|cut -c 63-99); do case $path in $i*) echo $i;; esac; done| tail -1 /dev
Lưu ý cần thay đổi các thông số cắt, bởi vì sản lượng đường df của khác; sử dụng awk giải quyết điều này, nhưng ngay cả awk là không di động, được đưa ra loạt các định dạng kết quả thực hiện khác nhau của sự trở lại df.
trả lời Dường như munging đầu ra bảng là cách duy nhất bên trong vỏ, nhưng
df -P "$path" | tail -1 | awk '{ print $NF}'
dựa trên câu trả lời của ghostdog74, là một cải tiến lớn về những gì tôi đã có. Lưu ý hai vấn đề mới: trước tiên, df $path
khẳng định rằng $path
đặt tên tệp hiện có, tập lệnh tôi đã nêu ở trên không quan tâm; thứ hai, không có lo lắng về các liên kết dereferencing. Điều này không có tác dụng nếu bạn có các điểm gắn kết với khoảng trống trong chúng, điều này xảy ra nếu có một phương tiện có thể tháo rời với các dấu cách trong các tên khối lượng của chúng.
Không khó để viết mã Python để thực hiện công việc đúng cách.
Cf. http://serverfault.com/questions/66492/in-nix-how-to-determine-which-filesystem-a-particular-file-is-on –
Xem câu trả lời của tôi cho phiên bản của "df" $ path " 'lệnh hoạt động khi thiết bị hoặc điểm gắn kết có dấu cách trong đó. – crashmaxed