Как добавить номер строки для вывода, запросить строку, а затем действовать на основе ввода?
Я написал shell-скрипт такой:
#! /bin/sh
...
ls | grep "android"
...
и выход:
android1
android2
xx_android
...
Я хочу добавить в каждый файл, как это:
1 android1
2 android2
3 XX_android
...
please choose your dir number:
а затем дождитесь ввода пользователем номера строки x, скрипт считывает номер строки обратно, а затем обрабатывает соответствующий dir. Как мы можем сделать это в раковину ? Спасибо !
6 ответов:
вместо реализации взаимодействия, можно использовать встроенную команду
select
.select d in $(find . -type d -name '*android*'); do if [ -n "$d" ]; then # put your command here echo "$d selected" fi done
Если вы передаете результат в
cat
можно использовать-n
возможность пронумеровать каждую строку следующим образом:ls | grep "android" | cat -n
передать
-n
доgrep
следующим образом:ls | grep -n "android"
С
grep
man-page:-n, --line-number Prefix each line of output with the line number within its input file.
это работает для меня:
line-number=$(ls | grep -n "android" | cut -d: -f 1)
Я использую это в скрипте для удаления разделов моей карты сайта.xml, который я не хочу, чтобы Googlebot сканировал. Я ищу URL (который является уникальным), а затем найти номер строки, используя выше. Используя простую математику, скрипт затем вычисляет диапазон чисел, необходимых для удаления всей записи в XML-файле.
Я согласен с jweyrich относительно обновления вашего вопроса, чтобы получить лучшие ответы.
другие ответы на этой странице на самом деле не ответить на вопрос 100%. Они не показывают, как позволить пользователю интерактивно выбрать файл из другого скрипта.
следующий подход позволит вам сделать это, как видно из примера. Обратите внимание, что
select_from_list
скрипт был остановлен из этого сообщения stackoverflow$ ls android1 android4 android7 mac2 mac5 android2 android5 demo.sh mac3 mac6 android3 android6 mac1 mac4 mac7 $ ./demo.sh 1) android1 3) android3 5) android5 7) android7 2) android2 4) android4 6) android6 8) Quit Please select an item: 3 Contents of file selected by user: 2.3 Android 1.5 Cupcake (API 3)
здесь
demo.sh
и скрипт он использует для выбора элемента из списка,select_from_list.sh
demo.sh
#!/usr/bin/env bash # Ask the user to pick a file, and # cat the file contents if they select a file. OUTPUT=$(\ls | grep android | select_from_list.sh | xargs cat) STATUS=$? # Check if user selected something if [ $STATUS == 0 ] then echo "Contents of file selected by user: $OUTPUT" else echo "Cancelled!" fi
select_from_list.sh
#!/usr/bin/env bash prompt="Please select an item:" options=() if [ -z "" ] then # Get options from PIPE input=$(cat /dev/stdin) while read -r line; do options+=("$line") done <<< "$input" else # Get options from command line for var in "$@" do options+=("$var") done fi # Close stdin 0<&- # open /dev/tty as stdin exec 0</dev/tty PS3="$prompt " select opt in "${options[@]}" "Quit" ; do if (( REPLY == 1 + ${#options[@]} )) ; then exit 1 elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then break else echo "Invalid option. Try another one." fi done echo $opt