コマンドラインを実行するための反復メニューを含むスクリプトを書いています。しかし、反復メニューを作成した後、コマンドを実行するときにエラーが発生します。 エラーは[COMMAND]です。このようなファイルまたはディレクトリはありません。関数をインスタンス化した後にBashスクリプトがシバンパスを失った
#!/bin/bash
ATESTS=("TEST NAME 1" "TESTE NAME 2")
PATH=("test1.xml" "text2.xml")
menu() {
for i in ${!ATESTS[@]}; do
printf "%3d%s) %s\n" $((i+1)) "${OPT[i]:- }" "${ATESTS[i]}"
done
[[ "$msg" ]] && echo "$msg"; :
}
prompt="Check an ATEST (again to uncheck, ENTER when done): "
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
/usr/bin/clear;
[[ "$num" != *[![:digit:]]* ]] &&
((num > 0 && num <= ${#ATESTS[@]})) ||
{ msg="Invalid ATEST: $num"; continue; }
((num--)); msg="${ATESTS[num]} was ${OPT[num]:+un}checked"
[[ "${OPT[num]}" ]] && OPT[num]="" || OPT[num]="+"
done
for i in ${!ATESTS[@]}; do
[[ "${OPT[i]}" ]] && { printf "%s " "${ATESTS[i]}"; msg=""; }
done
echo "$msg"
for i in ${!ATESTS[@]}; do
if [[ "${OPT[i]}" ]] && [[ $PWD = /repo/$USER/program ]]; then
find . -iname ${PATH[i]} -exec cat {} \;
fi
done
* .xmlファイルを見つけて、すでに存在し、/ usr/binに属しているスクリプトで実行します。しかし、findコマンドは実行されません。この例ではcatコマンドも実行されます([COMMAND]このようなファイルやディレクトリはlinuxです)。
関数の前にbashコマンドを1回実行すると、問題はありますが、機能の後でコマンドが失敗します。
スクリプトへのパスを含めずに、/ repo/$ USER/program内で実行するためのスクリプトへのエイリアスを1つ作成します。