Команда оболочки в screenrc
Я пытаюсь улучшить свое экранное программное обеспечение, поэтому у меня будет много вопросов, потому что есть много ответов, которые мне трудно найти в Интернете... В любом случае, этот вопрос о команде оболочки, которую я бы хотел, чтобы экран выполнить при открытии, и это не...
на новом сеансе экрана я спрашиваю экран, чтобы открыть несколько окон и назвать их и открыть файл в каждом из них, а затем разделить по вертикали и открыть для новых пустых окон:
screen -t name1 vim /path/to/folder/file1.txt
screen -t name2 vim /path/to/folder/file2.txt
screen -t name3 vim /path/to/folder/file3.txt
screen -t name4 vim /path/to/folder/file4.txt
split -v
focus
screen
focus
screen
но эти файлы, как обычно, создают скрытые файлы.file.txt.swp и.file.txt.swo, поэтому, когда мой компьютер выключается и файлы не закрываются должным образом, когда я снова открываю экран, он спрашивает, что мне делать с. SW * файлы... Я хотел бы сначала запустить эту команду rm /path/to/folder/.*.sw*
поэтому он не запрашивает действие при открытии (".file.txt.swp уже существует! [O]open, [E]dit в любом случае, [R]ecover, [Q]uit, [A]bandoned")
В оболочке rm path/to/folder/.*.sw*
удаляет все файлы подкачки, как и предполагалось, но я не могу заставить его работать в.screenrc
Это не работает:
rm /path/to/folder/.*.sw*
screen -t name1 vim /path/to/folder/file1.txt
screen -t name2 vim /path/to/folder/file2.txt
screen -t name3 vim /path/to/folder/file3.txt
screen -t name4 vim /path/to/folder/file4.txt
split -v
focus
screen
focus
screen
и не делает этого:
exec rm /path/to/folder/.*.sw*
...
ни это
eval 'rm /path/to/folder/.*.sw*'
...
или даже это:
stuff rm /path/to/folder/.*.sw*
...
и много других "слепых" попыток...
Ну я понятия не имею что я делаю: p
2 ответа
В вашем .screenrc
, screen
Команда принимает строку, которую она оценивает сама, а не передает ее в оболочку. Таким образом, вы не можете объединить несколько команд так легко... Например, строку конфигурации, подобную этой:
screen -t test1 touch foo; touch bar
приведет к троганию трех файлов - foo;
, touch
а также bar
,:)
Вместо этого вы можете запустить интерпретатор оболочки для запуска нескольких команд, в том числе vim
:
screen -t name1 sh -c 'rm /path/to/my/.file1.sw*; vim /path/to/my/file1.txt'
Опции, переданные sh
Команда будет интерпретирована правильно, потому что на экране все они только одна опция.
Если вы действительно планируете это сделать, вы можете столкнуться с name2
а также name3
etc будет генерировать файлы подкачки одновременно с их удалением в другом окне, поэтому вы можете сделать это:
screen -t name1 sh -c 'rm /path/to/my/.file1.sw*; vim /path/to/my/file1.txt'
screen -t name2 sh -c 'sleep 1; vim /path/to/my/file2.txt'
screen -t name3 sh -c 'sleep 1; vim /path/to/my/file3.txt'
screen -t name4 sh -c 'sleep 1; vim /path/to/my/file4.txt'
Обратите внимание, что другой альтернативой может быть рассказать vim
не создавать файлы подкачки вообще. В целом, вы можете сделать это с:
:set noswapfile
Чтобы поместить это в вашу командную строку (вместо того, чтобы сделать его по умолчанию для всех ваших vim
экземпляры), вы можете использовать Vim's -n
опция, которая заставляет vim открывать файлы без подкачки:
screen -t name1 vim -n /path/to/my/file1.txt
screen -t name2 vim -n /path/to/my/file2.txt
screen -t name3 vim -n /path/to/my/file3.txt
screen -t name4 vim -n /path/to/my/file4.txt
В результате, конечно, несохраненные изменения в ваших четырех файлах будут потеряны.
Еще одним вариантом может быть перемещение ваших временных файлов в другое место. Например, если вы используете tmpfs
/shmfs
и ваш каталог /tmp пуст при каждой перезагрузке, вы можете использовать:
screen -t name1 vim --cmd 'set dir=/tmp' /path/to/my/file1.txt
screen -t name2 vim --cmd 'set dir=/tmp' /path/to/my/file2.txt
screen -t name3 vim --cmd 'set dir=/tmp' /path/to/my/file3.txt
screen -t name4 vim --cmd 'set dir=/tmp' /path/to/my/file4.txt
Тогда вы все еще можете восстановить файл, если vim
Экземпляр уничтожен по какой-то другой причине, кроме выключения сервера.
Когда ".file.swp уже существует! [O] открыто, [E] все равно dit, [R]ecover, [Q]uit, [A]bandoned", вам больше повезет, удалив ".file.swp", чем когда вы пытаетесь удалить "file.swp", не так ли?
Разве вы не заметили DOT?