Link simbolico e sudo


10

Creo un collegamento simbolico:

ln -s /tmp/folder1 /tmp/folder2

Quindi vado in / tmp / cartella2 ed eseguo pwd:

$ cd /tmp/folder2/
$ pwd
/tmp/folder2
$ sudo pwd
/tmp/folder1 # <-- This is the odd part

Perché pwdcon sudola directory originale? Sto scrivendo uno script bash e ho bisogno del percorso assoluto della directory corrente. Con sudo non riesco a ottenere la directory originale.


Il tuo obiettivo è far sì che pwd restituisca il percorso fisico (/ tmp / cartella1) o il percorso logico (/ tmp / cartella2) per entrambi?
user9517

L'obiettivo è di restituire il percorso logico quando si usa sudo
iDev247

Risposte:


14

Il comando pwd è sia shell incorporato che / bin / pwd. In circostanze normali, l'integrato verrà eseguito preferibilmente su / bin / pwd. Il comando pwd può essere chiamato come pwd -Lo pwd -PSia predefinito che / bin / pwd predefinito pwd -Ldalla pagina man

-L, --logico usa PWD dall'ambiente, anche se contiene collegamenti simbolici

quindi quando esegui pwd esegui effettivamente pwd -L che in effetti stampa $ PWD (se esiste). Durante l'esecuzione sudo pwd, sudo fornisce solo le variabili di ambiente che sono state comunicate tramite env_keepdirettive. PWD non è normalmente in questo elenco, quindi sudo pwd deve capire dove si trova ed effettivamente funziona comepwd -P

-P, --physical evita tutti i collegamenti simbolici

Il modo per risolvere il problema è utilizzare pwd -Pse si desidera costantemente il percorso della directory fisica o (come dice @Felix) per aggiungere PWD all'elenco delle variabili di ambiente da conservare tramite una direttiva env_keep in sudoers

env_keep += "PWD"  

Lavori! Dopo aver aggiunto PWD a env_keep, devo fare sudo pwd -Lper ottenere il percorso logico. sudo pwdrestituisce il percorso fisico.
iDev247,

6

In bash, pwdè incorporato. /bin/pwdproduce lo stesso comportamento di sudo pwd.

Lo vorrai

  1. uso sudo pwd -L, che funziona solo se tu
  2. includi Defaults env_keep=PWDnel tuo sudoersfile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.