Bagaimana saya bisa mengubah dan mengubah direktori setelahnya?

13

Saya ingin membuat alias yang melakukan sesuatu seperti ini:

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

Jadi dari baris perintah saya, saya login dengan user sudo, dan saya ingin ketik alias userYYYsehingga shell saya sekarang login dengan userYYYdan pwdadalah /a/path/that/only/userYYY/has/access.

Bagaimana saya bisa melakukan itu? Ini userYYYuntuk menjalankan beberapa proses, dan harus ada apa pun di rumahnya. Karenanya, saya mencoba mengubah $ HOME-nya menggunakan:

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

Dan kemudian dari shell saya dengan file sudoer saya saya lakukan sudo su userYYY. Tapi itu tidak berhasil. Satu-satunya yang berfungsi adalah sudo su -l userYYYYtetapi yang membuka bash baru di dalam shell asli saya ( -bash-4.1$ ....).

Singkatnya, apa yang saya inginkan adalah untuk menghindari menulis 2 baris di shell saya:

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

Ada ide?

Mariano Martinez Peck
sumber

Jawaban:

10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'
Cyrus
sumber
tampaknya berfungsi dengan baik, tetapi tidak yakin bagaimana menghapus kesalahan ini, atau jika ini merupakan masalah. menggunakan ubuntu 14.04LTS, perhatikan ada masalah dengan pada debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz
1
sebenarnya, setelah menggunakannya sebentar, saya perhatikan bahwa terminal terbunuh cukup sering menggunakan metode ini (putuskan sambungan sekitar 15-30 menit, secara teratur, terminal saya bertahan sekitar 6 jam sebelum putuskan)
sonjz
Cukup gali ini, perilaku ini disebabkan oleh perbaikan keamanan: unix.stackexchange.com/questions/65843/…
sonjz
ini telah membantu saya mengedit saya .bashrcfile sudokemudian cddi mana sebagai memiliki 2 jalur terpisah hanya tidak bekerja.
RozzA
2

Salah satu opsi adalah mengedit ~/.bashrcpengguna target, dan menambahkan di cdsana:

cd /a/path/that/only/userYYY/has/access
saya ambil
sumber
0

Jawaban singkat - Anda tidak bisa. The sudo sudimulai shell baru yang harus keluar sebelum sampai ke cdperintah.

John
sumber
0

Bagi saya kombinasi sudodan screenberhasil:

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

Perintah ini pertama-tama beralih ke vagrantpengguna. Kemudian sebagai vagrantperubahan direktori /vagrantdan jalankan npm install.

Czerasz
sumber
0

Saya tahu ini sedikit berbeda dari pertanyaan awal, tetapi idenya adalah menjalankan perintah sebagai pengguna yang berbeda tanpa mengetikkan kata sandi ketika kebijakan melarang sudo su <user> -c.

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