diff --git a/IPython/utils/path.py b/IPython/utils/path.py index 95d05ef..82175ae 100644 --- a/IPython/utils/path.py +++ b/IPython/utils/path.py @@ -356,6 +356,13 @@ def expand_path(s): return s +def unescape_glob(string): + """Unescape glob pattern in `string`.""" + for pattern in '*[]!?': + string = string.replace(r'\{0}'.format(pattern), pattern) + return string + + def shellglob(args): """ Do glob expansion for each element in `args` and return a flattened list. @@ -365,7 +372,7 @@ def shellglob(args): """ expanded = [] for a in args: - expanded.extend(glob.glob(a) or [a]) + expanded.extend(glob.glob(a) or [unescape_glob(a)]) return expanded diff --git a/IPython/utils/tests/test_path.py b/IPython/utils/tests/test_path.py index 71a2896..f44b1a6 100644 --- a/IPython/utils/tests/test_path.py +++ b/IPython/utils/tests/test_path.py @@ -475,5 +475,14 @@ def test_shellglob(): + filenames_start_with_a + filenames_end_with_b + ['*c']) + + assert_match([r'\*'], ['*']) + assert_match([r'a\*', 'a*'], ['a*'] + filenames_start_with_a) + assert_match(['a[012]'], filenames_start_with_a) + assert_match([r'a\[012]'], ['a[012]']) finally: os.chdir(save) + + +def test_unescape_glob(): + nt.assert_equals(path.unescape_glob(r'\*\[\!\]\?'), '*[!]?')