Почему использование ps
когда можно сделать это легко с top
команда?
Если необходимо использовать ps
, попробуйте это:
ps aux | sort -nrk 3,3 | head -n 5
Если Вы хотите что-то, что это действительно 'top'esq с постоянными обновлениями, используйте часы
watch "ps aux | sort -nrk 3,3 | head -n 5"
Я никогда не встречал оболочку стиля Границы, которая позволила -
в имени переменной. Только буквы ASCII (любого случая), _
и цифры поддерживаются, и первый символ не должен быть цифрой.
Если у Вас есть программа, которая требует переменной среды, которая не соответствует ограничениям оболочки, запускает ее с env
программа.
env 'strange-name=some value' myprogram
Обратите внимание, что некоторые оболочки (например, современный тире, mksh, zsh) удаляют переменные, имя которых они не любят от среды. (Контузия заставила людей быть более осторожными относительно имен переменной среды, таким образом, ограничения, вероятно, станут более трудными со временем, не более разрешающий.) Поэтому, если необходимо передать переменную, имя которой содержит специальный символ к программе, передайте его непосредственно без промежуточной оболочки (env 'strange-name=some value' sh -c'…; myprogram'
май или не может работать).
Это не возможно в Bash.
От раздела Definitions в странице руководства bash
:
назовите слово, состоящее только из алфавитно-цифровых символов и символов нижнего подчеркивания, и начинающееся с буквенного символа или подчеркивания. Также называемый идентификатором.
От раздела Parameters в странице руководства bash
:
Параметр является объектом, который хранит значения. Это может быть имя, число или один из специальных символов, упомянутых ниже под Специальными Параметрами. Переменная является параметром, обозначенным именем.
Тире (-
) символ является символом прерывания и не позволенный как часть имен переменной. Существуют способы взломать это с заключенными в кавычки переменными, но парсинг его действительно проблематичен. Существуют также другие символы с особыми значениями в контексте имен переменной в ударе, особенно фигурные скобки, круглая скобка, символы оператора и кавычки. (например. {}()=+-&'"
и больше)
Я предложил бы, чтобы практически Вы нашли другую парадигму, на которой можно создать Ваш сценарий. У Вас могло бы быть подвешивание по идее с других языков о "переменных именах переменной". Это обычно - не хорошая идея в сценариях оболочки.
Если Вы редактируете это или задаете новый вопрос с деталями Вашего контекста и что Вы пытаетесь выполнить, мы смогли предлагать хороший способ написать сценарий его.
Руководство Bash определяет "имя" как:
'Слово', состоящее только из букв, чисел и символов нижнего подчеркивания, и начинающееся с буквы или подчеркивания. 'Имя используется в качестве имен переменной оболочки и имен функций. Также называемый 'идентификатором'.
Таким образом, Вы не можете использовать дефис на имя.
Большинство оболочек только поддерживает a-z, A-Z, 0-9 и _ для variablenames. Считайте второй объект на этой странице.
Я полагаю, что только обозначает буквами, числа, и подчеркивание позволяется для переменных удара. Дело обстоит так на многих языках программирования (JavaScript, являющийся исключением).
Я рекомендую не иметь Вашего сценария, зависят от тех типов имен переменной.
На самом деле необходимо попытаться программировать таким способом, которым можно заменить имена переменной другими именами, и это не имеет значения. В целом имена переменной должны описать то, что содержит переменная. Это делает намного легче отладить; если бы не Вы, затем для следующего разработчика, который пытается выяснить код.
Если Ваш сценарий зависит от наличия имен переменной, имеют дефисы, это - программная ошибка. Если удобно для Вас из-за инструментов, что Вы регулярно используете, чтобы иметь имена переменной, содержат дефис, Вам, вероятно, придется узнать больше и различные инструменты.
Вы попытались использовать TR для преобразования дефисов в символы нижнего подчеркивания?
hyphenated_name="a-b"
unhyphenated_name=$(echo $hyphenated_name | tr '-' '_')
declare -x $unhyphenated_name="some value"
Bash действительно позволяет '-' появляться на имена функций. Я делаю это все время. Например:
function foo-bar() {
echo "$@"
}
Вы можете получить доступ к переменной с дефисом, используя косвенный Справка.
$ env 'my-hyphenated-variable=hello' /bin/bash
$ name='my-hyphenated-variable'
$ echo ${!name}
hello
Puede utilizar el comando env
para establecer y desactivar variables de entorno con guiones "-".
Para configurar, debe usar env para ejecutar su comando:env command
. Pasas variables de esta manera:
env a-b=c command
Véalo funcionando con:
env a-b=c env
o para que quede más claro:
env a-b=c env|grep 'a-b'
Вы можете поиграться с env и sed.
В качестве примера мне нужно было прочитать эту переменную «ELASTICSEARCH _CLUSTER -NODES».
Команда env выводит это:
~ $ env
ELASTICSEARCH_CLUSTER-NODES=elasticsearch:9200
JAVA_ALPINE_VERSION=8.212.04-r0
HOSTNAME=17eb9e7fec4c
...
Таким образом, чтобы извлечь переменную:
ESHOST=`env | sed -n 's/ELASTICSEARCH_CLUSTER-NODES=\(.*\)/\1/p'`
env
Вы использовали на какой операционная система.) – Gilles 'SO- stop being evil' 09.02.2017, 23:17env
отcoreutils
,sh
отdash
:env 'with-dashes=value' bash -c 'env | fgrep dashes'
работы, ноenv 'with-dashes=value' sh -c 'env | fgrep dashes'
печать ничто. Таким образом,env
самостоятельно прекрасен, но Тире, кажется, конкретно блокирует эти переменные. Таким образом, если рассматриваемая программа запускается через обертку оболочки с типичным#!/bin/sh
заголовок, нет никакого очевидного способа передать в таких переменных. обходное решение – Jesse Glick 14.04.2017, 15:23env
ближе на сайт вызова программы, для которой нужно это имя переменной без промежуточной оболочки. Тире не является одним в удалении переменных, имя которых это не любит. – Gilles 'SO- stop being evil' 14.04.2017, 16:05