次のようなエイリアスを作成したいと思います。
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
何か案は?
alias userYYY='Sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
1つのオプションは、ターゲットユーザーの~/.bashrc
を編集し、そこにcd
を追加することです。
cd /a/path/that/only/userYYY/has/access
短い答え-できません。 Sudo su
は、新しいシェルを開始します。このシェルは、cd
コマンドに到達する前に終了する必要があります。
私にとっては、Sudo
とscreen
の組み合わせがうまくいきました:
Sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'
このコマンドは、最初にvagrant
ユーザーに切り替えます。次に、vagrant
がディレクトリを/vagrant
に変更し、npm install
を実行します。
これは元の質問とは少し異なることは知っていますが、ポリシーでSudo su <user> -c
。
Sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"