(Сценарии наутилуса) $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; имейте проблемы с пространством

Таким образом, сценарий:

#!/bin/bash

for line in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
   if [[ "$line" = "" || "$line" = " " ]]; then
      exit
   else
      unzip "$line" -d "temp"
   fi
done

Это работает хорошо и разархивировало файл. Но если файл называют с пространством (например: Leon - 1994.zip), это не будет работать и $line будет

В 1-й раз:/home/citybong/Downloads/Leon

В 2-й раз: -

В 3-й раз: 1994.zip

Править: Я шрифт ссылка http://g-scripts.sourceforge.net/faq.php для вопроса: "Мой сценарий не может обработать несколько файлов/файлов с пробелами", но я - вид новичка для избиения сценариев, и я не могу понять их решения

5
задан 14 January 2013 в 18:40

4 ответа

IFS по умолчанию установлен на пробел, поэтому ваша строка делится на пробелы. Просто установите его на новую строку со следующим кодом:

IFS_BAK=$IFS
IFS="
"

for line in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
    whatever $line
done

IFS=$IFS_BAK
0
ответ дан 14 January 2013 в 18:40

Использование $@ вместо $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS в скриптах Nautilus может решить проблему с новыми разделителями строк (которые используются в качестве разделителей в $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS и $NAUTILUS_SCRIPT_SELECTED_URIS).

Итак, код будет выглядеть так:

#!/bin/bash

for line in "$@"; do
   if [[ "$line" = "" || "$line" = " " ]]; then
      exit
   else
      unzip "$line" -d "temp"
   fi
done

Кроме того, это удобно, когда нам нужно просто передать выделение другому приложению:

#!/bin/sh

baobab "$@"
0
ответ дан 14 January 2013 в 18:40

Вам не нужно связываться с IFS:

echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read filename; do
    unzip "$filename" -d temp
done

У меня была похожая проблема, и оказалось, что эхо сохраняет символы новой строки в двойных кавычках, но без кавычек превращает их в пробелы.

0
ответ дан 14 January 2013 в 18:40

Положите одинарные кавычки вокруг имени переменной, например:

#!/bin/bash

for line in '$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'; do
   if [[ "$line" = "" || "$line" = " " ]]; then
      exit
   else
      unzip "$line" -d "temp"
   fi
done
0
ответ дан 14 January 2013 в 18:40

Другие вопросы по тегам:

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