How to pass argument with exclamation mark on Linu

2020-02-09 05:54发布

I have a simple Python script that receives username and password as arguments, but my password contains two exclamation marks. When I call my script like

salafek@dellboy:~/Desktop/$ emailsender.py -u username -p pass!!

a command that I entered earlier replaces the exclamation marks:

salafek@dellboy:~/Desktop/$emailsender.py -u username -p "passemailsender.py -u username -p passwget wget http://www.crobot.com.hr/templog"

I can escape exclamation marks with backslash (\), but my password changes.

Is there solution for this, how can I escape exclamation marks without changing my password?

4条回答
\"骚年 ilove
2楼-- · 2020-02-09 06:12

You need to escape it with \ or quote it with single quotes, otherwise your shell interprets it.

emailsender.py -u username -p pass\!\!

or

emailsender.py -u username -p 'pass!!'
查看更多
混吃等死
3楼-- · 2020-02-09 06:18

You should be able to simply wrap things in single quotes in the shell.

$ emailsender.py -u username -p 'pass!!'
查看更多
叛逆
4楼-- · 2020-02-09 06:24

Have you tried

$ emailsender.py -u username -p "pass!!"

EDIT- This won't work. Read comments below

查看更多
姐就是有狂的资本
5楼-- · 2020-02-09 06:37

As mentioned by others, this issue isn't specific to Python, but is caused by how you're passing the password parameter to the script.

You'll want to wrap the password string in single quotes to make sure that it's passed to the script exactly as you type it, and isn't interpreted by the shell.

You could do this for the username too, if there's the possibility that it includes an exclamation mark, or other special character.

For example:

emailsender.py -u 'username' -p 'pass!!'
查看更多
登录 后发表回答