LINUX.ORG.RU

Как задать export EDITOR= так, чтобы редактируемый файл засунуть в середину команды?

 , , , ,


0

1

Я установил в качестве редактора по-умолчанию KWrite:

export EDITOR=kwrite

Проблема в том, что при открытии файла на редактирование, редактор сыпет в консоль всяким непотребством:
"0 instead of 1 arguments to message {Развернуть блоки %1-...} supplied before conversion."
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/16x16/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/22x22/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/24x24/filesystems/"
Invalid Context= "Filesytems" line for icon theme:  "/usr/share/icons/nuoveXT2/32x32/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/48x48/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/64x64/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/72x72/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/96x96/filesystems/"
Invalid Context= "Filesystems" line for icon theme:  "/usr/share/icons/nuoveXT2/128x128/filesystems/"
Invalid Context= "Stxatus" line for icon theme:  "/usr/share/icons/nuoveXT2/128x128/status/"
Icon theme "nuoveXT-1.6" not found.
Icon theme "Tango" not found.
Icon theme "crystalsvg" not found.

Creating the cache for:  "/misc/codeSample/ApplicationDestroyHandle/NativeHelper.java"
Already in database?  false
      First update :  QDateTime(2018-08-21 11:11:20.000 MSK Qt::TimeSpec(LocalTime))
       Last update :  QDateTime(2018-08-21 11:11:20.000 MSK Qt::TimeSpec(LocalTime))
After the adjustment
     Current score :  0
      First update :  QDateTime(2018-08-21 11:11:20.942 MSK Qt::TimeSpec(LocalTime))
       Last update :  QDateTime(2018-08-21 11:11:20.000 MSK Qt::TimeSpec(LocalTime))
         New score :  0

Config timer connecting...
Setting the name of  0x55887bb115e0  to  "org.kde.ActivityManager.ActivityTemplates"
Setting the name of  0x55887bb056f0  to  "org.kde.ActivityManager.RunApplication"
Setting the name of  0x55887bcc9200  to  "org.kde.ActivityManager.Resources.Scoring"
Creating directory:  "/home/xi/.local/share/kactivitymanagerd/resources/"
KActivities: Database connection:  "kactivities_db_resources_139653960988864_readwrite" 
    query_only:          QVariant(qlonglong, 0) 
    journal_mode:        QVariant(QString, "wal") 
    wal_autocheckpoint:  QVariant(qlonglong, 100) 
    synchronous:         QVariant(qlonglong, 1)
Service started, version: 7.0.0
Cleaning up...

Я хотел бы скрыть это дело путем отключения команды kwrite от терминала и перенаправления стандартного потока и потока ошибок в /dev/null. Вот, например, как я это делаю для smplayer в конфиге MidnightCommander:
(smplayer %f 1> /dev/null 2>&1 &)

Проблема в том, что я не знаю, как в переменной EDITOR указывать место, куда должен подставляться редактируемый файл.

Вопрос: есть ли способ задать в EDITOR подобную команду с указанием места, где должно быть прописано имя открываемого файла?

★★★★★

export EDITOR='kwrite 1> /dev/null 2>&1'

Должно работать, перенаправление не обязано быть в конце команды.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от xaizek

export EDITOR='kwrite 1> /dev/null 2>&1'

Нет, так все равно сообщения редактора в консоль сыпятся, проверил даже с перевходом в систему.

Видимо, нужно таки отрывать редактор от консоли, но вот такая конструкция не работает:

export EDITOR='(kwrite 1> /dev/null 2>&1 &)'

Xintrea ★★★★★
() автор топика

написать скрипт, который засовывает в середину команды.

засунуть скрипт в EDITOR=

[/thread]

PexuOne
()
Ответ на: комментарий от Xintrea

Странно. Скрипт должен сработать, но можно попробовать извратиться вроде:

export EDITOR='function f() { kwrite 1> /dev/null 2>&1 "$1" &; }; f'

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Смотри, не работает даже такая конструкция:

export EDITOR='function f() { kwrite "$1" }; f'

Редактор не вызывается.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

t.bash <<< EOF [bash] #!/bin/bash

