[[0 * 10% 300]] работает в AIX 6.1, но не в AIX 7.1 ( ksh)

Согласно FHS /srv предназначен для данных конкретного сайта, а не для программных пакетов (и в этом отношении является просто более новой альтернативой /var)

/srv содержит данные конкретного сайта, которые обслуживаются этой системой

однако если вы запускаете веб-приложение Django с (скажем) Apache, ваш webapp может быть классифицирован как data для него, поэтому он должен идти в /srv/ (точно так же, как вы развернули бы его в /var/www на более старой системе).

И FHS четко намекает на это:

записываемые данные и скрипты (такие как cgi скрипты) могут быть разумно размещены

1
09.11.2016, 17:21
2 ответа

Похоже, что ksh делает что-то другое с арифметическим расширением; чтобы обойти это, я бы явно использовал арифметическую подстановку, которая ведет себя должным образом как в AIX 6, так и в AIX 7:

...
if [[ ( $((f_count * sleep_interval % alarm_interval)) -eq 0 ) && $f_count -gt 0 ]] 
...
0
20.08.2021, 11:54

Похоже, вы нашли ошибку в ksh93.

Я могу воспроизвести это (ksh93u +) с помощью:

$ x= ksh -c '[[ 0*1 -eq 5 ]]'
ksh: *1: arithmetic syntax error

Но все в порядке с:

ksh -c '[[ " 0*1" -eq 5 ]]'

. И похоже, что это было исправлено в ksh93v- (beta), так как я не могу воспроизвести это там.

В любом случае, я бы использовал:

if ((f_count * sleep_interval % alarm_interval == 0 && f_count > 0)); then

Несколько примечаний:

  • внутри [[...]] , > для сравнения строк (где 10 меньше 2 и в зависимости от языкового стандарта -1 может быть больше 0). Используйте -gt для численного сравнения (хотя лучше использовать ((...)) ).
  • избегайте расширения переменных внутри арифметических выражений, например, используйте x вместо $ x . Например, сравните:

     $ x = -1 ksh -c '((- $ x> 0))' 
    ksh: --1> 0: для присвоения требуется lvalue 
     

    с

     $ x = -1 ksh -c '((-x> 0))' 
     $ 
     

    Или:

     $ x = 1 + 1 ksh - c 'echo "$ (($ x * 2)) $ ((x * 2))"' 
    3 4 
     
1
20.08.2021, 11:54

Теги

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