我在SLES 11 SP3上使用GNU bash 3.2.51。在執行source filename
時我注意到了一個不尋常的行爲 - 它執行任何處理命令行參數$*
的任何事情。
文件f1.sh
#!/bin/bash
#this is only a test driver
echo FYI PWD=$PWD
./f2.sh "$*"
文件f2.sh
#!/bin/sh
#this is the application script
echo args in f2.sh were $*
文件f3.sh
#!/bin/bash
#this is the real driver code
echo FYI PWD=$PWD
source ~/.bashrc
./f2.sh "$*"
當我執行f1.sh cat f2.sh
我得到這似乎OK
/tmp> ./f1.sh cat f1.sh
FYI PWD=/tmp
args were cat f1.sh
但是,當我執行f3.sh cat f2.sh
我得到的,很意外
/tmp> ./f3.sh cat f1.sh
cat: f1.sh: No such file or directory
cat: f1.sh: No such file or directory
FYI PWD=/usr/app/DB/DB00
./f3.sh: line 4: ./f2.sh: No such file or directory
最後我決定修改f3.sh
到shift
掉任何剩餘$*
值執行source ~/.bashrc
#!/bin/bash
#this is the real driver code
echo FYI PWD=$PWD
cmd="$*"
while shift; do true; done #<<<<<<<<<<<<<<< get rid of hanging args
source ~/.bashrc
./f2.sh ${cmd}
,但我之前不知道爲什麼這樣工作。也許更有知識的人可以解釋到底發生了什麼。 (也許有一個選項)非常感謝。
可能更適合使用'$ @'代替。 – fedorqui
你的例子沒有顯示'source'使用'$ *',但是'source〜/ .bashrc'確實有很大的不同。檢查你的'〜/ .bashrc'是否可以使用'$ *'。 – bfontaine
你確定採購是在做嗎?採購其他文件是否具有相同的行爲?什麼改變'f3.sh'中的'PWD'?你的'.bashrc'包含什麼?它是否根據位置參數進行操作? –