подстановка команд, но без разбиения выходных данных на несколько аргументов

StackOverflow https://stackoverflow.com/questions/1361798

Вопрос

Есть ли способ выполнить подстановку команд в оболочке 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top