Під час роботи над командним рядком я часто переходжу на використання sudo sudo -i. Однак мій робочий каталог автоматично змінюється на /root. Я ніколи не хочу туди їхати; Я хочу залишитися там, де був! Як я можу цього досягти?
Під час роботи над командним рядком я часто переходжу на використання sudo sudo -i. Однак мій робочий каталог автоматично змінюється на /root. Я ніколи не хочу туди їхати; Я хочу залишитися там, де був! Як я можу цього досягти?
Відповіді:
Ви можете скористатися sudo -sнатомість, це не змінить поточний каталог на /root, хоча деякі з змінних вашого середовища не будуть такими, що мають кореневий характер.
На цій сторінці з форумів Ubuntu є хороший підсумок:
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
На цій сторінці з документації Ubuntu є набагато більше довідкової інформації про sudo .
sudo -iuпрацює для мене ubuntuforums.org/…
sudo -iвсе ще пошкоджується env vars користувача. Єдиний спосіб уникнути цього - використовувати su -l.
Якщо ви хочете скористатися su, є спосіб залишитися в одному каталозі.
su - user -c "cd` pwd`; bash "
Що тут відбувається:
su - user = вхід як user-c що означає "запустити команду в оболонці нового користувача"-c "cd `pwd`"команда, яку ми даємо, - це переключитися на поточний каталог ( `pwd`) - але, оскільки ми використовуємо зворотні посилання у подвійних лапках, pwdкоманда оцінюється перед тим, як запустити suкоманду, так що ми переходимо до каталогу, який ми знаходимо ЗАРАЗ, як старий користувач.
-c 'cd `pwd`'виконував би pwdкоманду в новій оболонці, так що це буде оцінюватися cd /root, що, звичайно, нічого не виконає.Єдина проблема тут полягає в тому, що нова оболонка виходить відразу після запуску команди, тому ми додаємо:
-c "cd `pwd`; bash"що означає "запустити bash(нова оболонка) після запуску cdкоманди. Оболонка bash не виходить, поки ми не вийдемо з неї.Зауважте, що ви можете замінити `pwd`на $(pwd). Вони функціонально однакові, але безліч символів, що нагадують цитати, можуть стати важкими для читання.
Я зіткнувся з тією ж проблемою, і мені заборонено запускати щось, окрім sudo su - devuserсервера dev, тому ось що я придумав:
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
Він піднімає дерево процесів і перевіряє, чи змінився користувач, який володіє процесом.