[Debian 10.0.0 Buster + GNOME]
Я вижу такое же неадекватное поведение при использовании команды «открыть с помощью», как вы описываете.
Выберите любой файл с интересующим MIMETYPE , затем -щелкните правой кнопкой мыши -> Свойства.
Выберите вкладку «Открыть с помощью».
Там вы должны увидеть кнопку Установить по умолчанию .
Ваше понимание неверно. Когда вы сохраняете содержимое "hello\nworld"
в переменной, \n
интерпретируется буквально. Только если вы вызываете такие инструменты, как printf
или echo
с флагом -e
, они расширяют эти последовательности обратной косой черты при выводе на консоль.
В вашем случае вы хотите передать переменную в среду с расширенным символом новой строки, предложите использовать для этого кавычки в стиле ANSI C в bash
env FOO=$'hello\nworld' ruby -e 'puts ENV["FOO"]'
Или, если переносимость является проблемой, тривиальное решение состоит в том, чтобы поместить эти новые строки там, где вы хотите
f="hello
world"
env FOO="$f" ruby -e 'puts ENV["FOO"]'
GNU и FreeBSDenv
имеют опцию-S
("split" )[1], которая разбивает аргумент на пробелы, а затем интерпретирует множество escape-символов в результирующих строках, включая но не ограничивается\n
:
$ env -S 'foo=bar\nquux printenv foo'
bar
quux
$ env -S 'foo=bar\nquux' printenv foo
bar
quux
[1] его основное использование для #!...
строк shebang, но его можно использовать и в других местах, где ожидается командная строка, однако для его интерпретации используется специальный -синтаксический анализатор, а не оболочка, например -e
для большинства терминалов на базе vte -.
Использовать символ новой строки в значении:
$ env FOO="hello
world" ruby -e 'puts ENV["FOO"]'
Выход:
hello
world
Если у вас есть строка с \n
, которую вы хотите преобразовать в настоящую новую строку, используйте такую утилиту, как printf
,как и везде:
$ env FOO="$(printf "%b" 'hello\nworld')" ruby -e 'puts ENV["FOO"]'
hello
world
env
не является чем-то особенным в этом отношении (на самом деле, env
всегда видит только настоящую новую строку, потому что она расширяется до запуска процесса ).