bash - cd command fails when directory is extracted from windows file -
i have 1 text file in windows contains lots of directories need extract. tried extract 1 directory , tried cd
in shell script, cd
command failed, prompting cd: /var/gpio/: no such file or directory
.
i have confirmed directory exists in local pc , directory correct (though relative). have searched lot, seems special windows characters exist in extract file. tried see them cat -a check
, result ^[[m^[[k^[[m^[[kvar/gpio/$
i don't know meaning of m^
or [[k
. please me problem? use cygwin in windows 7 64-bit. below related code review:
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, 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, problem checking
below content of check
file:
$ cat -a check ^[[m^[[k^[[m^[[kvar/gpio/$
to confirm directory correct, below results of ls -l
on /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/
the error message cd: /var/gpio/: no such file or directory
indicates name stored in $templt_dir
doesn’t exist.
this due string containing non-printing ansi escape sequences. need remove these characters string containing directory.
i found following sed substitution this unix , linux answer
sed -r "s/\x1b\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|k]//g"
which should include in pipe command:
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")
note: concatenated 2 sed
substitutions 1 command , removed unnecessary cat
. removed redundant head -1
since grep -m 1
should output 1 line. can combine sed substitutions one: sed -r "s#$templt_name##; s#\".*##; s/\x1b\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|k]//g"
(the -n
sed option , p
sed command can left out if there’s line being processed can’t test without having original file).
other ways of using sed
strip ansi escape sequences listed @ remove color codes (special characters) sed.
however, better long-term fix modify process creates text file listing directories not include ansi escape codes in output.
Comments
Post a Comment