如何将涉及变量的多行附加到 bash 脚本的末尾?

如何将涉及变量的多行附加到 bash 脚本的末尾?

我想补充一下:

function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p $@
}

从命令行结束~/.bashrc。我尝试过使用:

printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}" >> ~/.bashrc

虽然它几乎起作用了,但输入字段$@被忽略了,使得:

function ps_mem {
 python /home/vagrant/ps_mem/ps_mem.py -p
}

相反,应添加到 的末尾~/.bashrc

答案1

对于此类工作,请使用此处的文档:

cat <<'EOF' >>~/.bashrc
function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p "$@"
}
EOF

<<'EOF'当引用时,shell 不会扩展此处文档中的特殊字符。来自 POSIX外壳命令语言:

如果引用了 word 中的任何字符,则 [...] 此处文档行不应扩展。

答案2

"如果将双引号替换为单引号,则原始问题中的 printf 会起作用。

我喜欢用printf这种方式。没有像 中那样特殊的引用规则here documents。并且没有思考\n。你所看到的就是你得到的:

printf '%s' '
function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p "$@"
}
' >> ~/.bashrc

答案3

已经给出了其他可行的答案,但本着帮助您完全按照您尝试的方式进行操作的精神(因为这是一种完全好的方法):

这是原文:

printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}" >> ~/.bashrc

这是一个可以运行的版本:

printf 'function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}' >> ~/.bashrc

我建议还添加双引号$@

printf 'function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p "$@" \n}' >> ~/.bashrc

双引号内启用变量扩展;在单引号中禁用。

答案4

要获得所需的输出,您可以使用转义序列,如下所示

  python /home/vagrant/ps_mem/ps_mem.py -p \$@ 

相关内容