Лучший метод был бы strace для обнаружения. Используя двоичный файл, почему для некоторого неверного представления о производительности, как немой по нескольким причинам! KDE делает его правильно, но это не столь легко как xfce с наутилусом!
Проблема состоит в том, что система () передает командную строку оболочке, таким образом, в общем случае, необходимо выйти из всех специальных символов оболочки от имени файла.
awk имеет ОКРУЖАТЬ ассоциативный массив, который отображается на среде, которую он получил, но к сожалению, присваивание ему не влияет на среду команд, выполняемых через system
или getline
awk -v q="'" '
function escape(str) {
gsub(q, q "\\" q q, str)
return q str q
}
BEGIN {
file = "a.txt"
system("cat " escape(file))
}'
Конечно, если файл является "a.txt", или можно удостовериться, что его путь никогда не будет содержать специальных символов оболочки, можно сойти с рук:
system("cat " file)
Если можно удостовериться, что это не содержит символы одинарной кавычки, Вы могли бы сделать:
system("cat '\''" file "'\''")
Если то, что Вы намереваетесь сделать, должно определить файл, который должен быть обработан в самом awk сценарии, Вы могли изменить массив ARGV и переменную ARGC accorgingly:
awk 'BEGIN{ ARGV[ARGC] = "your_file.txt" ; ARGC++} {print}'
escape
функция делает? – learner 13.11.2012, 12:32