Таким образом, сценарий:
#!/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 для вопроса: "Мой сценарий не может обработать несколько файлов/файлов с пробелами", но я - вид новичка для избиения сценариев, и я не могу понять их решения
IFS по умолчанию установлен на пробел, поэтому ваша строка делится на пробелы. Просто установите его на новую строку со следующим кодом:
IFS_BAK=$IFS
IFS="
"
for line in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
whatever $line
done
IFS=$IFS_BAK
Использование $@
вместо $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 "$@"
Вам не нужно связываться с IFS:
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read filename; do
unzip "$filename" -d temp
done
У меня была похожая проблема, и оказалось, что эхо сохраняет символы новой строки в двойных кавычках, но без кавычек превращает их в пробелы.
Положите одинарные кавычки вокруг имени переменной, например:
#!/bin/bash
for line in '$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'; do
if [[ "$line" = "" || "$line" = " " ]]; then
exit
else
unzip "$line" -d "temp"
fi
done