Когда вы выполняете сценарий оболочки, он запускает процесс, известный как подоболочка. Как дочерний процесс основной оболочки, подоболочка выполняет список команд в сценарии оболочки какbatch
(так -, что называется «пакетной обработкой» ).
В некоторых случаях может потребоваться узнать идентификатор процесса (PID )подоболочки, в которой выполняется сценарий оболочки.
В баш,PID процесса подоболочки сценария оболочки хранится в специальной переменной с именем «$$». Эта переменная доступна только для чтения -, и вы не можете изменить ее в сценарии оболочки. Например:
$ cat xyz.sh
#!/bin/bash
echo "PID of this script: $$"
Что дает следующий результат
PID of this script: XXXX
Оболочка bash экспортирует несколько других переменных -только для чтения. Например, PPID хранит идентификатор родительского процесса подоболочки (, т. е. основной оболочки ). UID хранит идентификатор текущего пользователя, выполняющего скрипт. Вот так (только пример)
#!/bin/bash
echo "PID of this script: $$"
echo "PPID of this script: $PPID"
echo "UID of this script: $
Что дает вывод
PID of this script: XXXX
PPID of this script: XXXX
UID of this script: XXXX
Технически, как и в csh
, откуда взялась эта alias
ошибка, вы могли бы:
alias docker='docker '
alias ps='ps --format="table {{.ID}} {{.Image}} {{.Status}}"'
Это позволит достичь желаемого, но это будет означать, что:
docker
, подлежат расширению псевдонимов (, что alias cmd='cmd '
трюк предназначен для таких команд, как command
, env
, sudo
, которые принимают команды в качестве аргументов, поэтому псевдонимы также расширяются после их ). ps
без docker
перед ним также будет расширено, что означает, что вы больше не сможете запускать автономную команду ps
, если не измените формулировку вызова (, например"ps" -ef
). Здесь я бы просто определил новую команду с другим именем, чтобы она не конфликтовала с исходной, которая делает то, что вы хотите:
my-docker-ps() docker ps --format="table {{.ID}} {{.Image}} {{.Status}}" "$@"
Здесь реализовано как функция, хотя вы можете предпочесть реализовать его как скрипт, чтобы он также был доступен вне вашей оболочки.