No. Nothing you do with a computer is 100% safe, and nothing in life is 100% safe. That's the wrong way to look at it. The question you should be asking is, which option offers *more* safety? When planning how to secure your system, you want to follow a *[defense in depth]* model: At every point while designing or configuring your system, you want to ask the question, which choice would improve my security? Is passing sensitive data via stdin safer than passing it through the command line? Yes, for all the reasons [CBHacking] mentioned: stdin is ephemeral and requires greater [privilege escalation] to access. Can someone who has gained access to the root account (or the account running the script) via privilege escalation intercept the data sent to stdin? Absolutely. However, the command line arguments are accessible to *any* user account on your system for as long as the program is running, meaning that an attacker can choose which account they want to target, and has more opportunities to witness the sensitive data on the system. If you give the attacker a choice, you should assume they will attack the most vulnerable account available, which will probably be one that you never thought to protect. Using stdin to pass the data is not completely secure, and so that isn't the last step you should take to secure your system, if you're concerned about it. However, it is more safe than passing sensitive data on the command line. [CBHacking]: https://security.stackexchange.com/a/258914/88532 [defense in depth]: https://en.wikipedia.org/wiki/Defense_in_depth_(computing) [privilege escalation]: https://en.wikipedia.org/wiki/Privilege_escalation