2015-12-07 29 views
8

〜/ .bashrc文件我有在一個文件中,.bash_aliases,這被複制到遠程服務器與ansible playbook別名列表。該文件被複制到目的地,但.bashrc(它依次加載.bash_aliases)文件沒有得到與以下任務相關的負載。不能源與ansible

我試圖給可執行文件的參數

- name: source the .bashrc file 
    shell: source ~/.bashrc 
    args: 
     executables: "/bin/bash" 

沒有參數

- name: source the .bashrc file 
    shell: source ~/.bashrc 

隨着原材料模塊

- name: source the .bashrc file 
    raw: source ~/.bashrc 

隨着命令模塊 - 名稱:源.bashrc文件 命令:source〜/ .bashrc中

沒有什麼工作!任何幫助

+1

你如何「知道」它沒有被加載?發佈重現問題的東西。 –

+0

@KarolyHorvath,因爲我在'.bash_aliases'文件中列出的別名不起作用。但是,在登錄到遠程服務器後手動輸入「source .bashrc」文件時,別名可以正常工作。 –

+0

這並不意味着它沒有執行。 –

回答

4

從閱讀你的意見,你說,你正試圖使permanate別名,而不是爲特定的會話。爲什麼不在用戶需要擁有那些特定別名的機器上創建/etc/profile.d中的別名?

此外,從另一個帖子裏彈出,當我跑Ansible細節谷歌搜索,因爲我沒有Ansible專家... Not possible to source .bashrc with Ansible(感謝@chucksmash的鏈接)

「史蒂夫米奇利

你有兩個選擇使用源與ansible一種是與「殼」。「」在/ bin命令和/ bin/sh的(在ansible默認)「源」之稱/ SH所以,你的命令是:

-name: source bashrc 
sudo: no 
shell: . /home/username/.bashrc && [the actual command you want run] 

請注意,您必須在sourcin之後運行命令g .bashrc b/c每個ssh會話都是不同的 - 每個有效的命令都在單獨的ssh事務中運行。

你的第二個選項是強制Ansible外殼使用bash,然後你可以使用「源文件」命令:\

name: source bashrc 
sudo: no 
shell: source /home/username/.bashrc && [the actual command you want run] 
args: 
    executable: /bin/bash 

最後,我會注意,您可能希望實際源「的/ etc /配置文件「如果你在Ubuntu或類似的,這更完全模擬本地登錄」。

+1

如果你看的網址您鏈接的其他網站,您會看到它們只是重現StackOverflow內容(「... q/stackoverflow/22256884/...」。答案可用[此處](http://stackoverflow.com/a/27541856/341510) – chucksmash

0

如果你希望,或者在Ansible比如你在一個擊例如設定在其他情況下,猛砸看到的變量,運行此bash腳本,有沒有辦法做到這一點。這是固有的Unix進程模型

可以不要設置什麼變量,然後運行需要取工具,將設置這個值。

bash -c 'var="value" /path/to/other/tool' 

這可以是任意複雜的,雖然你可能會更好過建立一個獨立的外部腳本如果任務需要執行可能需要什麼比最瑣碎的調試等等。