Snap имеет несколько «ограничений». Самый популярный называется «строгим», что сильно ограничивает доступ приложения. Приложение должно явно запрашивать разрешение на доступ к пользовательским файлам, сетевому доступу или процессам. Эти приложения изолированы и поэтому более безопасны.
Тем не менее, некоторые приложения работают в «классическом» ограничении, которое позволяет получить доступ ко всем этим вещам и, следовательно, гораздо менее безопасны.
cp $item > mkdir $map+copy
Итак, >
перенаправляет вывод команды, часть, которая напечатана (, обычно на ваш терминал ). Например. ls
выводит список файлов, поэтому ls > list.txt
вместо этого выводит этот список в list.txt
. Но напр. cp foo bar
явно открывает файлы foo
и bar
, но ничего не выводит на терминал.
Таким образом, перенаправление здесь дает вам пустой файл с именем mkdir
, но остальная часть команды cp $list $map+copy
скопирует файл с именем $list
во все, что $map+copy
расширяется до (содержимого переменная $map
и фиксированная строка +copy
, объединенные вместе ).
С другой стороны, cat foo
открывает foo
и распечатывает его, и вы можете использовать cat foo > bar
, чтобы направить распечатку в файл с именем bar
. На самом деле почти то же самое, что и cp foo bar
, за исключением того, что cp
имеет опции, такие как -a
и -p
, чтобы также скопировать информацию о владельце и разрешениях.
А в оболочке вы можете объединять строки, просто прикрепляя их друг к другу (без пробелов между ними ). Итак, если вы установите переменные x=foo y=bar
, все они выведутfoobar
:
echo foobar
echo "foo""bar"
echo "$x$y"
echo "foo$y"
echo "${x}bar"
Это означает, что вы можете просто выполнить "${map}copy"
или "$map""copy"
, чтобы соединить две части.
Вам нужно запустить mkdir
отдельно от cp
, поэтому, если $map
содержит foobar
, а $item
равно hello.txt
, это создаст каталог foobarcopy
и скопирует hello.txt
в этот каталог:
mkdir -p "${map}copy"
cp "$item" "${map}copy"
(-p
указывает mkdir
не ошибаться, если каталог уже существует.)
См.:
по вопросам судебного приказа. (не )двойное -цитирование переменных.
Кроме того,вместо:
list=$( ls )
for item in $list; do
Оболочка может создавать список имен файлов без вызоваls
:
for item in./*; do
См.: