функция bash для обработки пробелов из аргумента командной строки

Решение:

iostat -d 1 2 | awk 'BEGIN{print "Device\tbps\ttps\tbread\tbwrtn"}/^hdisk/{print $1"\t"$3"\t"$4"\t"$5"\t"$6}'

Выход:

Device  bps     tps     bread   bwrtn
hdisk1  0.0     0.0     0.0     0.0
hdisk0  0.0     0.0     0.0     0.0
hdisk1  0.0     0.0     0.0     0.0
hdisk0  77.8K   19.0    0.0     77.8K

Комментарии:

Боюсь, вы все усложняете. Предлагаемое решение является предположением, основанным на вашем входном образце и желаемом результате, которые действительно содержат некоторые несоответствия. Объясните, пожалуйста, откуда берутся данные для hdisk2и hdisk3, так как их нет во входных данных. Пожалуйста, также объясните причину создания такого запутанного решения, которое разбивает код на несколько переменных среды.

-1
06.02.2020, 19:36
1 ответ

Ну, эта функция называется changedir, поэтому она будет работать, только если оболочке будет дана команда changedir [whatever]. Не каждый раз, когда вы запускаете любую команду. Вы можете злоупотреблять ловушкой DEBUGдля запуска функции для каждой введенной вами командной строки, но здесь она нам не нужна.

Вместо этого просто создайте функцию с именем c, которая запускает cd..при задании аргументов d..или dи ..:

.
c() {
    if [[ $1 = 'd..' ]] ||
       [[ $1 = 'd' && $2 = '..' ]]; then
        command cd --..
    else
        echo "Invalid arguments to 'c'! Only 'c d..' and 'c d..' are supported." >&2
    fi 
}

Или вы можете использовать shopt -s autocdв Bash, что заставит оболочку переходить в каталог, когда указано только имя каталога. Таким образом, foobarбудет делать то же самое, что и cd foobar(, если не существует команды foobar), и просто ..будет идти вверх по каталогу.

1
28.04.2021, 23:24

Теги

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