2012-06-05 12 views
0

Я ищу некоторые псевдонимы, чтобы быстро сохранить текущий каталог, чтобы его можно было открыть позже.Bash избегать интерпретации имени файла

ALIAS cdo='pwd|sed 's/ /\ /g' > ~/.cdo' 
AIIAS cdn='cd "$(cat ~/.cdo)"' 

Команда sed, очевидно, имеет дело с пробелами.

Однако у меня все еще есть любопытная проблема, которую я не могу исправить, которая должна включать переменную интерпретацию.

[email protected]:~# cd Hello\ World/ 
[email protected]:~/Hello World# pwd|sed 's/ /\\ /g' > ~/.cdo 
[email protected]:~/Hello World# cat ~/.cdo 
/home/jk/Hello\ World 
[email protected]:~/Hello World# cd .. 
[email protected]:~# cd "$(cat ~/.cdo)" 
bash: cd: /home/jk/Hello\ World: No such file or directory 
+0

См. Http://mywiki.wooledge.org/BashFAQ/050, чтобы понять, почему происходит это поведение: Замещенная замена переменных (это правильная вещь для использования!) Не обрабатывает экраны и не должна. –

+0

Гораздо лучше решить эту проблему с помощью команд '' pushd, popd' (http://cli.learncodethehardway.org/book/cli-crash-coursech8.html) и 'dirs', доступных во всех вариантах Unix. – anubhava

+0

Проверьте acd_func.sh - расширяет компакт-диск bash, чтобы сохранить, отобразить и получить доступ к истории посещенных имен каталогов по адресу http://geocities.com/h2428/petar/acd_func.htm – Tom

ответ

2

Похоже, что вы удваиваете маскировку.

Одним из способов обработки пространства, чтобы замаскировать их по отдельности с помощью обратной косой черты:

cd here\ I\ go 

или маскировать все из них с двойными кавычками:

cd "here I go" 

в то время как это было разрешено, а также:

cd here" I "go 

Однако, смешивая их означает, что вы хотите, в буквальном смысле обратной косой черты:

cd "here\ I\ go" 

и все, что происходит.

Обратите внимание, что, хотя они не очень распространены, вкладки и новые строки могут быть включены в файлы. Маскировка их работает одинаково, но чтение их из файла может быть разным, и несколько пробелов часто сжимаются оболочкой до одного.

1

Вы должны бежать с \, если имя файла не между " и "

Убегая с cdo, но не с помощью " в КДС

ALIAS cdo='pwd|sed 's/ /\ /g' > ~/.cdo' 
AIIAS cdn='cd $(cat ~/.cdo)' 

Не избежать и с помощью "" (I думаю, что это лучше)

ALIAS cdo='pwd > ~/.cdo' 
AIIAS cdn='cd "$(cat ~/.cdo)"' 
+0

Проблема, скорее, в том, что он * t * выполнить ручное экранирование в содержимом, которое не будет анализироваться. Тогда ваш второй пример правилен, но объяснение вводит в заблуждение. –

Смежные вопросы