Вы получаете вывод pgrep
в свою status
переменную. Это просто не тот результат, которого вы ожидаете.
pgrep
выводит идентификаторы процессов (PID )процессов, соответствующих заданному шаблону. Если есть процесс, имя которого соответствует compton
, то $status
будет PID этого процесса или этих процессов. pgrep
также возвращает статус выхода, но статус выхода не фиксируется подстановкой команды в виде строки.
В своем тесте вы сравниваете $status
с 1
. Маловероятно, что compton
имеет PID 1.
Если вы хотите убить любой compton
процесс, если он существует, и запустить compton -b
, если compton
процесса не существует, вы можете сделать это с помощью
#!/bin/sh
if ! pkill compton; then
exec compton -b
fi
Здесь используется статус выхода pkill
. Инструмент pkill
работает аналогичноpgrep
(они обычно распространяются и устанавливаются как пара ), но вместо вывода PID соответствующих процессов, как это делал бы pgrep
, pkill
отправляет сигнал TERM
(по умолчанию )для соответствующих процессов.
Ключевое слово if
использует статус выхода команды, которую вы используете вместе с ним.
!
меняет смысл теста таким образом, что
Если pkill compton
завершается успешно, это означает, что был один или несколько compton
процессов, которые сейчас были убиты или, по крайней мере, получили сигнал, и exec compton -b
не будут выполняться.
Если pkill compton
завершится ошибкой, (ни один процесс не соответствует имени, или вpkill
)возникнет какая-то внутренняя ошибка, тело оператора if
вызовет ваш exec compton -b
, что заменит процесс оболочки на процесс, являющийся результатом запуска compton -b
.
Как правило, при установке двоичные файлы будут устанавливаться, например, в /usr или /bin, то есть в какую-то папку, указанную в пути для всех пользователей.Любая персонализация для каждого пользователя для этого двоичного файла хранится в его домашней папке, часто в скрытой папке, то есть в имени программы с префиксом точки.
Чтобы установить для одного пользователя, установите двоичный файл, используя эту учетную запись, а не повышая права с помощью sudo до домашней папки пользователя.
Если вы объясните, какое именно приложение вы хотите установить, возможно, совет будет более конкретным и менее общим.