2015-07-02 4 views
1

У меня есть один текстовый файл в Windows, который содержит много каталогов, которые мне нужно извлечь. Я попытался извлечь один каталог и попробовал cd ему в сценарии оболочки, но команда cd потерпела неудачу, предложив cd: /VAR/GPIO/: No such file or directory.Команда cd не работает, когда каталог извлекается из файла Windows

Я подтвердил, что каталог существует на моем локальном ПК, и каталог правильный (хотя он относительный). Я также много искал, кажется, что некоторые специальные символы Windows существуют в файле экстракта. Я пытался увидеть их cat -A check и результат ^[[m^[[K^[[m^[[KVAR/GPIO/$

Я даже не знаю, что смысл m^ или [[K. Не могли бы вы помочь мне в решении этой проблемы? Я использую Cygwin в Windows 7 64-бит. Ниже мой родственный код для проверки:

templt_dir=$(cat temp | grep -m 1 "$templt_name" |head -1 | sed -n "s#$templt_name##p" | sed -n "s#\".*##p") 
echo $templt_dir  ###comment, it runs output: /VAR/GPIO/, that's correct! 
cd $templt_dir  ###comment, cd error prompts 
cat temp | grep -m 1 "$templt_name" |head -1 | sed -n "s#$templt_name##p" | sed -n "s#\".*##p" > check ###comment, for problem checking 

Ниже приводится содержание check файла:

$ cat -A check 
^[[m^[[K^[[m^[[KVAR/GPIO/$ 

Чтобы подтвердить мой каталог правильно, ниже результаты ls -l на /VAR:

$ ls VAR -l 
total 80K 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:11 Analog/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:37 Communication/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:10 GPIO/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:11 HumanInterface/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:11 Memory/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:11 PWM/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:10 Security/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:11 System/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 25 16:25 Timers/ 
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 11:10 UniversalDevice/ 
+0

Вы написали программу для этого? Если да, пожалуйста, покажите код. – wallyk

+0

Привет, wallyk, я новый пользователь stackoverflow, я не могу прикрепить изображение. Я вставлю свой код в обновленное сообщение, пожалуйста, помогите разобраться, спасибо! – cmjauto

+2

Вам не нужно загружать изображения. Измените свой вопрос и скопируйте и вставьте код в вопрос.Затем выберите код и введите Ctrl-K, чтобы форматировать его как код. – wallyk

ответ

1

Сообщение об ошибке cd: /VAR/GPIO/: No such file or directory указывает, что имя хранится в $templt_dir не существует.

Это на самом деле связано с строкой, содержащей непечати ANSI escape sequences. Вам нужно удалить эти символы из строки, содержащей каталог.

Я нашел следующий патч в замене из this Unix and Linux answer

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" 

, которые вы должны включить в команду трубы:

templt_dir=$(grep -m 1 "$templt_name" temp | sed -n "s#$templt_name##p; s#\".*##p" | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g") 

Примечание: Я сцепляются ваши два sed замены в одной команде и Я удалил ненужный cat. Я также удалил избыточный head -1, так как должен выводить только одну строку. Вероятно, вы можете объединить все подстановки sed в один: sed -r "s#$templt_name##; s#\".*##; s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" (опция -n sed и команда sed p могут быть опущены, если есть только обрабатываемая строка, но я не могу проверить это без наличия исходного файла).

Другие способы использования sed для удаления управляющих последовательностей ANSI указаны в Remove color codes (special characters) with sed.

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

+0

Привет @Anthony Geoghegan, спасибо, это работает! Для другого вы упомянули, что основной причиной этой проблемы является то, что исходные файлы исходных окон, да, однако, мне приходится иметь дело с этими файлами в окон. Спасибо за ваше время и большую помощь, искренне! – cmjauto

+0

@cmjauto Рад помочь. Это была сложная проблема, но вы отредактировали свой вопрос, чтобы он был хорош и заслуживает продолжения. Добро пожаловать в переполнение стека! BTW, я обновил свой ответ, чтобы включить дальнейшие предложения по улучшению вашей команды на трубе. –

+0

Hi @Anthony Geoghegan, большое спасибо за вашу помощь и совет! да, я новичок в скрипте оболочки :) Я буду продолжать работу с оболочкой,^_ ^ – cmjauto