Как я могу sudo su и изменить каталог сразу после?

13

Я хотел бы создать псевдоним, который делает что-то вроде этого:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Итак, из моей командной строки я вошел в систему с пользователем sudo, и я хотел бы ввести псевдоним, userYYYчтобы моя оболочка теперь регистрировалась с userYYYи pwdбыла /a/path/that/only/userYYY/has/access.

Как я могу это сделать? Это userYYYдля запуска некоторых процессов, и в его доме должно быть что-нибудь. Поэтому я попытался изменить его $ HOME, используя:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

И затем из моей оболочки с моим файлом sudoer я сделал sudo su userYYY. Но это не сработало. Работало только то, sudo su -l userYYYYчто открывало новый bash внутри моей оригинальной оболочки ( -bash-4.1$ ....).

Таким образом, я хочу просто избежать написания двух строк в моей оболочке:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Есть идеи?

Мариано Мартинес Пек
источник

Ответы:

10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
Кир
источник
Кажется, работает нормально, но не уверен, как удалить эту ошибку, или если это проблема. используя Ubuntu 14.04LTS, заметил, что есть проблема с Debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz
1
на самом деле, после его использования некоторое время, я заметил, что терминал довольно часто убивается с помощью этого метода (отключение около 15-30 минут, регулярно, мой терминал работает около 6 часов до отключения)
sonjz
Просто выкопайте это, это поведение связано с исправлением безопасности: unix.stackexchange.com/questions/65843/…
sonjz
это помогло мне изменить свой .bashrcфайл , sudoто cdгде , как имеющие 2 отдельных линии просто не работает.
RozzA
2

Одним из вариантов будет редактирование ~/.bashrcцелевого пользователя и добавление cdтуда:

cd /a/path/that/only/userYYY/has/access
я беру
источник
0

Короткий ответ - вы не можете. sudo suНачинает новую оболочку , которая должна выйти , прежде чем он попадет в cdкоманду.

Джон
источник
0

Для меня сочетание sudoи screenвыработано:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Эта команда сначала переключается на vagrantпользователя. Затем по мере vagrantизменения каталога на /vagrantи выполняет npm install.

czerasz
источник
0

Я знаю, что это немного отличается от первоначального вопроса, но идея состоит в том, чтобы запустить команду от имени другого пользователя, не вводя пароль, когда политика запрещает sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
Чейз Т.
источник