sudo -u kullanıcı adı -s “cmd arg” döndürme komutu bulunamadı


10

Komutu çalıştırırdım:

sudo -u elasticsearch -s "ulimit -Hn"

ve Ubuntu 11.10'da denemeden kullanıcı elasticsearch tarafından görüldüğü gibi ulimit -Hn değerini döndürüyordu. İşte geri döner:

/bin/bash: ulimit -Hn: command not found

Birkaç farklı komut denedim ve bir argüman kullandığımda her zaman "komut bulunamadı" mesajı alıyorum:

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

Bağımsız değişkenler gerektiren bir komutu nasıl yürütebileceğime dair bir fikrim var sudomı?


neden -s? Normal kabuğu saklayın ve komutları yürütmek için kullanın. Gibi sudo -u elasticsearch ls all.sh. elasticsearchKullanılamaz bir varsayılan kabuk varsa , gerçek komuttan -s bash önce kullanın.
glglgl

Yanıtlar:


16

Çift tırnak işaretlerini kaldırmanız gerekir. Tek bir komut, boşluklar ve hepsi olarak "ulimit -Hn" adlı bir komutu çalıştırmaya çalışıyor. komut satırındaki -sson sudoseçenek olmalıdır sudove aşağıdaki tüm bağımsız değişkenler $SHELL -cyürütmek için iletilir .

sudo -u elasticsearch -s ulimit -Hn

Sanırım -sişlenen yol değişti, çünkü mevcut yol $SHELLkomut satırında kaçarak boşlukları olan argümanlar geçirmenize izin verir :

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

Eski argüman işleme yöntemi bu argümanı ikiye bölerek '/tmp/foo bar'komutu kırar.


nerede o olacağını test ettiniz değil komutu bölmek?
Zarathustra

@Zarathustra Bu beş yıl önceydi - o kadar hatırlayamıyorum. Ben sudo kaynak kodu geçmişi kazma öneririz - davranış değiştiğinde bulmak mümkün olmalıdır.
camh
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.