Печать файла по строкам при нажатии клавиши с помощью bash [duplicate]

Я не нашел, как я могу получить файл из Uri.

blockquote>

Нет файла. ACTION_OPEN_DOCUMENT и ACTION_GET_CONTENT не открывают файл. Они открывают документ. Этот документ может быть файлом. Возможно, это не так. Это Uri может указывать на:

  • Локальный файл на внешнем хранилище
  • Локальный файл на внутренней памяти для другого приложения
  • Локальный файл на съемном носителе
  • Локальный файл, который зашифрован и нуждается в расшифровке на лету
  • Поток байтов, хранящихся в столбце BLOB в базе данных
  • Часть содержимого, которое нужно загрузить другим приложением сначала
  • ... и т. д.

Как я могу получить реальную путь к файлу?

blockquote>

У вас нет.

Если вы хотите только принимать файлы, интегрируйте библиотеку выбора файлов вместо используя ACTION_OPEN_DOCUMENT или ACTION_GET_CONTENT.

Если вы используете ACTION_GET_CONTENT, а схема Uri, которую вы получаете, это file, тогда getPath() будет файловым путем.

В противном случае вам нужно понять, что вы не знаете, откуда документ выходит из , и перестать думать с точки зрения «реального пути к файлу». Используйте ContentResolver и openInputStream() или DocumentFile.fromSingleUri() или аналогичные методы для работы с Uri.

75
задан Stormie 22 August 2014 в 08:57
поделиться

5 ответов

Чтение с управляющего терминального устройства:

read input </dev/tty

дополнительная информация: http://compgroups.net/comp.unix.shell/Fixing-stdin-inside-a-redirected- петли [/ д2]

83
ответ дан dank 26 August 2018 в 12:23
поделиться

Попробуйте изменить петлю следующим образом:

for line in $(cat filename); do
    read input
    echo $input;
done

Единичный тест:

for line in $(cat /etc/passwd); do
    read input
    echo $input;
    echo "[$line]"
done
6
ответ дан dimba 26 August 2018 в 12:23
поделиться

Вы можете перенаправить стандартный stdin через модуль 3, чтобы сохранить его внутри конвейера:

{ cat notify-finished | while read line; do
    read -u 3 input
    echo "$input"
done; } 3<&0

Кстати, если вы действительно используете cat таким образом, замените его перенаправлением и все становится еще проще:

while read line; do
    read -u 3 input
    echo "$input"
done 3<&0 <notify-finished

Или вы можете поменять stdin и unit 3 в этой версии - прочитать файл с блоком 3 и просто оставить stdin в покое:

while read line <&3; do
    # read & use stdin normally inside the loop
    read input
    echo "$input"
done 3<notify-finished
46
ответ дан Gordon Davisson 26 August 2018 в 12:23
поделиться

Похоже, вы читаете дважды, чтение внутри цикла while не требуется. Кроме того, вам не нужно вызывать команду cat:

while read input
do
    echo $input
done < filename
5
ответ дан Hai Vu 26 August 2018 в 12:23
поделиться
echo "Enter the Programs you want to run:"
> ${PROGRAM_LIST}
while read PROGRAM_ENTRY
do
   if [ ! -s ${PROGRAM_ENTRY} ]
   then
      echo ${PROGRAM_ENTRY} >> ${PROGRAM_LIST}
   else
      break
   fi
done
-5
ответ дан tripleee 26 August 2018 в 12:23
поделиться
Другие вопросы по тегам:

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