Tmux ведет себя иначе, и C -a + C -a печатает «^A» вместо перехода к началу строки

Нет, вам не нужно передавать список имен файлов.

var1=$1

find. -maxdepth 1 -type f -name '*.png' -exec sh -c '
    var1=$1; first=$2; shift 2
    convert "$first" "$@" -evaluate-sequence "$var1"../out2/"$first"' sh "$var1" {} +

То есть дайте внутреннюю дочернюю оболочку $var1в качестве первого аргумента (нулевой аргумент должен быть именем оболочки ).

Внутренняя оболочка удаляет $var1из списка параметров, а также делает то же самое для первого имени пути, которое findнаходит (Я не знаю почему, но это, по крайней мере, делает его эквивалентным тому, что я поверьте, ваш код делает ), а затем смещает их с $@с помощью shift 2.

Если вам нужно сделать это партиями ровно по 100:

var1=$1

find. -maxdepth 1 -type f -name '*.png' -print0 |
xargs -0 -n 100 sh -c '
    var1=$1; first=$2; shift 2
    convert "$first" "$@" -evaluate-sequence "$var1"../out2/"$first"' sh "$var1"

Причина, по которой это безопаснее, чем конвейерная передача вывода ls, заключается в том, что пути передаются как список с нулевым -завершением, а не как список с символом новой строки -. Сценарий shодинаков в обоих вариантах и ​​принимает $var1в качестве аргумента командной строки.

Причина, по которой ваш код не работает, заключается в том, что оболочка sh -cне знает $var1своей родительской оболочки.

Связанные:

1
11.08.2020, 17:00
1 ответ

В tmux, Ctrl + A для перехода к началу строки применяется только в режиме «копирования». Пока не в режиме «команда» или «копирование», положение курсора контролируется оболочкой или программой текущей панели, а не tmux.

Итак, вам нужно сначала войти в режим «копирования», а затем нажать Ctrl + A для начала строки. Для ключей по умолчанию это будет:

Ctrl + A
[
Ctrl + A

Вам это подходит?

0
18.03.2021, 23:15

Теги

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