2015-09-20 2 views
2

Мне нужно выполнить некоторые операции с командами linux в файлах, имеющих «!» как символы в имени файла. Но всякий раз, когда я пытаюсь выполнить команды, я становлюсь ниже ошибки.Обработка недопустимых символов из имени файла в unix

[[email protected] ~]# cat a!aapoorv.txt 
-bash: !aapoorv.txt: event not found 

Я выполняю эти команды в python, используя модуль paramiko. Я не могу использовать raw string r'filestringname ', поскольку я читаю имя строки из самого db.

Как избежать/управлять этими символами короля с помощью python/bash.

+0

@AhsanulHaque: Это не так. – alk

+0

'open (" a! Aapoorv.txt ")' должен работать нормально –

ответ

2

попробовать это:

cat a\!aapoorv.txt 

или это

cat 'a!aapoorv.txt' 

Обратите внимание, что в то время как cat a\!aapoorv.txt работает во всех оболочках, которые реализуют, что расширение истории CSH-стиле, cat 'a!aapoorv.txt' не работает в CSH/Tcsh.

для получения дополнительной информации, вы можете увидеть man bash о Цитирование.

Вот некоторые из этого документа:

Цитирование используется для удаления специальное значение определенных символов или слов в оболочке.

Цитирование может использоваться для отключения специальной обработки для специальных символов, чтобы предотвратить сохранение зарезервированных слов как таковых и предотвратить расширение параметра.

А вот выход:

[[email protected] test]$ ls 
a!aapoorv.txt 
[[email protected] test]$ cat a\!aapoorv.txt 
Hello, This is a test 
[[email protected] test]$ cat 'a!aapoorv.txt' 
Hello, This is a test 


На Python, вам не нужно бежать специальный символ, вот тест:

>>> with open('a!aapoorv.txt') as f: 
...  f.read() 
...  
... 
'Hello, This is a test\n' 
>>> with open(r'a!aapoorv.txt') as f: 
...  f.read() 
...  
... 
'Hello, This is a test\n' 
>>> 
+1

все они работают? Я тестировал третий для создания файла, и он не работает. –

+2

Последний (с двойными кавычками) не будет работать (вам все равно нужно избежать '!' С обратной косой чертой). Другой вариант - отключить расширение истории с помощью 'set + H'. –

+0

Да, они могут все работать, позвольте мне отредактировать мой ответ и добавить дополнительную информацию и вывод. –

0

использование одиночных кавычек '':

$ cat 'a!aapoorv.txt' 
cat: a!aapoorv.txt: No such file or directory 
0

Для Bash вам необходимо использовать методы экранирования (одинарные кавычки или обратную косую черту), описанные другими ответами.

В Python вам не нужно использовать необработанные строки или любой другой тип экранирования, чтобы открыть файл со специальными символами.

Например, это работает отлично:

my_f_contents = open("a!aapoorv.txt").read() 
Смежные вопросы