我有一個需要來源的bash文件。用戶可能不知道csh(默認配置),所以我想將shell更改爲bash,但是源自該用戶的意圖。from csh to bash and re-source the same file
有很多的解決這個幫助和產生的代碼將是:
#!/bin/csh (AND bash!)
[ "$?shell" = "1" ] && bash --login -c 'source this_file; bash' && exit
...
一切正常,除了一個事實,即源文件this_file
必須硬編碼。在csh $_
中將包含source this_file
,因爲那是開始採購腳本的命令,但是我無法將它傳遞給bash命令。
這意味着:
如果我使用:
... && set this_file=($_) && bash -c "$this_file; bash" && ...
bash將抱怨括號是錯誤的(這種情況發生的慶典開始了第二次嘗試源
this_file
如果我使用:
... && bash -c ""$_"; bash" && ...
慶典得到一個破碎的命令無法正常工作或:
bash -c "source" "this_file" "; bash"
如果我使用:
... && bash --login -c "$_; bash" && ...
CSH得到一個破碎的命令:'不匹配」。
我不能找出如何使用$_
與傳遞值作爲單個命令(即bash -c "source this_file; bash"
)
這是測試一個公認的bash語法:
cat >a.sh<<'EOF'
[ "$?shell" = "1" ] && bash --login -c 'source a.sh; bash' && exit
a=1
EOF
然後我期待這個工作:
$ csh -c 'source a.csh'
$ echo $a
1
我很確定它曾經工作K ...我試圖找出它爲什麼不現在。 (我使用tcl模塊包解決了這個問題,但我會試試)
將不會$ 0給你訪問腳本的名稱? – kdubs 2013-02-18 14:21:43
@kdubs否,因爲它是來源。 – estani 2013-02-18 14:23:03
當然,你是對的。它會顯示原始程序。當時無法嘗試。 – kdubs 2013-02-19 14:30:25