подстановка команд, но без разбиения выходных данных на несколько аргументов
-
20-09-2019 - |
Вопрос
Есть ли способ выполнить подстановку команд в оболочке BASH, не разбивая вывод на несколько аргументов?
Я копирую путь к некоторому каталогу (из строки расположения в браузере файлов с графическим интерфейсом) в буфер обмена, а затем выполняю следующую команду, где команда xsel возвращает содержимое буфера обмена, которое в данном случае является путем к каталогу:
cd `xsel`
Но некоторые пути содержат пробелы или могут даже содержать некоторые специальные символы, используемые BASH.
Как я могу передать выходные данные команды в виде одного аргумента и без того, чтобы BASH не путался со специальными символами?
Решение
cd "$(xsel)"
кажется, обрабатывает все специальные символы (включая $ и пробелы).
Моя тестовая строка была boo*;cd.*($\: $_
$ mkdir "$(xsel)"
$ ls
boo*;cd.*($\: $_
$ file boo\*\;cd.\*\(\$\\\:\ \$_/
boo*;cd.*($\: $_/: directory
$ cd "$(xsel)"
$ pwd
/tmp/boo*;cd.*($\: $_
Другие советы
Вы пробовали:
cd "`xsel`"
Это должно выполнить задание, если только у вас нет долларов ($) или обратных косых черт (\) на вашем пути.
Если вы не делаете это программно, большинство терминалы в Linux позволяют вставлять файлы из буфера обмена средним щелчком мыши.Конечно, вам все равно нужно будет ставить кавычки до и после вставки, как предлагает @dave.