подстановка команд, но без разбивки вывода на несколько аргументов - PullRequest
2 голосов
/ 01 сентября 2009

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

Я копирую путь некоторого каталога (из строки адреса в браузере файлов GUI) в буфер обмена, а затем выполняю следующую команду, где команда xsel возвращает содержимое буфера обмена, которое в данном случае является путем к каталогу:

cd `xsel`

Но некоторые пути содержат пробелы или даже могут содержать некоторые специальные символы, используемые BASH.

Как я могу передать вывод команды в виде одного аргумента и без BASH-сообщений со специальными символами?

Ответы [ 3 ]

5 голосов
/ 01 сентября 2009
cd "$(xsel)"

, кажется, обрабатывает все специальные символы (включая $ и пробелы).

Моя тестовая строка была boo*;cd.*($\: $_

$ mkdir "$(xsel)"
$ ls
boo*;cd.*($\: $_

$ file boo\*\;cd.\*\(\$\\\:\ \$_/
boo*;cd.*($\: $_/: directory

$ cd "$(xsel)"
$ pwd
/tmp/boo*;cd.*($\: $_
2 голосов
/ 01 сентября 2009

Вы пробовали:

cd "`xsel`"

Это должно сработать, если на вашем пути нет долларов ($) или обратной косой черты (\).

0 голосов
/ 01 сентября 2009

Если вы не делаете это программно, большинство терминалов в Linux позволяют вставлять из буфера обмена с помощью щелчка средней кнопкой мыши. Конечно, вам все равно придется ставить кавычки до и после вставки, как предлагает @dave.

...