В Ubuntu,
при запуске исполняемого файла или файла сценария, если я перемещаю или переименовываю файл, будет ли воздействие работать? при запуске исполняемого файла Windows (например, PDFXCview.exe) под вином, перемещение или переименование исполняемого файла Windows влияет на его работу под вином?Спасибо.
Ну, конечно, вы думаете. Но 0,001% времени они заправляются в воздухе. Например, военные заявки. Так что правило не стойкое. То же самое происходит с исполняемыми файлами и скриптами. Вирусы, например, заражают исполняемые файлы во время их работы, а также копируют на диск. Это хорошо, если они ломаются. Однако, не-вирусы также могут обновлять исполняемые файлы / скрипты.
Этот скрипт: Как заставить сценарий регистрировать отдельный файл числом раз он был выполнен? обновляется с количеством раз, когда он был запущен.
Обычно для каждого файла сценария используется отдельный файл конфигурации для записи, сколько раз он запускается. Но если у вас десятки десятков сценариев, имеет смысл хранить счетчик запуска в самом скрипте. Кроме того, вам не нужно отслеживать, где хранится файл конфигурации, и изменять сценарий, если файл конфигурации перемещен. Код для изменения счетчика прогона может быть включен в команду source или . bash для снижения затрат на обслуживание и улучшения удобочитаемости.
Вот соответствующий код из приведенной выше ссылки:
# 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% безопасно перемещать (то есть переименовывать) программу, которая уже запущена. Тем не менее, я никогда этого не сделаю.
Ваш вопрос о wine (псевдо-Windows), но эти сценарии bash были разработаны для Ubuntu под Linux и Ubuntu под Windows (WSL). Дело не столько в wine, сколько в том, что можно сделать в мире программирования / сценариев.
Ну, конечно, вы думаете. Но 0,001% времени они заправляются в воздухе. Например, военные заявки. Так что правило не стойкое. То же самое происходит с исполняемыми файлами и скриптами. Вирусы, например, заражают исполняемые файлы во время их работы, а также копируют на диск. Это хорошо, если они ломаются. Однако, не-вирусы также могут обновлять исполняемые файлы / скрипты.
Этот скрипт: Как заставить сценарий регистрировать отдельный файл числом раз он был выполнен? обновляется с количеством раз, когда он был запущен.
Обычно для каждого файла сценария используется отдельный файл конфигурации для записи, сколько раз он запускается. Но если у вас десятки десятков сценариев, имеет смысл хранить счетчик запуска в самом скрипте. Кроме того, вам не нужно отслеживать, где хранится файл конфигурации, и изменять сценарий, если файл конфигурации перемещен. Код для изменения счетчика прогона может быть включен в команду source или . bash для снижения затрат на обслуживание и улучшения удобочитаемости.
Вот соответствующий код из приведенной выше ссылки:
# 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% безопасно перемещать (то есть переименовывать) программу, которая уже запущена. Тем не менее, я никогда этого не сделаю.
Ваш вопрос о wine (псевдо-Windows), но эти сценарии bash были разработаны для Ubuntu под Linux и Ubuntu под Windows (WSL). Дело не столько в wine, сколько в том, что можно сделать в мире программирования / сценариев.