[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]![]() |
![]() |
![]() |
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
![]() |
![]() |
![]() |
Kristian Nørgaard <sslug@sslug> writes: > sslug@sslug echo $EXCL > --exclude '*~' Man skal holde tungen lidt lige i munden. Målet er at tar(1) skal se de to argumenter [--exclude] og [*~]. Det her viser at tar(1) kommer til at se to argumenter [--exclude] og ['*~'] og ganske rigtigt ekskluderer tar(1) alle filer hvis navn begynder med en apostrof og slutter med tilde-apostrof. Problemet er at hvis $EXCL indeholder en ', så vil bash prøve at escape den hvorefter den fortolker hele strengen. Det vil sige at du sætter nogle plinger, bash beskytter dem hvorefter bash fortolker resultatet (fjerner det yderste lag beskyttelse). Løsningen er tilsyneladende at indføre et ekstra lag fortolkning: $ ls foobar foobar~ foobaz plugh printargs xyzzy xyzzy~ $ cat ./printargs #!/usr/bin/perl for (@ARGV) { print "[$_]\n"; } $ EXCL="--exclude '*~'" $ ./printargs $EXCL [--exclude] ['*~'] $ eval ./printargs $EXCL [--exclude] [*~] $ Det vil sige at du bør bruge en eval før din tar. -- http://peter.makholm.net/ | First you fall in love with Antarctica, and sslug@sslug | then it breaks your heart | -- Antarctica
![]() |
![]() |
![]() |
||||||||||||
|
||||||||||||||
![]() | ||||||||||||||
|
||||||||||||||
![]() |
![]() |
![]() |