2009-09-01 6 views
2

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

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

cd `xsel` 

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

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

ответ

5
cd "$(xsel)" 

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

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

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

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

$ cd "$(xsel)" 
$ pwd 
/tmp/boo*;cd.*($\: $_ 
2

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

cd "`xsel`" 

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

+0

Я не думаю, что это важно, есть ли вы мета-символы в строке, как только вы завернули 'xsel' в двойных кавычках –

+0

Bash будет интерпретировать очень небольшое количество метасимволов внутри двойных кавычек. Только одинарные кавычки останавливают всю интерпретацию. – dave

0

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

+0

Если каталог /яйцо/спам/коренастый бекон/моя музыка и если я типа компакт-диск и вставьте путь, это кд/яйцо/спам/коренастый бекон/моя музыка , который будет кд в/яйцо/спам/коренастый. – Yoo