我想連接到不同的shell(csh,ksh等),並在每個交換shell中執行命令。殼shell內的shell腳本
以下是這反映了我的意圖的示例程序:
3210因爲,我不能很好地與殼牌腳本精通需要就如何實現這一目標的指針。任何幫助將非常感激。
我想連接到不同的shell(csh,ksh等),並在每個交換shell中執行命令。殼shell內的shell腳本
以下是這反映了我的意圖的示例程序:
3210因爲,我不能很好地與殼牌腳本精通需要就如何實現這一目標的指針。任何幫助將非常感激。
如果你想只執行一個命令,你可以使用-c
選項
csh -c 'echo $SHELL'
ksh -c 'echo $SHELL'
如果要執行幾個命令,或者甚至是一個子shell中的整個腳本,則可以使用bash的here-document功能,並在子shell上使用-s
(從stdin
讀取命令) :
#!/bin/bash
echo "this is bash"
csh -s <<- EOF
echo "here go the commands for csh"
echo "and another one..."
EOF
echo "this is bash again"
ksh -s <<- EOF
echo "and now, we're in ksh"
EOF
請注意,你不能很容易地檢查你是在由echo $SHELL
殼,因爲母貝擴展這個變量的文本/././bash
。如果你想確保子shell能夠工作,你應該檢查一個特定於shell的語法是否正常工作。
可以使用每個shell提供的命令行選項運行一段代碼。
例如,對於bash
使用-c
選項:
bash -c $code
bash -c 'echo hello'
zsh
和fish
也使用-c
選項。
其他shell將聲明他們在手冊頁中使用的選項。
你需要的,如果你想傳遞的bash啓動命令使用-c
命令行選項:
#!/bin/bash
# We are in bash already ...
echo $SHELL
csh -c 'echo $SHELL'
ksh -c 'echo $SHELL'
您可以通過任意複雜的腳本外殼,使用-c
選項,如
sh -c 'echo This is the Bourne shell.'
您將您節省大量的相關報價和變量擴展性頭痛,如果你包裹中的呼叫功能讀取所述腳本上標準輸入爲:
execute_with_ksh()
{
local script
script=$(cat)
ksh -c "${script}"
}
prepare_complicated_script()
{
# Write shell script on stdout,
# for instance by cat-ting a here-document.
cat <<'EOF'
echo ${SHELL}
EOF
}
prepare_complicated_script | execute_with_ksh
這種方法的優點在於,它容易在管道中插入三通或打破管,以控制被傳遞給外殼的腳本。
如果您想通過ssh在遠程主機上執行腳本,您應該考慮將腳本編碼爲base 64,以便將其安全地傳輸到遠程shell。
看起來像我失去了一些東西。 '$ configfile'的含義是什麼?這與這個問題有什麼關係? – hek2mgl
@ hek2mgl嗯,我不知道! :)新的例子可能會更好。 –
非常感謝您的及時幫助,謝謝其他誰給了類似的解決方案 – learningloop