В Ubuntu,
при выполнении исполняемого файла или файла сценария, если я перемещаю или переименовываю файл, повлияют на выполнение?
при выполнении исполняемого файла Windows (например, PDFXCview.exe) под вином, будет, перемещаясь, или переименование исполняемого файла Windows влияет на свое выполнение под вином?
Спасибо.
Хорошо, конечно, Вы думаете. Но.001% времени они дозаправляются в воздушном пространстве. Военные применения, например. Таким образом, правило не устойчиво. То же верно с исполняемыми файлами и сценариями. Вирусы, например, заражают исполняемые файлы, в то время как они работают и копия на диске также. Это - хорошая вещь, если они повреждаются. Однако невирусы также могут обновить исполняемые файлы / сценарии.
Этот сценарий: Как я могу заставить сценарий входить в систему отдельный файл количество раз, оно было выполнено? обновляет себя с количеством раз, оно было выполнено.
Традиционно отдельный конфигурационный файл используется, чтобы каждый файл сценария записал, сколько раз он выполняется. Но если у Вас есть десятки на десятки сценариев, имеет смысл хранить количество выполнения в самом сценарии. Кроме того, Вы не должны отслеживать то, где конфигурационный файл хранится и изменение сценария, если конфигурационный файл перемещен. Код для изменения количества выполнения может быть включен с a source
или .
колотите команду, чтобы уменьшить затраты на обслуживание и улучшить удобочитаемость.
Вот соответствующие нормы из ссылки выше:
# This script run count: 0
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
# This is useful boilerplate code for shell scripts. Put it at the top of
# the shell script you want to lock and it'll automatically lock itself on
# the first run. If the env var $FLOCKER is not set to the shell script
# that is being run, then execute flock and grab an exclusive non-blocking
# lock (using the script itself as the lock file) before re-execing itself
# with the right arguments. It also sets the FLOCKER env var to the right
# value so it doesn't run again.
# Read this script with entries separated newline " " into array
mapfile -t ScriptArr < "$0"
# Build search string that cannot be named
SearchStr="This script"
SearchStr=$SearchStr" run count: "
# Find our search string in array and increment count
for i in ${!ScriptArr[@]}; do
if [[ ${ScriptArr[i]} = *"$SearchStr"* ]]; then
OldCnt=$( echo ${ScriptArr[i]} | cut -d':' -f2 )
NewCnt=$(( $OldCnt + 1 ))
ScriptArr[i]=$SearchStr$NewCnt
break
fi
done
# Rewrite our script to disk with new run count
# BONUS: Date of script after writing will be last run time
printf "%s\n" "${ScriptArr[@]}" > "$0"
Я быстро объясню, как части уникального кода работают.
mapfile -t ScriptArr < "$0"
^ Это читает весь сценарий /script/path/script-name.sh
в названный массив ScriptArr
.
OldCnt=$( echo ${ScriptArr[i]} | cut -d':' -f2 )
NewCnt=$(( $OldCnt + 1 ))
ScriptArr[i]=$SearchStr$NewCnt
^ Это берет старое количество на строке комментария: # This script run count: 0
и инкременты это 1.
printf "%s\n" "${ScriptArr[@]}" > "$0"
^ Это выписывает измененный массив сценария к диску как новый исполняемый сценарий. Хорошее (или плохо) побочный эффект является датой, скрипт был в последний раз запущен, теперь дата модификации сценариев.
Заметьте FLOCKER
переменная от команды выше:
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
^ Это для многочисленных пользователей. Если один пользователь запускает скрипт, он мешает второму пользователю запустить тот же самый скрипт. Скажем, Вы ожидаете до концов задания первого пользователя и затем перемещаете сценарий. Это плохо, потому что второй пользователь, который был в режиме ожидания теперь, заставляет доступ запускать скрипт, потому что семафорная блокировка отбрасывается. Однако после того, как задание первого пользователя закончило Вас, переместил сценарий в другой каталог. Не грандиозное предприятие 99,999% времени, но, это - чрезвычайно редкие времена, которые являются непостижимыми ошибками.
Под управлением сценарий или исполняемый файл могут изменить себя или могут даже быть изменением другая программа, это не выполнение в рамках того же приложения.
Вообще говоря, это - 99%-й сейф, чтобы переместить (т.е. переименовать) программа, которая уже работает. Это сказало, что я никогда не буду делать этого.
Ваш вопрос о wine
(псевдо-Windows), но эти сценарии удара был разработан для Ubuntu в соответствии с Linux и Ubuntu в соответствии с Windows (WSL). Точка не так о wine
но показать, что может быть сделано в программировании / мир сценариев.