Quando lavoro sulla riga di comando, cambio spesso a sudo usando sudo -i. Tuttavia, la mia directory di lavoro cambia automaticamente in /root. Non voglio mai andarci; Voglio rimanere dove ero! Come posso raggiungere questo obiettivo?
Quando lavoro sulla riga di comando, cambio spesso a sudo usando sudo -i. Tuttavia, la mia directory di lavoro cambia automaticamente in /root. Non voglio mai andarci; Voglio rimanere dove ero! Come posso raggiungere questo obiettivo?
Risposte:
È possibile utilizzare sudo -sinvece, non cambierebbe la directory corrente in /root, anche se alcune delle variabili di ambiente non sarebbero quelle di root.
Questa pagina dai forum di Ubuntu ha un bel riassunto:
Summary of the differences found
corrupted by user's
HOME=/root uses root's PATH env vars
sudo -i Y Y[2] N
sudo -s N Y[2] Y
sudo bash N Y[2] Y
sudo su Y N[1] Y
Questa pagina dalla documentazione di Ubuntu contiene molte più informazioni di base su sudo .
sudo -iufunziona per me ubuntuforums.org/…
sudo -iè ancora corrotto da env vars dell'utente. L'unico modo per evitarlo è usare su -l.
Se vuoi usare su, c'è un modo per rimanere nella stessa directory.
su - user -c "cd` pwd`; bash "
Cosa sta succedendo qui:
su - user = accedi come user-c che significa "esegui un comando nella shell del nuovo utente"-c "cd `pwd`"il comando che diamo è di passare alla directory corrente ( `pwd`) - ma poiché usiamo i backtick tra virgolette doppie, il pwdcomando viene valutato prima di eseguire il sucomando, in modo da passare alla directory in cui ci troviamo ADESSO come vecchio utente.
-c 'cd `pwd`'eseguirà il pwdcomando nella nuova shell, quindi valuterebbe ciò cd /root, che, ovviamente, non compirà nulla.L'unico problema qui è che la nuova shell esce subito dopo aver eseguito il comando, quindi aggiungiamo:
-c "cd `pwd`; bash"che significa "esegui bash(nuova shell) dopo aver eseguito il cdcomando. La shell bash non si chiude fino a quando non ci disconnettiamo da esso.Si noti che è possibile sostituire `pwd`con $(pwd). Funzionalmente sono uguali, ma l'abbondanza di personaggi simili a virgolette può diventare difficile da leggere.
Ho riscontrato lo stesso problema e non mi è permesso eseguire altro che sudo su - devusersul server di sviluppo, quindi questo è quello che mi è venuto in mente:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
cd $prev_user_home
fi
#!/bin/bash
#brings you back home after sudo su
function get_owner {
pid=$1
echo $(ps ouid -p $pid h | tr -d ' ')
}
pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
pid=$(ps -o ppid= $pid)
uid=$(get_owner $pid)
i=$((i+1))
done
user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
echo $user_home
fi
Va su un albero dei processi e controlla se l'utente proprietario del processo è cambiato.