Не удается найти команды bash

Синтаксис псевдонима, который вы используете, не подходит для оболочки POSIX, для оболочки POSIX необходимо использовать:

alias name='replacement'

Но для всех оболочек это не может работать, поскольку замена псевдонима выполняется на ранней стадии синтаксического анализа.

Перед выполнением настройки вашего псевдонима вся строка была прочитана анализатором, и по этой причине ваша командная строка не будет работать.

Если псевдоним появится в следующей командной строке, он будет работать.

5
01.06.2018, 15:36
1 ответ

Los -dy -zno son comandos sino opciones de las utilidades testy [. Estas utilidades están integradas en bashy documentadas en el manual bash. Estas utilidades y estas banderas también están estandarizadas por POSIX, por lo que están disponibles en cualquier shell POSIX, no solo bash.

Si está en una sesión interactiva bash, puede obtener documentación para el -integrado en variantes de estas utilidades escribiendohelp test(help [también funciona, pero su texto solo hace referencia a la documentación paratest).

man testy man [también deberían funcionar. Estos manuales describen las utilidades externas , probablemente /bin/testy /bin/[, no las que usa por defecto en bash.

Entonces, por ejemplo,

! test -z "$dir" && test -d "$dir" && printf '%s is a directory' "$dir"

es exactamente equivalente a

! [ -z "$dir" ] && [ -d "$dir" ] && printf '%s is a directory' "$dir"

o, si se quiere,

if ! test -z "$dir" && test -d "$dir"; then
    printf '%s is a directory' "$dir"
fi

y

if ! [ -z "$dir" ] && [ -d "$dir" ]; then
    printf '%s is a directory' "$dir"
fi

(! [ -z "$dir" ]probablemente se escribiría más comúnmente [ ! -z "$dir" ]o [ -n "$dir" ], y solo he usado la prueba -zanterior porque se mencionó en la pregunta, la prueba -den una cadena vacía fallaría de todos modos ).

Véase también:

9
27.01.2020, 20:35

Теги

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