Забудьте о цитировании и поместите текст в переменную окружения.
Используйте -x
для запуска оболочки.
Не создавайте код для $SHELL
: вы не знаете, какой синтаксис он понимает. Выполните код в sh
и вызовите $SHELL
для вызова интерактивной оболочки.
message='HelloWorld' gnome-terminal -x sh -c 'printf %s\\n "$message"; unset message; exec "$SHELL"'
Если я правильно понял вопрос, вы пытаетесь добавить строку
alias myname='export PATH="/path/to/bin:$PATH"'
в свой ~ / .bashrc
файл
Очевидный тип echo
завершится ошибкой, потому что $ PATH раскрывается в неправильное время.
Вместо этого нам нужно смешать цитаты:
echo "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc
Теперь вы говорите, что по какой-то причине хотите использовать printf
.Итак, мы можем сделать то же самое:
printf "%s\n" "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc
Если вы хотите рассматривать две стороны =
как отдельные строки:
printf "%s=%s\n" "alias myname" "'export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc
И так далее.
( printf
принимает только один аргумент формата, а затем список значений).
Есть два простых решения. Один из них - использовать здесь документ вместо кавычек.Используйте цитированную форму документа здесь (где часть << EOF
содержит символ кавычек), чтобы отключить подстановку переменных и команд внутри документа здесь.
cat <<\EOF >>~/.bashrc
alias myname='export PATH="/path/to/bin:$PATH"'
EOF
Другой - использовать одинарные кавычки вокруг строки, которую вы хотите напечатать. Вы можете эффективно экранировать одинарную кавычку в одинарном кавычках, используя '\' '
- конец одинарного кавычки, добавление одинарной кавычки и начало нового одинарного кавычки.
echo 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''
(Вы можете оптимизировать последний пустой строковый литерал ''
.)
В некоторых оболочках команда echo
не выводит свой аргумент буквально, поэтому надежный способ распечатать строку - использовать printf
:
printf '%s\n' 'alias myname='\''export PATH="/path/to/bin:$PATH"'\'''
В этом конкретном случае echo
также работает, поскольку единственные расширения, которые он выполняет, касаются обратной косой черты и ведущего -
].