سؤال

لنفترض أنني أريد فتح ملف في جلسة Emacs موجودة باستخدام su أو sudo, ، دون أن ينزل إلى الصدفة ويفعل sudoedit أو sudo emacs.إحدى الطرق للقيام بذلك هي

C-x C-f /sudo::/path/to/file

ولكن هذا يتطلب تكلفة باهظة ذهابًا وإيابًا عبر SSH.هل هناك طريقة أكثر مباشرة؟

[تحرير] @JBB على حق.أريد أن أكون قادرًا على الاستدعاء su/sudo للحفظ وكذلك مفتوحة.سيكون من المقبول (لكنه ليس مثاليًا) إعادة التفويض عند الحفظ.ما أبحث عنه هو الاختلافات find-file و save-buffer التي يمكن "تمريرها" عبرها su/sudo.

هل كانت مفيدة؟

المحلول

الشيء الجميل في Tramp هو أنك تدفع فقط مقابل رحلة الذهاب والإياب إلى SSH عند فتح الملف الأول.يقوم Sudo بعد ذلك بتخزين بيانات الاعتماد الخاصة بك مؤقتًا، ويقوم Emacs بحفظ المقبض، بحيث تستغرق الملفات المفتوحة بواسطة sudo وقتًا أقل بكثير.

لم أجد الوقت الإضافي الذي يستغرقه توفير الأعباء أيضًا.إنه سريع بما فيه الكفاية، المنظمة البحرية الدولية.

نصائح أخرى

يفعل الصعلوك لا ذهابًا وإيابًا Sudo عبر SSH، يستخدم ملف قذيفة فرعية.انظر الدليل: https://www.gnu.org/software/tramp/#Inline-methods

لذلك أنصحك بالاستمرار مع الترامب.

إذا كنت تستخدم helm, helm-find-files يدعم فتح ملف كجذر مع C-c r.

ليست في الواقع إجابة على السؤال الأصلي، ولكن إليك وظيفة مساعدة لجعل القيام بمسار المتشرد/سودو أسهل قليلاً:

(defun sudo-find-file (file-name)
  "Like find file, but opens the file as root."
  (interactive "FSudo Find File: ")
  (let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
    (find-file tramp-file-name)))

على الأقل من أجل الادخار، أ حزمة سودو-حفظ لقد كتب بالضبط لهذا النوع من المشاكل.

المثال الخاص بك لا يبدأ تشغيل ssh على الإطلاق، على الأقل ليس مع إصدار TRAMP الخاص بي ("2.1.13-pre").يعمل كل من البحث عن الملف والحفظ المؤقت بشكل رائع.

أنصحك باستخدام أوامر المشورة.ضع هذه الوظيفة في ~/.emacs الخاص بك

(defadvice ido-find-file (after find-file-sudo activate)
  "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

(يعمل محليا فقط.تحتاج إلى تحديث لتعمل بشكل صحيح عن طريق الصعلوك)

إجابة بيرتون الموسعة قليلاً:

(defun sudo-find-file (file-name)
"Like find file, but opens the file as root."
(interactive "FSudo Find File: ")
(let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
(find-file tramp-file-name)))


(add-hook 'dired-mode-hook
    (lambda ()
      ;; open current file as sudo 
      (local-set-key (kbd "C-x <M-S-return>") (lambda()
        (interactive)
        (message "!!! SUDO opening %s" (dired-file-name-at-point))
        (sudo-find-file (dired-file-name-at-point))
      ))
    )
)

قرف.ربما يمكنك فتح Shell في Emacs و exec sudo emacs.

المشكلة هي أنك من المفترض لا تريد فقط فتح الملف.تريد أن تكون قادرًا على حفظه لاحقًا.وبالتالي، فأنت بحاجة إلى استمرار وجود صلاحيات الجذر الخاصة بك، وليس فقط لفتح الملف.

يبدو أنك تريد أن يصبح Emacs مدير النوافذ لديك.انها منتفخة بما فيه الكفاية دون ذلك.:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top