Итак, мне удалось его решить - возможно, это не самый элегантный способ, но он работает и достаточно хорош.
Сначала я написал небольшой сценарий:
#!/бин/ш.
i3lock -i ~/Pictures/lock.png
Сохранил его (например, .locker
) по адресу HOME
, затем запустил "chmod +x . locker"
, чтобы я мог выполнить его, и в Custom Shortcuts
на строку Command
я написал ./.locker
Выбрать произвольный ярлык для него (мой - SUPER+L
).
Когда вы запускаете сценарий с:
bash /tmp/test0&
, вы запускаете полностью отдельный процесс bash
и переводите его в фоновый режим. Вы не можете видеть переменные, определенные в этом скрипте; они принадлежат другому процессу. Если вы хотите получить доступ к переменным, определенным в другом файле, загрузите этот файл в текущий процесс bash
, используя .
или источник
команда :
. /tmp/test0
После этого вы сможете сказать $ pid
в своем основном скрипте и получить значение, которое было установлено в другой файл.
Все это говорит о том, что то, как вы структурируете вещи, очень загадочно. В опубликованном вами сценарии есть много других ошибок, которые, как я полагаю, связаны с редактированием реальной ошибки для вопроса (вы используете $!
, как если бы это переменная awk
, но тогда ожидайте, что переменная, в которую вы ее скопировали, будет определена, например, в сценарии Bash, и test0
будет иметь много синтаксических ошибок). $!
определяется только в Bash после запуска фонового процесса с помощью & : даже если ваша команда awk
сработала, $ pid
будет пустым. Если вы хотите таким образом получить PID процесса xterm
, вам нужно запустить его как xterm ... &
. bash / tmp / test0 &
помещает скрипт test0
в фоновый режим, а не команду xterm
.
Похоже, вам лучше вообще избавиться от test0
и просто запустить xterm
из основного скрипта. Вероятно, стоит переосмыслить свои мысли на более высоком уровне . По крайней мере, посмотрите, что находится в вашем реальном файле test0
, и посмотрите, действительно ли это то, что вам нужно.
(Ваш сценарий bash не запускается, есть ошибки).
Так почему же pid не убивается? Это неправильный пид? Или, может быть, вам нужно принудительно убить его, используя kill -9
?
Затем используйте pgrep
, чтобы получить pid. Создайте новый xterm и сохраните pid в xtermPid_1:
$ xtermPid_1=$(pgrep --newest xterm)
(посмотрите справочные страницы pgrep, это хороший инструмент)