![如何将涉及变量的多行附加到 bash 脚本的末尾?](https://linux22.com/image/76049/%E5%A6%82%E4%BD%95%E5%B0%86%E6%B6%89%E5%8F%8A%E5%8F%98%E9%87%8F%E7%9A%84%E5%A4%9A%E8%A1%8C%E9%99%84%E5%8A%A0%E5%88%B0%20bash%20%E8%84%9A%E6%9C%AC%E7%9A%84%E6%9C%AB%E5%B0%BE%EF%BC%9F.png)
我想补充一下:
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 \$@