私は以下を追加したいと思います:
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'
シェルは、引用時にこの文書の特殊文字を拡張しません。 POSIXではシェルコマンド言語:
単語に引用符が含まれている場合は、[...]この文書行を展開しないでください。
答え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 \$@