TCL, Linux и FLOCK
Поэтому я работаю с программой, написанной на TCL, которая использует функцию FLOCK для блокировки файлов. Я тестирую его на более новой версии Linux, чем та, на которой он в настоящее время работает, и обнаружил, что когда на более новой машине выполняется сценарий, он использует FLOCK из /usr/bin/flock, которая отличается от версии FLOCK TCL. Версия TCL использует -read -write и тому подобное, в то время как версия Linux использует совершенно другие параметры.
Короче говоря, программа перестает работать и выдает ошибки, когда попадает на любой вызов FLOCK. Если я изменю параметры в соответствии с версией Linux, это нарушит работу программы на других компьютерах.
Есть ли способ заставить его использовать версию TCL, а не версию для Linux?
1 ответ
Сам Tcl не поставляется с flock
команда, хотя вы можете видеть, что она автоматически пытается использовать системную команду, если вы тестируете в интерактивном режиме. Такое автоматическое использование системных команд не выполняется в сценариях (это было бы адски нестабильно из-за изменяющихся PATH), поэтому при написании сценария вы должны четко указывать, что вы имеете в виду.
Если вы хотите использовать системную команду (сама по себе непереносимая, особенно для систем, отличных от Linux), просто выполните:
exec flock $options...
Помните, что Tcl использует другую форму цитирования аргументов в оболочке. Иногда это может застать людей врасплох exec
звонки.
В качестве альтернативы используйте flock
Команда Tcl, которая находится в пакете TclX. Синтаксис немного отличается от синтаксиса системной утилиты Linux, во многом потому, что он немного более низкого уровня. В свою очередь, он более портативен.