Поведінка оболонки входу проти Linux, 'sh -c'


2

У мене, здавалося б, дійсна команда, яка добре працює на скриньках Linux, але не працює в OSX, і я хотів би знати, чому.

sudo su - validusername sh -c 'whoami'

У Linux це відображатиметься "validusername" на консолі. OSX, однак, показує помилку:

/bin/sh: /bin/sh: cannot execute binary file

Це особливість OSX? Або це пов'язано з тим, що OSX використовує bash 3.2, тоді як наші linux-коробки знаходяться на bash 4.x?

EDIT: Я швидко з'ясував рішення ( sudo -u), мені цікаво дізнатися, чому це сталося. Дякую!


1
Ніколи не забувайте, що OSX - це не GNU, а BSD.
Матьє Ріглер

Дякую Маттьє, моя перша зустріч із грепом OSX BSD навчила мене цього уроку швидко!
mikewaters

BTW це мало стосується Bash, і більше стосується версій (и) sudoта su(GNU vs BSD). Я хотів би зазначити, що немає ніяких причин використовувати suвзагалі (насправді, мабуть, не слід, якщо у вас є sudo), оскільки перемикачі sudoможуть точно відповідати вашим потребам.
sdmeyers

Відповіді:



0

або:

sudo su - username -c whoami

Сторінка suлюдини говорить

 su [-] [-c class] [-flms] [login [args]]

...

Якщо необов'язкові аргументи надаються в командному рядку, вони передаються оболонці входу цільового входу. Зауважте, що всі аргументи командного рядка перед цільовим іменем входу обробляються самим su, все після того, як ім'я цільового входу буде передано в оболонку входу.


Яка версія OS X? Моя suсторінка чоловіка нічого не говорить. su [-] [-flm] [login [args]]під Мавериками.
Тоні Вільямс

Гаразд, "a" сторінка "man man". У мене немає мака під рукою, тому я переглядав сторінку чоловіка BSD: freebsd.org/cgi/man.cgi?query=su
glenn jackman

0

Гаразд, для початку вам не потрібно і "su", і "sudo" - просто "su" зробить. Я також сумніваюся в Linux, що у вас є "sh", оскільки ефект "-" полягає у запуску оболонки для входу, але те, що на землі погана оболонка намагається у вашій команді з обома, - це хтось здогадався.

Я живу в світі, де ми видаляємо sudoз наших скриньок Linux, тому я не можу перевірити, чи працює ваша команда насправді.

І в OS X, і в Linux команда su - username -c 'whoami'відображатиме ім'я користувача.

Існують деякі відмінності між "su" і "sudo", знайденими в Linux і OS X, але вони пов'язані з різницею між нашими відкладеними, West Coast, BSD-версією Unix і вертикальним, East Coast, AT&T, отриманими утилітами Gnu в середньому дистрибутиві Linux, а не bash версіях, оскільки жодна з них не є вбудованою програмою bash.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.