Не доверие mount
, /etc/mtab
, /proc/mounts
, и т.д.:
if [ `stat -c%d "$dir"` != `stat -c%d "$dir/.."` ]; then
echo "$dir is mounted"
else
echo "$dir is not mounted"
fi
, Когда $dir
точка монтирования, она имеет другой номер устройства, чем его родительский каталог.
преимущество по альтернативам, перечисленным до сих пор, - то, что Вы ничего не должны анализировать, и это делает правильную вещь если dir=/some//path/../with///extra/components
.
оборотная сторона - то, что это не отмечает /
как точку монтирования. Ну, это достаточно легко к особому случаю, но все еще.
Несколько месяцев назад Ара Ховард опубликовал отрывок для сравнения XML-документов: Сравнение XML .
Изменения только в удаленном файле? Другими словами, является ли визуально привлекательный файл основным файлом, который изменяется только на основе распространения изменений в удаленном файле, или оба файла редактируются независимо? Если не оба редактируются, можете ли вы просто сравнить вырезанный файл с его последним экземпляром, а затем применить эти изменения?
I've wanted similar functionality myself in the past (mainly for unit testing xml generation) but I've never found a good solution. I'd assume at some point you're going to want to compare two DOMs and look for differences.
You could maybe take a look at how this 'xml subset matcher' tool does things for inspiration.
checking out the answers to this question may well help
Вам, вероятно, потребуется реализовать свою собственную логику сравнения. Ни одна из библиотек синтаксического анализа XML для Ruby не поддерживает различие документов. Пытаясь разработать логику, вы можете посмотреть на оператор == для LibXML :: XML :: Node, который позволяет сравнивать два объекта Node на основе их XML-представления.
Боюсь, единственный способ сделать это передать код. Я написал свои собственные алгоритмы сравнения XML, и это будет намного проще, если вы будете постоянно использовать идентификаторы.
Можно ли форматировать XML?
require "rexml/document"
formatter = REXML::Formatters::Pretty.new( 2 )
xml = REXML::Document.new '<cheese><name>Stilton</name><weight>250</weight><expire_date>2009-12-25</expire_date></cheese>'
formatter.write( xml, $stdout )
# Outputs:
#<cheese>
# <name>
# Stilton
# </name>
# <weight>
# 250
# </weight>
# <expire_date>
# 2009-12-25
# </expire_date>
#</cheese>
Вы также можете использовать Chilkat Ruby XML-компонент, это бесплатное ПО.
require 'chilkat'
xml = Chilkat::CkXml.new()
xml.LoadXml("<cheese><name>Stilton</name><weight>250</weight><expire_date>2009-12-25</expire_date></cheese>")
print xml.getXml() + "\n";
# Outputs:
#
# <?xml version="1.0" encoding="utf-8" ?>
# <cheese>
# <name>Stilton</name>
# <weight>250</weight>
# <expire_date>2009-12-25</expire_date>
# </cheese>
Если вы создаете xml через Ruby, я бы предложил разобрать xml на объекты ruby, сравнить их, а затем повторно вывести различия.
Другой вариант, который я предлагаю, был бы быть красиво напечатанным с помощью tidy, затем введите текст diff два и проанализируйте результат.