Если вы наберете unzip -l
, он распечатает список файлов в zip-архиве. , с их размерами без сжатия, то общий размер всех файлов без сжатия.
Это удобочитаемый результат, но вы можете получить машиночитаемый номер, используя unzip -l
.
Чтобы получить общий размер:
total=0
for file in *.zip; do # or whichever files you want
(( total += $(unzip -l $file | tail -n1 | awk '{ print $1 }') ))
done
echo $total
Suponiendo que está ejecutando bash, coloque el siguiente código cerca del inicio del script que desea obtener pero no ejecutar:
if [ "${BASH_SOURCE[0]}" -ef "$0" ]
then
echo "Hey, you should source this script, not execute it!"
exit 1
fi
En bash, ${BASH_SOURCE[0]}
contendrá el nombre del archivo actual que está leyendo el shell, independientemente de si se está generando o ejecutando.
Por el contrario, $0
es el nombre del archivo actual que se está ejecutando.
-ef
prueba si estos dos archivos son el mismo archivo. Si lo son, alertamos al usuario y salimos.
Ni -ef
ni BASH_SOURCE
son POSIX. Mientras que -ef
es compatible con ksh, yash, zsh y Dash, BASH_SOURCE
requiere bash. En zsh
, sin embargo, ${BASH_SOURCE[0]}
podría ser reemplazado por ${(%):-%N}
.
Cuando obtiene un script de shell, la línea shebang se ignora. Al ingresar un shebang no válido, puede alertar al usuario de que el script se ejecutó erróneamente:
#!/bin/bash source-this-script
#...
El mensaje de error será este:
/bin/bash: source-this-script: No such file or directory
El nombre de argumento arbitrario ()ya proporciona una pista fuerte, pero el mensaje de error aún no es 100% claro. Podemos solucionar esto con un script de utilidad source-this-script
que se coloca en algún lugar de suPATH
:
#!/bin/sh
echo >&2 "This script must be sourced, not executed${1:+: }${1:-!}"
exit 1
Ahora, el mensaje de error será este:
This script must be sourced, not executed: path/to/script.sh
En comparación con las otras respuestas,este enfoque solo requiere cambios mínimos en cada script (y tener una línea shebang ayuda con la detección del tipo de archivo en los editores y especifica el dialecto del script de shell, por lo que incluso hay beneficios ). La desventaja es un mensaje de error poco claro, o la adición (una -vez )de otro script de shell.
No evita la invocación explícita a través de bash path/to/script.sh
, aunque (¡gracias @muru! ).
Suponiendo que es inútil, en lugar de dañino, ejecutar el script, puede agregar
return 0 || printf 'Must be sourced, not executed\n' >&2
hasta el final del guión. return
fuera de una función tiene un código de salida que no es cero -a menos que el archivo se esté originando.
Не -исполняемый файл может быть получен, но не выполнен, поэтому в качестве первой линии защиты хорошим советом будет не устанавливать флаг исполняемого файла...
Редактировать :трюк, на который я только что наткнулся :сделать shebang любым исполняемым файлом, который не является интерпретатором оболочки, /bin/false
заставляет скрипт возвращать ошибку (rc!=0)
#!/bin/false "This script should be sourced in a shell, not executed directly"