Почему делает копирование с винта сценария с моими файлами?

/etc/nsswitch.conf файл по умолчанию для разрешения доменного имени в эти дни. У меня есть следующая строка наверху моего /etc/host.conf файл:-

# The "order" line is only used by old versions of the C library.

nsswitch.conf используется в значительной степени всем на моем поле Debian для определения имен. Так, данный вышеупомянутые строки в Ваших файлах, порядок разрешения имени по умолчанию состоял бы в том, чтобы проверить /etc/hosts во-первых, и затем используйте серверы имен, настроенные в /etc/resolv.conf сделать поиск DNS.

В последнее время (начиная с о Ubuntu 11.10), /etc/resolv.conf по умолчанию настроен для использования интерфейса localhost (127.0.0.1), где программа демона dnsmasq слушает на порте 53 для запросов DNS. Это в свою очередь обычно делает разрешение DNS, как настроено сервером DHCP Вашей LAN, но это может быть вручную переопределено в конфигурации сети ОС GUI.

Примечание: Вы не упоминали то, что ОС Вы используете, и вышеупомянутое прибывает из личного опыта с Ubuntu Debian. Значения по умолчанию могли бы отличаться на различных ароматах Linux

2
12.10.2013, 01:52
1 ответ

Я думаю, что Вашей проблемой является использование eval. Если Вы берете свой сценарий и используете массивы для хранения команд до выполнения, это должно быть достаточно для выполнения тех команд.

#!/bin/bash

CMD1=(echo "onecmd")
CMD2=(printf "%s\n" ascrip*)
CMD3='echo cmd3'

${CMD1[@]}
${CMD2[@]}
$CMD3

Никакая потребность прокрутить их eval.

Пример

$ ./ascript.bash 
onecmd
ascript.bash
cmd3

Отладка

Вы видите то, что продолжается негласно, если Вы включаете режим отладки Bash.

$ bash -x ./ascript.bash 
+ CMD1=(echo "onecmd")
+ CMD2=(printf "%s\n" ascrip*)
+ CMD3='echo cmd3'
+ echo onecmd
onecmd
+ printf '%s\n' ascript.bash
ascript.bash
+ echo cmd3
cmd3
2
27.01.2020, 22:14
  • 1
    я не думаю, что это имеет какое-либо отношение к оценке После предложений из комментария выше, я сделал некоторое тестирование. Если я выполняю расширенную команду CP (cp -fr _opt/ke/cache _opt/ke/conf _opt/ke/modules _opt/ke/scripts _opt/ke/t /home/opt/ke) вручную, файлы повреждаются, также. Но при выполнении его в другом порядке (как cp -fr _opt/ke/cache _opt/ke/t _opt/ke/conf _opt/ke/modules _opt/ke/scripts /home/opt/ke ) все прекрасно снова. Таким образом, я предполагаю, что короткое имя каталога "t" вызывает это (ошибка, возможно?). –  Oliver N. 11.10.2013, 17:50
  • 2
    Хорошо фрагмент, что, я серьезно смущен здесь. Я повторно протестировал это и теперь обе работы команд, независимо порядок. Единственная вещь, которую я, возможно, сделал, удаляет целевой каталог вместо того, чтобы просто чистить его содержание. Извините за беспорядок, но если поведение CP не изменяется по часам, у меня нет объяснения, почему это работает теперь.:/ –  Oliver N. 11.10.2013, 18:08
  • 3
    @OliverN. - Я делаю изрядное количество сценариев использования этого типа шаблона, и я имею не нужный для использования eval как это. Только если мне вложили переменные в массиве, что я хочу быть расширенным предшествующий, сделайте я использую eval. –  slm♦ 11.10.2013, 18:22
  • 4
    @OliverN. Я не проанализировал Ваш сценарий подробно для выяснения то, что вызывает эту проблему, но eval повышает красный флаг. Это полностью повредится для определенных имен файлов. Если кому-то разрешают выбрать имя файла под _opt/ke, они пишут фрагмент кода, который выполняет Ваш сценарий. eval тонкий инструмент должен использоваться экономно, и Вы используете его неправильно. –  Gilles 'SO- stop being evil' 12.10.2013, 01:56
  • 5
    @Gilles - да это не было хорошо продумано, просто что-то экспромтом. –  slm♦ 12.10.2013, 02:43

Теги

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