Не может вызвать команду часов с опцией времени нецелого числа

Веб-приложение не должно работать от /home... и как этому нужно noexec работать правильно? Если это ничего не должно выполнять туда, это не должно пытаться сделать так, и флаг не имеет никакого значения вообще в этом случае.

Вы могли осуществить ограничения, которые Вы хотите использовать, например, маркировки SELinux, но это не легко. Или Вы могли использовать ACLs и полномочия на файлах (см. acl(7), setfacl(1)) управлять, кто может выполнить файлы. Если доступ "другими" в какие-либо файлы там не требуется вообще, можно играть с полномочиями каталога.

6
30.03.2015, 01:45
3 ответа

Это проблема локали. watch использует strtod(3), который зависит от локали, для преобразования аргумента -n в double.

Чтобы решить эту проблему, нужно либо указать аргумент -n с другим разделителем:

watch -n 0,1 w

Либо изменить локаль на такую, где для десятичной точки используется символ точки:

export LC_NUMERIC=en_US.UTF-8
watch -n 0.1 w


Пара ссылок:

  1. Соответствующая часть руководства Linux для strtod:

Десятичное число состоит из непустой последовательности десятичных цифр, возможно, содержащей символ радикса (десятичная точка, зависит от локали, обычно '. ')

  1. Вы можете просмотреть текущие настройки, выполнив locale в терминале:

    locale
    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    ...
    
  2. Исходный код, о котором идет речь, можно просмотреть на gitlab:

    https://gitlab.com/procps-ng/procps/blob/85fff468fa263cdd2ff1c0144579527c32333695/watch.c#L625

    https://gitlab.com/procps-ng/procps/blob/85fff468fa263cdd2ff1c0144579527c32333695/lib/strutils.c#L49

(правка 2017-09-07): обновленные ссылки gitlab

14
27.01.2020, 20:21
  1. Измените вашу сеть HWADDR (на файле контейнера конфигурации)
  2. Установите IP вашего моста и сделать его

его же с http: // febru. Soluvas.com/2015/03/sved-failed-to-attath-bridge-virbr0.html

-121--59574-

Команды смотреть и w не имеют ничего общего друг с другом, кроме первой буквы, равными. Вы не можете предположить, что параметр для W одинаково действителен для часов . Команда Watch принимает неотъемлемое количество секунд в качестве значения для -N .

Кстати, я также посмотрел на страницу человека для w , и я не вижу какую-либо ссылку на период времени. Мне любопытно знать, откуда вы получили эту информацию, чтобы я мог (надеюсь) объяснить дальше.

Обновление

Похоже, что вы на самом деле имеете в виду таймеру , а не для W . Я буду обновлять ваш вопрос, чтобы соответствовать этому новому раскрытию. Наконец-то обнаружил это, я не вижу ничего плохого с Watch -n 0,1 W .

1
27.01.2020, 20:21

Просто дополнение к прекрасному ответу Заксе .

Есть две проблемы:

LC_NUMERIC=en_US.UTF-8 watch -n 0.1 w

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

  1. Это не работает, если установлен LC_ALL . LC_ALL переопределяет все остальные настройки локали, включая LC_NUMERIC .Чтобы обойти эту проблему, можно использовать:

     LC_ALL = en_US.UTF-8 watch -n 0.1 w 
     

    , но тогда второй пункт ниже будет еще хуже

  2. команда, запущенная часы (в данном случае w ) наследуют LC_NUMERIC . Таким образом, вместо вывода чисел в формате, ожидаемом пользователем, он будет выводить их в формате английского языка (США).

В идеале мы бы хотели, чтобы часы запускали w каждую десятую долю секунды (независимо от локали пользователя), не влияя на поведение команды w (которая всегда должен давать вывод, понятный пользователю в его собственной локали).

С оболочкой yash вы можете сделать это с помощью:

 watch -n "$((0.1))" w

yash - одна из 3-х оболочек Борна, поддерживающих арифметику с плавающей запятой (другие - zsh и кш93 ). Однако это единственный, который правильно выполняет интернационализацию. zsh всегда использует . как десятичный знак, а ksh93 учитывает значение из события локали во внутреннем синтаксисе.

Для яс , . - это десятичный знак для его арифметического синтаксиса, но он учитывает локаль при вводе / выводе.

Еще один прием, который вы можете использовать здесь, - это полностью отказаться от ввода десятичной метки, используя научную нотацию:

watch -n 1e-1 w

Или вы можете запросить десятичную метку из локали:

m=$(locale decimal_point)
watch -n "0${m}1" w
2
27.01.2020, 20:21

Теги

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