我怎么能sudo su并立即更改目录?


13

我想创建一个执行以下操作的别名:

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

因此,然后从我的命令行,我登录与须藤用户,我想输入别名userYYY让我的壳现在登录同userYYYpwd/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但是在我的原始shell(-bash-4.1$ ....)中打开了一个新bash 。

总而言之,我要避免在shell中写两行代码:

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

有任何想法吗?

Answers:


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 2015年

刚挖出了这一点,这种行为是由于安全修补程序: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


0

我知道这与原始问题略有不同,但是其想法是在策略禁止时以其他用户身份运行命令而无需输入密码sudo su <user> -c

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.