kwrite $@ (или как там передать сразу всё) > /dev/null 2> /dev/null

# важно вернуть код завершения kwrite

[/bash] EOF

export EDITOR=t.bash export VISUAL=t.bash

PexuOne
()
Ответ на: комментарий от PexuOne

С твоей конструкцией, прописаной в ~/.bashrc, даже терминал с ошибкой открывается:

bash: t.bash: команда не найдена
bash: EOF: команда не найдена

Ты несешь пургу из головы, даже не проверяя свои действия.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Deleted

[cmd=bash] cmd0 args0 2>log0 | cmd1 args1 2>log1 | cmd2 args2 2>log2 [/cmd]

по рекомендуемым примерам bash. перед командой принято устанавливать только переменные среды.

- всё остальное не конвент

PexuOne
()
Ответ на: комментарий от Xintrea

я в bash уже 10 лет не кодил. включи мышление и исправь синтаксис. тебе просто нужно заключить kwrite в скрпт, передать ему все те же параметры что скрипт получил сам, заземлить выхлопы и вернуть код завершения kwrite

PexuOne
()
Ответ на: комментарий от PexuOne

Не вижу разницы.

$ 2>/tmp/ls.err ls fail | 2>/tmp/cat.err cat fail | wc ; grep -H . /tmp/*.err
      0       0       0
/tmp/cat.err:cat: fail: No such file or directory
/tmp/ls.err:ls: cannot access 'fail': No such file or directory

по рекомендуемым примерам bash. перед командой принято устанавливать только переменные среды. - всё остальное не конвент

А вот тут хотелось бы увидеть пруф на этот самый конвент.

Deleted
()
Ответ на: комментарий от Xintrea

Значит оно не стартует оболочку, а пытается выполнить как команду. В общем со скриптом будет проще, там только аргументы развернуть и всё.

#!/bin/bash

exec kwrite "$@" > /dev/null 2> /dev/null
xaizek ★★★★★
()
Ответ на: комментарий от PexuOne

исправь синтаксис. тебе просто нужно заключить kwrite в скрпт, передать ему все те же параметры что скрипт получил сам, заземлить выхлопы и вернуть код завершения kwrite

Если бы я знал как все это делать, я бы тему не создавал. А твои измышления только загаживают её недостоверной информацией.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от xaizek

Ага, так получилось. Готовый рецепт:

Делаем запускаемый файл скрипта, например /opt/script/editorRun.sh

Его содержимое:

#!/bin/bash
exec kwrite "$@" > /dev/null 2> /dev/null

В файле ~/.bashrc пишем:
export EDITOR=/opt/script/editorRun.sh

После этого kwrite будет открываться без консольного мусора.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от PexuOne

Пожалуйста, хватит советовать по башу, если так долго с ним не работали. exec уберёт лишний процесс и не навредит, а кавычки вокруг $@ развернутся в «$1» «$2» и т.д., именно так правильно раскрывать массивы в отдельные аргументы.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

а кавычки вокруг $@ развернутся в «$1» «$2» и т.д

да вы что?

Пожалуйста

Пожалуйста, выложите пароль в Linux-org-ru, всеравно вы ничего кроме правильного оформления LORCODE не умеете

PexuOne
()
Ответ на: комментарий от xaizek

exec уберёт лишний процесс и не навредит

а если какой-то админ, вроде тебя, запустит такой скрипт через source?

PexuOne
()
Ответ на: комментарий от PexuOne

а кавычки вокруг $@ развернутся в «$1» «$2» и т.д

да вы что?

проверил: да, действительно.. я уже и забыл какой этот bash хреновый.. как хорошо что я с него ушёл.. надо же, кавычки сами раскрываются.. больная фантазия чья-то..

PexuOne
()
Ответ на: комментарий от Xwo

Давно уже пора понять, что поиск в гугле таргетирован на пользователя по таким закономерностям, по каким сам гугол не знает.

У меня вот такая ссылка:

http://kde.6490.n7.nabble.com/qtatspi-and-kwrite-td1668210.html

Предлагаете запускать KWrite в GTK-стиле?

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.