В вашем скрипте просто сделайте его переменной с быстрой проверкой работоспособности:
pyfile="file.py"
sudo PYSPARK_DRIVER_PYTHON=/bin/python2.7 PYSPARK_PYTHON=/bin/python2.7 SPARK_CONF_DIR=/configuration/spark2 /spark2.1/bin/spark-submit --driver-memory 2g --executor-memory 4g --num-executors 100 --jars /lib/json-serde-1.3.7-jar-with-dependencies.jar "${pyfile?python script not specified}"
Конструкция ${var?message}
выдаст ошибку и отобразит message
, если переменная var
не определена или пуста.
Вы также можете указать значение по умолчанию, используя ${var-defaultvalue}
.
Вы также можете сделать это функцией для более простого вызова:
runjob() {
sudo PYSPARK_DRIVER_PYTHON=/bin/python2.7 PYSPARK_PYTHON=/bin/python2.7 SPARK_CONF_DIR=/configuration/spark2 /spark2.1/bin/spark-submit --driver-memory 2g --executor-memory 4g --num-executors 100 --jars /lib/json-serde-1.3.7-jar-with-dependencies.jar "${1?python script not specified}"
}
runjob "/path/to/file.py"
runjob "/path/to/some/other/file.py"
Команда wc -l
подсчитывает строки файлов. Это может быть строительным блоком:
lineCount=$(<$fileName wc -l)
if [ $lineCount -eq 0 ]; then
echo "File $fileName has no content"
fi
Предполагая, что вы хотите найти пустые файлы в текущем каталоге и ниже, запишите их пути в текстовый файл с именем empty.txt
, а затем удалите их:
find. ! -path./empty.txt -type f -empty -print -delete >empty.txt
Предполагается, что у вас есть find
реализация, которая понимает не -стандартные опции -empty
и -delete
. Команда избегает удаления файла empty.txt
, в который мы записываемся, и в противном случае найдет и удалит пустые обычные файлы, выводя их пути в файл empty.txt
.
Вы можете выполнить приведенную выше команду без каких-либо действий после -print
, чтобы увидеть, что будет удалено.
Для варианта, соответствующего стандарту -:
find. ! -path./empty.txt -type f -exec sh -c '
for pathname do
if [ ! -s "$pathname" ]; then
printf "%s\n" "$pathname"
rm -f "$pathname"
fi
done' sh {} + >empty.txt
Это вызывает короткий -строковый сценарий оболочки для пакетов найденных файлов. Сценарий проверяет каждое имя пути с помощью теста -s
, чтобы определить, пуст он или нет, и если это (, то тест -s
равен истине , если он не -пуст, вот почему мы отрицаем тест ), путь к файлу распечатывается и файл удаляется с помощью rm -f
.
Как и раньше, вывод сохраняется в empty.txt
.
Более короткая, но менее эффективная стандартная версия будет
find. ! -path./empty.txt -type f \
! -exec test -s {} \; -print -exec rm -f {} + >empty.txt
Это менее эффективно, так как внешняя команда test
выполняется один раз для каждого файла.