How to pass the value of a variable to the stdin of a command?
我正在编写一个shell脚本,它应该有点安全,即不通过命令的参数传递安全数据,最好不使用临时文件。如何将变量传递给命令的stdin?或者,如果不可能,如何正确地使用这些任务的临时文件?
通过对输入值A AA AA:简单的冰
1 | your-command <<<"$your_variable" |
确保你总是把quotes在变量的表达式。
AA AA:简单的事。
1 | echo"$blah" | my_cmd |
注意,"
1 2 3 | { echo"$var"; cat - ; } | command ( echo"$var"; cat - ) | command |
这意味一线(S)将"contents of
在命令行notations是practically identical,但是在第二个半结肠必要的牙套,冰与冰槽与它的尽头parentheses。
1 2 3 4 | (cat <<END $passwd END ) | command |
"不,不是真的需要
喜欢马丁的回答,但它有一些问题取决于什么是可变的。这
1 | your-command <<<"""$your_variable""" |
如果你变的更好的冰或包含"!
根据马丁的回答,有一个叫bash的特征。(在这里,它是一个变的更widely支持文件(特征)。
www.gnu.org http:/ / / / /软件/ bashref.html bash手册#在这儿。
3.6.7 Here Strings
A variant of here documents, the format is:
1 <<< wordThe word is expanded and supplied to the command on its standard
input.
注意,这里就有两个。appear bash只读,所以,为了提高便携性,也许是你的最好离这里文件与原始特征,根据poltos的回答:
1 2 3 4 | ( cat <<EOF $variable EOF ) | cmd |
一个简单的变体或以上的:
1 2 3 4 | (cmd <<EOF $variable EOF ) |
你可以omit
试试这个:
1 | echo"$variable" | command |
这个强大的和可移植的方式已经出现在他的评论。它应该是一个独立的答案。
1 | printf '%s'"$var" | my_cmd |
或
1 2 | printf '%s '"$var" | my_cmd |
注:
- 它的更好的
echo 丹瑞,原因是:为什么这里的冰比echo printf 更好吗? -
printf"$var" 冰了。第一参数的格式在不同序列的冰状或是%s interpreted。通过对《两个变量,它必须不被interpreted AS的格式。
-
通常不包含变量的trailing newlines。《命令与
%s 形式)的网络服务变为冰。然而,用文本工具工作可能忽视或不完全是个complain线(见我为什么要比文本文件和一个换行符?)所以你可能想要的。(《命令与%s 笑声)这一appends换行字符内容的两个变量。非明显的事实:
- 这里的字符串在bash(
<<<"$var" my_cmd )是一append换行符。 - 任何方法,结果在一appends换行符的非空
my_cmd 标准输入(stdin),即使是空的或undefined变量。
- 这里的字符串在bash(
我做的:
1 | printf"$my_var" | my_cmd |
如果是不包含的空间则可能是omitted quotes。 如果你使用bash也可以做:
1 | echo -n"$my_var" | my_cmd |
避免使用无回声型,因为它会管的vraiable和linebreak比的增加。