что делает тире '-' перед 'ударом' на 'команде, не найденной' средние ошибки?

Сессия DBus не может быть совместно использована для различных пользователей, это - то, как она была разработана.

Я не мог бы получить Ваше текущее решение, почему Вы пытаетесь сделать это с корнем?

Если так, используйте su - USERNAME -c /path/to/this/script.sh запустить сценарий как это,

#!/bin/bash
. ~/.dbus/session-bus/*
purple-remote getstatus

Это будет работать на пользователя root.

P.S.: почему Вы не настроили бы крона как пользователь, который вошел в систему через гибридный язык??

28
08.08.2014, 08:30
2 ответа

Это означает, что это оболочка входа в систему.

Из man bash :

Оболочка входа - это оболочка, у которой первым символом нулевого аргумента является -, или один начинается с опции --login.

(В терминологии bash «нулевой» аргумент - это имя команды, которое в вашем случае было bash .) bash использует это как сигнал для выполнения действий входа в систему, таких как выполнение .bash_profile и т. д.

Одним из способов автоматического добавления тире является запуск оболочки с помощью exec . Из руководства Bash :

 exec [-cl] [-a имя] [команда [аргументы]]
  

[...] Если задана опция -l , оболочка помещает тире в начало нулевого аргумента, переданного команде .

Пример

Сравните эти две попытки выполнить команду несуществующая . Первый без -l :

$ exec bash
$ nonexistent
bash: nonexistent: command not found

И второй, с:

$ exec -l bash
$ nonexistent
-bash: nonexistent: command not found
27
27.01.2020, 19:39

Другой ответ вполне подходит, но стоит отметить, что эта возможность более общая, чем bash.

С древних времён программа login при выполнении пользовательской оболочки препарировала тире к argv[0], и оболочка распознавала это как признак того, что она должна вести себя как "оболочка для входа". Это документировано в man-страницах V7 здесь: login(1), sh(1).

Все программы, которые предоставляют сервис, подобный логину (аутентифицируют пользователя и запускают оболочку) должны следовать правилу "prepend dash". Например, sshd делает то, что вы можете увидеть в ssh/session.c в этом комментарии:

/*
 * If we have no command, execute the shell.  In this case, the shell
 * name to be passed in argv[0] is preceded by '-' to indicate that
 * this is a login shell.
 */

Все оболочки распознают ведущую тире. Эквивалентная -l опция не существует в классическом панцире Борна или оригинальном csh, но большинство более новых панцирей (баш, тире, кш, яш, tcsh, zsh, rc, es, fish и любая полурецензионная версия csh) имеют ее.

.
15
27.01.2020, 19:39

Теги

Похожие вопросы