例如,我的劇本的相關部分如下所示:
tasks:
- name: test
script: ../test.sh
...
對于我的 test.sh,有一行代碼將執行這樣的 python 腳本:
python run.py --inputvar hello
有沒有辦法將 .sh 檔案中的 inputvar 值從“hello”更改為劇本中的其他內容?
編輯:感謝@seshadri_c 對此的幫助。猜猜這個問題應該被標記在 shell 腳本下。
uj5u.com熱心網友回復:
在shell腳本決議引數的最簡單方法是使用位置引數- $1,$2等等。
給定一個test.sh腳本:
#!/bin/bash
python run.py --inputvar $1
并將其運行為:
/bin/bash test.sh arg1
將傳遞$1to run.pyas的值--inputvar arg1。
同樣的事情可以從 Ansible 任務中運行:
tasks:
- name: test
script: ../test.sh arg1
uj5u.com熱心網友回復:
還有更多選擇。
- 第一個可能是lineinfile,例如下面的任務是冪等的
- lineinfile:
path: test.sh
regex: '^python run.py --inputvar (.*)$'
line: 'python run.py --inputvar {{ my_var|default("hello") }}'
給
TASK [lineinfile] *******************************************************
ok: [localhost]
如果您定義變數my_var(請參閱變數優先級:我應該將變數放在哪里?)
my_var: hello world
該任務將更改檔案中的行。(使用選項--check --diff運行劇本)
TASK [lineinfile] ********************************************************
--- before: test.sh (content)
after: test.sh (content)
@@ -1,3 1,3 @@
#!/usr/bin/sh
-python run.py --inputvar hello
python run.py --inputvar hello world
changed: [localhost]
下一個選項可能是模板,例如模板test.sh.j2和下面的任務給出相同的結果
shell> cat test.sh.j2
#!/usr/bin/sh
python run.py --inputvar {{ my_var|default("hello") }}
- template:
src: test.sh.j2
dest: test.sh
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392679.html
下一篇:警告:React.createElement:型別無效——需要一個字串(對于內置組件)(ReactWebpackPhaser)
