Bash меню, которое показывает команду в приглашении (без выполнения команды) - PullRequest
1 голос
/ 30 апреля 2020

Я хочу написать простой скрипт меню на bash. Вот что у меня сейчас:

#!/bin/bash
echo "************ MENU ************"
echo "  1)Show dir"
echo "  2)Current Dir"

read n
case $n in
  1) ls ;;
  2) pwd ;;
  *) echo "invalid option";;
esac

Этот скрипт работает, когда я нажимаю 1, он выполняет команду ls. Но то, что я хочу, это:

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

или возможно чтобы добавить какой-то пользовательский параметр, например, когда я нажимаю 1, я набираю имя папки, и скрипт выполняет ls с именем моей папки?

, в конце я хочу получить меню для exiftool:

#!/bin/bash
echo "************ MENU ************"
echo "  1)Basic rename"
echo "  2)Exif info"


read n
case $n in
  1) exiftool -d "%Y-%m-%d %H,%M,%S%%-c" '-filename<${DateTimeOriginal} $Make-$Model.%e' ;;
  2) exiftool  ;;
  *) echo "invalid option";;
esac

Поэтому, когда я нажимаю 1, я хочу вставить эту команду exiftool, не нажимая enter, чтобы я мог перетащить некоторые фотографии из поиска в мой терминал, и после этого я нажимаю enter, чтобы переименовать.

Oh Я работаю над мамой c, не уверен, что это важно.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я не думаю, что ваша стратегия хорошая, и вот вам предложение: вместо этого используйте этот скрипт:

#!/bin/bash

exiftool -d "%Y-%m-%d %H,%M,%S%%-c" '-filename<${DateTimeOriginal} $Make-$Model.%e' "$@"

Называйте как хотите (я назову это) banana) и используйте его так:

$ ./banana [and here paste/drop the files to process]

Я думаю, это будет намного чище, чем то, что вы пытаетесь сделать.

Возможно, вы захотите иметь больше чем одна команда exif с другими параметрами. Это не проблема: мы можем помочь вам решить это при необходимости.

Это будет лучше устаревшего дизайна «выбора меню», так как вы можете использовать этот сценарий в других сценариях или автоматизированных процессах. (Но вы не можете легко с дизайном меню).

0 голосов
/ 30 апреля 2020

При вводе read -n 1 нажатая клавиша немедленно передается в скрипт, не дожидаясь Enter . Добавление опции -s предотвращает отображение только что прочитанного символа.

Так что попробуйте:

#!/bin/bash

echo "************ MENU ************"
echo "  1) Show dir"
echo "  2) Current Dir"

read -n 1 -s n
case $n in
  1) ls ;;
  2) pwd ;;
  *) echo "invalid option";;
esac

Это работает как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...