web-dev-qa-db-ja.com

すぐにSudo suしてディレクトリを変更するにはどうすればよいですか?

次のようなエイリアスを作成したいと思います。

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-4.1$ ....)内に新しいbashが開きました。

要約すると、私が欲しいのは、シェルで2行を記述する必要を単に回避することです。

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

何か案は?

13
alias userYYY='Sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
10
Cyrus

1つのオプションは、ターゲットユーザーの~/.bashrcを編集し、そこにcdを追加することです。

cd /a/path/that/only/userYYY/has/access
2
iTake

短い答え-できません。 Sudo suは、新しいシェルを開始します。このシェルは、cdコマンドに到達する前に終了する必要があります。

0
John

私にとっては、Sudoscreenの組み合わせがうまくいきました:

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

このコマンドは、最初にvagrantユーザーに切り替えます。次に、vagrantがディレクトリを/vagrantに変更し、npm installを実行します。

0
czerasz

これは元の質問とは少し異なることは知っていますが、ポリシーでSudo su <user> -c

Sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
0
Chase T.