나는 다음을 추가하고 싶습니다 :
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 \$@