Ebeveynin ortamını devralmadan bir komut çalıştırma


14

Komutu yeni bir oturumda "sanki" çalıştırmanın bir yolu var mı?

Zaten denedim env -i. Ancak, ayarlamak veya ayarlamak zorunda olduğum çeşitli ENV değişkenleriyle uğraşmak istemiyorum.

Ben de denedim bash -c "some command"ve bash -l -c "some commmand"hepsi mevcut ortamı kopyalar.

En yakın geldiğim bir getto çözümü: ssh me@localhost "some command"


/bin/bash --loginBu davranışı elde etmek için kullanın . Ben uygun bir almak için örneğin kullanın $PATH.
Daniel Beck

/bin/bash --lZaten denediğim eşdeğerdir . Orijinal ortamı kopyalar. Deneyin: export SOME_VAL=something. Sonra /bin/bash --login. Sonra env | grep SOME_VAL. Değer orada olacak.
dgo.a

Yanıtlar:


12

İşte sudo ayrıcalıkları veya kullanıcı şifresi gerektirmeyen, ancak yine de yeni bir girişte alacağınız gibi bir ortam sağlayan bir cevap.

env -i HOME="$HOME" bash -l -c 'your_command'

Misal:

$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123

Bunu açıklama için yıkmak:

  1. env -i HOME="$HOME": Çevreyi temizler. -iBoş bir ortamda kadar setleri hiçbir değişkenler . Bu sorunludur, çünkü saf bir şekilde çalıştırmaya çalışırsanız bash -l, .bash_profilevb HOME. Bunu hafifletmek için, açıkça geçiyoruz (ve sadece ) ayarlanmış HOME="$HOME"bir ortam yaratıyoruz .HOMEHOME

  2. bash -l -c ...: Bir oturum açma kabuğunda istenen komutu çalıştırır. Bunun için bir giriş kabuğu isteyeceksiniz çünkü temiz bir ortamdan başlıyoruz ve her şeyi yeniden yüklememiz gerekiyor.

Özellikle:

  • Bu, sudo ayrıcalıkları gerektirmez ( sudosürüm gerektirir ).
  • Bu, kullanıcının şifresini yazmayı gerektirmez ( susürüm yapar).
  • Bu, bir SSH sunucusunun çalıştırılmasını ve makinede tekrar oturum açmak için kullanılabilen şifresiz bir anahtara sahip olmanızı gerektirmez ( sshsürüm).

Teşekkürler, Elliott. Çok basit ve açık görünüyor ... şimdi bana işaret edildi.
dgo.a

12
su -l $USER

sudo -u $USER -i

Daha agresif bir şey için deneyin env -i bash, ancak bu $ HOME ve $ TERM dahil her şeyi kaldırıyor .


2
Teşekkürler! İkinci komut bana tam olarak istediğimi veriyor. 2 saatten fazla aradım ve cevabınıza yakın bir şey bulamadım. Cevabınıza dayanarak geri döndüm man sudove buldum: "Hedef kullanıcı çağıran kullanıcı ile aynıysa, şifre gerekmez." (Her suzaman bir şifre ister gibi görünüyor.) Ben bir mansayfanın ilk paragrafında çok basit bir şey göz ardı gibi aptal değilim :( Ben her zaman bir şifre istedi varsayılır çünkü ilk etapta sudo kaçındı. tekrar!
dgo.a

1
sadece diğerleri için bir ipucu ... Eğer oturum $USERaçtıysanız root olarak ve sonra sudo -u ...kullanıcı olarak giriş yapmanız gerekecektir . Sadece sudo -ukullanıcı olarak yaparsanız devralırsınız.
Adam Gent

sudoerişiminiz yoksa bu açık bir şekilde çalışmaz . Sudo gerektirmeyen alternatif bir yöntem var mı?
user5359531

@ user5359531: Evet - su -l $USER.
user1686

1
bir şifre ister; Ssh anahtar kimlik doğrulaması ile giriş yaptım, bu yüzden şifrenin ne olduğunu bile bilmiyorum. Ve bir şifre istemi komut dosyası yeteneğini öldürecek. Şimdiye kadar onun gibi görünüyor ssh $USER@localhost <command>daha iyi çalışıyor
user5359531
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.