Я не знаю, управляет ли инициирование поддержек Xfce в нажатии и выпуске кнопок, но я, кажется, вспоминаю, что FVWM2 поддерживает это. Используя один сценарий для запуска записи и другого сценария для остановки его, это должно быть полностью возможно. arecord
или parecord
должен смочь сделать фактическую запись.
Поскольку вы используете одно выражение sed
, все, что следует после w
(включая }
), интерпретируется как wfile имя :
Аргумент
wfile
завершает команду редактирования.
Вы можете увидеть, что если вы добавите вторую команду }
, например например:
sed -e '/my regex here/{w '"$file2"';d;}' -e '}' $file1
тогда строки, соответствующие моему регулярному выражению здесь
, будут сохранены в файле с именем something; d;}
где something
is any $ file1
расширяется до.
Правильный синтаксис - через отдельные команды, либо с несколькими выражениями:
sed -e '/my regex here/{w '"$file1" -e 'd' -e '}' $file2
, либо по одной команде на строку:
sed '/my regex here/{
w '"$file1"'
d
}
' $file2
Я нашел ответ на Stackoverflow в разделе "Как дать команде sed 'w' знать, где заканчивается имя файла? "
Как указал terdon, проблема не в переменной - но и фигурные скобки тут ни при чем; попробуйте sed '/^l/w testing;p'
и вы увидите, что он не выдает никакой ошибки, но записывает все строки, начинающиеся с l
в файл с именем testing;p
.
На самом деле проблема заключается в отсутствии новой строки после имени файла.
Поэтому ответ заключается в том, чтобы либо использовать встроенную новую строку в команде sed:
sed -i '/my regex here/{;w '"$file2"'
d;}' $file1
Или, что гораздо чище, использовать два отдельных аргумента -e
:
sed -i -e '/my regex here/{;w '"$file2" -e 'd;}' $file1
Если вам не нравятся две смежные кавычки (которые вы можете легко пропустить), просто поместите команду write в собственный аргумент:
sed -i -e '/^my regex here$/{' -e "w $file2" -e 'd;}' $file1