Có một liên kết tượng trưng tiêu chuẩn đến thư mục nhà của người dùng hiện tại không?


9

Shell có thể mở rộng ~đến thư mục nhà của bạn. $HOMEthường có cùng một thỏa thuận, nhưng thường bạn muốn tham khảo thư mục chính của người dùng hiện tại từ một bối cảnh có thể không hỗ trợ mở rộng như vậy.

Tôi đã có tập tin cấu hình nơi $HOMEhoạt động nhưng ~không và ngược lại.

Tôi đoán rằng cầu chì có thể cung cấp một cái gì đó dọc theo những dòng này, đại loại như /var/myself->$HOME

Với điều đó tôi có thể đặt các giá trị trong các tệp cấu hình để trỏ đến những thứ như /var/myself/backdrops/pornography/wtf/yarly.jpg

Có một cái gì đó như thế này đã? Nếu không, có lý do tốt cho việc không có cái gì đó như thế này?


2
Đây thực sự có vẻ là một ý tưởng thực sự tốt và cầu chì có thể thực hiện điều này khá tầm thường nếu tôi nhớ chính xác giao diện
Michael Mrozek

Câu trả lời:


6

Tôi hiểu mối quan tâm của bạn nhưng câu trả lời là "không" không có điều đó.
Phương pháp thông thường là hỏi hệ điều hành đường dẫn nhà của người dùng hoặc lấy biến $ HOME.

Tất cả các tùy chọn này luôn cần một số mã hóa từ ứng dụng. Rất nhiều ứng dụng, như bash, cung cấp "bí danh" ~ (mở (2) không dịch điều đó).

Tất nhiên một vfs hoặc một mô-đun cầu chì có thể được thực hiện để làm điều này. Có lẽ có một cái gì đó để làm điều đó, tôi sẽ yêu cầu điều đó!

Nhưng nó có thực sự cần thiết? Bạn có thể sử dụng một cách giải quyết như:


Tôi yêu cầu công cụ vfs: unix.stackexchange.com/questions/1811/NH
Keymon

0

Một mẹo (trên Linux, ít nhất) sẽ là thay đổi thư mục thành $HOMEtrước khi chạy ứng dụng và sau đó sử dụng /proc/self/cwd/...trong tệp cấu hình.


Tôi thích sự hackish của điều này nhưng có lẽ nó sẽ gặp vấn đề với nó, quá trình thay đổi thư mục hiện tại. Tôi muốn một / Proc / PID / iwd cho thư mục làm việc ban đầu.
Lerc

... và cho vấn đề đó a / Proc / PID / home
Lerc

@Lerc, nếu nó đang diễn ra trong một tập tin cấu hình nó cần phải được /proc/selfkhông /proc/PID, vì bạn không thể biết trước những gì PID sẽ là.
Neil Mayhew

@Lerc, vâng, nếu quá trình thay đổi thư mục thì nó sẽ thất bại, nhưng thông thường các chương trình đọc tệp cấu hình một lần khi chúng khởi động, và sau đó lưu trữ các giá trị trong bộ nhớ. Tất cả phụ thuộc vào chương trình bạn đang làm việc và nếu chương trình không cung cấp đủ tính linh hoạt, trên dòng lệnh hoặc cú pháp tệp cấu hình, thì bạn sẽ bị kẹt.
Neil Mayhew

Vâng, ý tôi là / Proc / PID / home có nghĩa là tất cả các thư mục Proc / PID nên hỗ trợ điều này và do đó bao gồm / Proc / self
Lerc

0

Hầu hết các chương trình cho phép bạn chỉ định một đường dẫn đến tệp cấu hình trên dòng lệnh. Vì vậy, bạn có thể viết một trình bao bọc lấy tệp cấu hình tiêu chuẩn, lọc nó để thay thế những thứ như $HOMEcho người dùng hiện tại và sau đó chuyển tệp cấu hình tạm thời đã sửa đổi cho chương trình.


Nếu bạn làm điều đó thì bạn đã thực sự có khả năng chỉ định một đường dẫn đến tệp cấu hình khỏi người dùng. Có thể thực hiện được nếu bạn có được cuộc biểu tình ưa thích với exe bao bọc.
Lerc

0

Bạn có thể lấy thông tin của người dùng requestin và hỏi hệ thống thư mục chính của anh ấy / cô ấy. Vì vậy, nó là có thể.

Tuy nhiên tôi không chắc chắn nếu không có chương trình SUID nào sẽ coi FS là tĩnh.

Biên tập:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

Các mã trên không lý tưởng nhưng nên làm việc cho các trường hợp phổ biến.


Làm thế nào bạn sẽ tìm thấy thư mục nhà của anh ấy sau khi bạn biết nó là người dùng gì?
WhyNotHugo

Sử dụng getpwuidhoặc getpwuid_r.
Maciej Piechotka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.