2016-01-13 4 views
0

Я пытаюсь выполнить цикл файлов в каталоге и выполнять определенные действия над ними. Когда я выполняю скрипт с помощью ksh, он работает так, как ожидалось. Но когда я выполняю его с ./, он терпит неудачу с ошибкой, говорящей слишком много аргументов. Пожалуйста, помогите с этим.Выполнение скрипта оболочки unix с ksh и ./

ScriptName: script1

Когда Exec с ksh Script1 argument1 он работает, как ожидалось. Но когда exec'd с ./Script1 argument1 слишком много ошибок вызывает ошибку.

#!/bin/bash 
cd ../SrcFiles 

if [ -e *$1* ] 
then 
for file in *$1* 
do 
echo $file 
if [ $1 == "XXX" ] 
then 
echo $file >> ABC_"$1".txt 
elif [ $1 == "YYY" ] 
then 
echo $file >> ABC_"$1".txt 
else 
echo $file >> ABC_"$1".txt 
fi 
done 
else 
#createadummyfile 
fi 
+0

Какой сценарий? Пожалуйста, предоставьте код. – Kellerspeicher

+0

Код добавлен. @Kellerspeicher –

+0

Добавьте 'set -x' для отладки вашего кода. Это может быть, например, расширение параметра '* $ 1 *' работает по-разному в 'ksh' и' bash'. – jofel

ответ

0

Здесь:

if [ -e *$1* ] 

-e ожидает один аргумент. Расширение glob, вероятно, найдет несколько файлов. Если вы хотите, чтобы проверить, есть ли какие-либо файлы, соответствующие, использовать массив для хранения расширения Глобо:

files=(~(N)*"$1"*) 
if ((${#files[@]} == 0)); then 
    # no files found 
else 
    # do stuff to matching files 
    for file in "${files[@]}"; do ... 
fi 

работу с ksh93. Часть ~(N) указывает ksh, что если файлы не совпадают, не сохраняйте шаблон в качестве вывода (аналогично параметру nullglob bash)

Смежные вопросы