я хочу ~/.bashrc
будет source
при изменении его содержания. Я создал класс bashrc примерно так:
file { "/root/.bashrc":
ensure => present,
owner => root,
group => root,
mode => 0644,
source => "puppet:///bashrc/root/.bashrc"
}
exec { "root_bashrc":
command => "source /root/.bashrc",
subscribe => File["/root/.bashrc"],
}
но как вы знаете, source
это встроенная команда оболочки, поэтому при запуске агента я получил следующую ошибку:
# puppet agent --no-daemonize --verbose
notice: Starting Puppet client version 2.7.1
info: Caching catalog for svr051-4170
info: Applying configuration version '1311563901'
err: /Stage[main]/Bashrc/Exec[root_bashrc]/returns: change from notrun to 0 failed: Could not find command 'source'
notice: Finished catalog run in 2.28 seconds
notice: Caught INT; calling stop
Есть ли обходной путь для этого?
Нет смысла пере-source
новый .bashrc
внутри Puppet, потому что он будет работать в подоболочке, и изменения не будут распространяться на вашу текущую оболочку (что, я полагаю, именно то, что вы пытаетесь сделать). Вы не можете делать то, что (я думаю), что хотите.
Вы также можете часто начинать свою команду с true &&
или используйте provider => shell
.
Видеть этот и этот для дополнительного обсуждения.
Это должно быть:
file { "/root/.bashrc":
ensure => present,
owner => root,
group => root,
mode => 0644,
source => "puppet:///bashrc/root/.bashrc" }
exec { "root_bashrc":
command => "source /root/.bashrc",
provider => shell,
subscribe => File["/root/.bashrc"],
}
Технически вы можете использовать:
exec { "root_bashrc":
command => "bash -c 'source /root/.bashrc'",
subscribe => File["/root/.bashrc"],
refreshonly => true,
}
Однако, как @womble уже указал, нет смысла искать такой .bashrc; он влияет только на оболочку bash, которая запускается в этой команде, но не на любые запущенные в данный момент оболочки bash.
Вы могли бы установить PROMPT_COMMAND="source /root/.bashrc"
для повторного запуска .bashrc каждый раз, когда отображается приглашение в любой запущенной в данный момент интерактивной оболочке, но это кажется немного ресурсоемким. Я никогда не пробовал этого, но думаю, что это сработает.