Ответ 1
Вам нужно избегать обратного хода, но также избежать обратной косой черты:
$ touch 1\` $ /bin/sh -c "ls 1\\\`" 1`
Причина, по которой вам нужно избегать "дважды", заключается в том, что вы вводите эту команду в среду (например, оболочку script), которая интерпретирует строку с двумя кавычками один раз. Затем он снова интерпретируется подоболочкой.
Вы также можете избежать двойных кавычек и, таким образом, избегать первой интерпретации:
$ /bin/sh -c 'ls 1\`' 1`
Другой способ - сохранить имя файла в переменной и использовать это значение:
$ export F='1`' $ printenv F 1` $ /bin/sh -c 'ls $F' # note that /bin/sh interprets $F, not my current shell 1`
И, наконец, то, что вы пробовали, будет работать на некоторых оболочках (я использую bash, как в приведенных выше примерах), по-видимому, не с вашей оболочкой:
$ /bin/sh -c "ls 1'\`'" 1` $ csh # enter csh, the next line is executed in that environment % /bin/sh -c "ls 1'\`'" Unmatched `.
Я настоятельно рекомендую вам избегать таких имен файлов в первом месте.