имена файлов с ' in, (мы )возимся с моим скриптом

Есть несколько плагинов, которые пытаются это сделать, но я так и не нашел ни одного подходящего для себя. Если вы можете, я бы предложил использовать терминальный мультиплексор, например tmux(или screen ).

Таким образом, вы могли бы просто создать скрипт (сказатьpython-tmux)вот так

#!/bin/bash
tmux new-session -d 'vim'
tmux split-window -h 'python3'
tmux split-window -v
tmux attach-session -d

и запустите $ python-tmux, чтобы запустить среду. Вы можете добавить некоторые аргументы для открытия определенных файлов, каталогов и т. д.

the last bottom window is a bash screen which should show the output when commands in top left side window is executed

Я никогда не пробовал это, но я думаю, вы можете сопоставить клавишу в vim для запуска команды или отправки нажатий клавиш (, например.python )в указанном окне tmux в конкретном сеансе.

1
15.09.2020, 13:08
1 ответ

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

#!/bin/bash

## You don't define $jdir0 in your script, so I am assuming you
## do so earlier. I'm setting it to '/tmp' here.
jdir0="/tmp"

## Create a temp dir in $jdir0
tmpdir=$(mktemp -dp "$jdir0")

## Move all arguments passed to the script to the tmp dir,
## this way you don't need to specify $1, $2 etc. The -- ensures
## this will work even if your file names start with '-'.
mv -- "$@" "$tmpdir"/


## Get the largest file's name. Assume GNU find; deal with arbitrary file names,
## including those with spaces, quotes, globbing characters or newlines
IFS= read -r -d '' jfilenameall < <(find "$tmpdir" -maxdepth 1 -type f \
                                        -printf '%s\t%p\0' | sort -zn |
                                        tail -zn1 | cut -f 2-)

## Assume GNU find; deal with arbitrary file names, including those with
## spaces, quotes, globbing characters or newlines
jfilenameall="$(basename "$jfilenameall")"

## Get the extension: whatever comes after the last. in the file name. You don't
## use this anywhere, but maybe you just don't show it. If the file has no extension,
## this variable will be set to the entire file name.
jfilenameextension="${jfilenameall##*.}"

## get the file name without the extension. Don't assume an extension will always be 3 chars
jfilename="${jfilenameall%.*}"

## You don't define $jdir0 in your script. I am assuming you do so earlier
mkdir -p "$jdir0/$jfilename"
mv -- "$tmpdir/"* "$jdir0/$jfilename/"

## remove the now empty tmp dir
rmdir "$tmpdir"
1
18.03.2021, 23:04

Теги

Похожие вопросы