Compare commits
15 Commits
41f4adbd47
...
main
Author | SHA1 | Date | |
---|---|---|---|
7a0675d357 | |||
56f5107747 | |||
8407d3c051 | |||
879f8b5d08 | |||
cb66429cb6 | |||
09729afd48 | |||
ea8985ade5 | |||
ff57016f0c | |||
9ecf4d2fde | |||
98e335ac07 | |||
8c512d1ba8 | |||
9dc6756eff | |||
16cf4280fd | |||
d12079ff73 | |||
1446e2a977 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.venv
|
60
README.md
60
README.md
@ -1,4 +1,26 @@
|
||||
# scripts
|
||||
# Scripts
|
||||
|
||||
- [Configure SSH connection helper (remote pc not server)](#configure-ssh-connection-helper-remote-pc-not-server)
|
||||
- [Docker commands](#docker-commands)
|
||||
- [Remove every user R packages](#remove-every-user-r-packages)
|
||||
- [Setup Git SSH key](#setup-git-ssh-key)
|
||||
- [Font ligature test](#font-ligature-test)
|
||||
- [QEMU cheat sheet](#qemu-cheat-sheet)
|
||||
- [Share internet between two Linux interfaces using connman](#share-internet-between-two-linux-interfaces-using-connman)
|
||||
- [IP Host (eth1 has internet, eth0 is remote)](#ip-host-eth1-has-internet-eth0-is-remote)
|
||||
- [IP Remote](#ip-remote)
|
||||
- [Remove DRM from Adobe Digital Editions](#remove-drm-from-adobe-digital-editions)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Setting up Calibre](#setting-up-calibre)
|
||||
- [Getting the DRM-free PDF](#getting-the-drm-free-pdf)
|
||||
- [Loop devices](#loop-devices)
|
||||
- [Install img.xz](#install-imgxz)
|
||||
- [Raise Linux open files limits](#raise-linux-open-files-limits)
|
||||
- [Verify a PGP Signature](#verify-a-pgp-signature)
|
||||
- [Self-signed OpenSSL](#self-signed-openssl)
|
||||
- [interactive](#interactive)
|
||||
- [non-interactive and 10 years expiration](#non-interactive-and-10-years-expiration)
|
||||
- [Bind to port 80 or 443](#bind-to-port-80-or-443)
|
||||
|
||||
## Configure SSH connection helper (remote pc not server)
|
||||
|
||||
@ -18,15 +40,15 @@ Now you can just connect using ssh \$HOST_NAME
|
||||
|
||||
```sh
|
||||
# Remove every images
|
||||
docker images --format="{{.ID}}" | xargs docker rmi
|
||||
docker images --format='{{.ID}}' | xargs docker rmi
|
||||
# Remove every containers
|
||||
docker ps -a --format="{{.ID}}" | xargs docker stop | xargs docker rm
|
||||
docker ps -a --format='{{.ID}}' | xargs docker stop | xargs docker rm
|
||||
# Remove every volumes
|
||||
docker volume ls --format="{{.Name}}" | xargs docker volume rm
|
||||
docker volume ls --format='{{.Name}}' | xargs docker volume rm
|
||||
# Remove every anonymous images (cached)
|
||||
docker images --format="{{.Repository}};{{.Tag}};{{.ID}}" | grep "<none>;<none>" | cut -d";" -f 3 | xargs docker rmi
|
||||
docker images --format='{{.Repository}};{{.Tag}};{{.ID}}' | grep '<none>;<none>' | cut -d ';' -f 3 | xargs docker rmi
|
||||
# Get all used images tag in dir $PATH_ANALYSE
|
||||
find $PATH_ANALYSE -name "Dockerfile*" | while read file; do cat $file; echo ""; done | grep -e FROM | cut -d " " -f 2 | sed $'s/[^[:print:]\t]//g' | sort -u | xargs -n1 docker pull
|
||||
find $PATH_ANALYSE -name 'Dockerfile*' | while read file; do cat $file; echo ''; done | grep -e FROM | cut -d ' ' -f 2 | sed $'s/[^[:print:]\t]//g' | sort -u | xargs -n1 docker pull
|
||||
# Calculate total docker images size
|
||||
docker images --format {{.ID}} | xargs -n1 docker inspect | jq '.[0]["Size"]' | paste -sd + | bc | format_bytes_str
|
||||
```
|
||||
@ -35,7 +57,7 @@ docker images --format {{.ID}} | xargs -n1 docker inspect | jq '.[0]["Size"]' |
|
||||
|
||||
```R
|
||||
my_packages = as.data.frame(installed.packages()[, c(1, 3:4)])
|
||||
my_packages = my_packages[my_packages$Priority != "base",]
|
||||
my_packages = my_packages[my_packages$Priority != 'base',]
|
||||
for(lib in .libPaths()) lapply(my_packages$Package, remove.packages, lib = lib)
|
||||
```
|
||||
|
||||
@ -43,8 +65,8 @@ for(lib in .libPaths()) lapply(my_packages$Package, remove.packages, lib = lib)
|
||||
|
||||
```sh
|
||||
# Generate a SSH key pair
|
||||
ssh-keygen -t rsa -b 4096 -o -a 100 -C "email@example.com" -f ~/.ssh/$KEY_NAME
|
||||
ssh-keygen -t ed25519 -a 100 -C "email@example.com" -f ~/.ssh/$KEY_NAME
|
||||
ssh-keygen -t rsa -b 4096 -o -a 100 -C 'email@example.com' -f ~/.ssh/$KEY_NAME
|
||||
ssh-keygen -t ed25519 -a 100 -C 'email@example.com' -f ~/.ssh/$KEY_NAME
|
||||
# Copy the public key to clipboard
|
||||
cat ~/.ssh/$KEY_NAME.pub | xclip
|
||||
# Paste the contents into a new SSH key holder in https://github.com/settings/keys
|
||||
@ -54,7 +76,7 @@ ssh -T git@github.com
|
||||
git remote set-url origin git@github.com:username/your-repository.git
|
||||
# Add key to SSH config file (~/.ssh/config)
|
||||
echo -e "\n\nHost github.com\n\tIdentityFile ~/.ssh/$KEY_NAME" >> ~/.ssh/config
|
||||
cat KEY_FILE | ssh REMOTE "cat >> ~/.ssh/authorized_keys"
|
||||
cat KEY_FILE | ssh REMOTE 'cat >> ~/.ssh/authorized_keys'
|
||||
```
|
||||
|
||||
## Font ligature test
|
||||
@ -82,7 +104,7 @@ qemu-system-x86_64 $DISK_NAME.img \
|
||||
-name $VM_NAME &
|
||||
```
|
||||
|
||||
## Share internet between two linux interfaces using connman
|
||||
## Share internet between two Linux interfaces using connman
|
||||
|
||||
### IP Host (eth1 has internet, eth0 is remote)
|
||||
|
||||
@ -115,7 +137,7 @@ config <eth0> --ipv4 manual 192.168.137.2 255.255.255.0 192.168.137.1 --nameserv
|
||||
|
||||
### Prerequisites
|
||||
|
||||
In Windows you must have _Adobe Digital Editions_ and _Calibre_ using Chocolatey
|
||||
On Windows, you must have _Adobe Digital Editions_ and _Calibre_ using Chocolatey
|
||||
|
||||
```sh
|
||||
choco install -y adobedigitaleditions calibre
|
||||
@ -125,11 +147,11 @@ choco install -y adobedigitaleditions calibre
|
||||
|
||||
- Download the DeDRM plugin on [GitHub](https://github.com/noDRM/DeDRM_tools).
|
||||
- Extract the plugin archive
|
||||
- Install the plugin in Calibre -> Preferences -> Plugins -> Add from file
|
||||
- Install the plugin in Calibre → Preferences → Plugins → Add from file
|
||||
|
||||
### Getting the DRM-free pdf
|
||||
### Getting the DRM-free PDF
|
||||
|
||||
- Open the pdf using _Adobe Digital Editions_
|
||||
- Open the PDF using _Adobe Digital Editions_
|
||||
- Navigate to C:/Users/\<USER\>/My\ Digital\ Editions
|
||||
- Add the PDF to calibre
|
||||
- The DRM free PDF is available at C:/Users/\<USER\>/Calibre\ Library
|
||||
@ -157,7 +179,7 @@ rm $BLOCK_PATH
|
||||
xzcat $IMG_FILE | dd of=/dev/$DEVICE bs=64k oflag=dsync status=progress
|
||||
```
|
||||
|
||||
## Raise linux open files limits
|
||||
## Raise Linux open files limits
|
||||
|
||||
In the file /etc/security/limits.conf add this :
|
||||
|
||||
@ -189,3 +211,9 @@ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3
|
||||
```sh
|
||||
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj '/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=CommonNameOrHostname'
|
||||
```
|
||||
|
||||
## Bind to port 80 or 443
|
||||
|
||||
[Is there a way for non-root processes to bind to "privileged" ports on Linux?](https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-on-linux)
|
||||
|
||||
[Allow non-root process to bind to port 80 and 443?](https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443)
|
||||
|
33
colours
33
colours
@ -1,33 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Print out escape sequences usable for coloured text on tty.
|
||||
printf 'Colour escapes are %s\n' '\e[${value};...;${value}m'
|
||||
printf 'Values 30..37 are \e[33mforeground colours\e[m\n'
|
||||
printf 'Values 40..47 are \e[43mbackground colours\e[m\n'
|
||||
printf 'Value 1 gives a \e[1mbold look\e[m\n'
|
||||
printf 'Value 2 gives a \e[2mdim look\e[m\n'
|
||||
printf 'Value 3 gives a \e[3mitalic look\e[m\n'
|
||||
printf 'Value 4 gives a \e[4munderlined look\e[m\n'
|
||||
printf 'Value 5 gives a \e[5mblinking look\e[m\n\n'
|
||||
|
||||
# foreground colours
|
||||
for fgc in {30..37}; do
|
||||
# background colours
|
||||
for bgc in {40..47}; do
|
||||
fgc=${fgc#37} # white
|
||||
bgc=${bgc#40} # black
|
||||
|
||||
vals="${fgc:+$fgc;}${bgc}"
|
||||
vals=${vals%%;}
|
||||
|
||||
seq0="${vals:+\e[${vals}m}"
|
||||
printf " %-9s" "${seq0:-(default)}"
|
||||
echo -e -n " ${seq0}TEXT\e[m"
|
||||
echo -e -n " \e[${vals:+${vals+$vals;}}1mBOLD\e[m"
|
||||
echo -e -n " \e[${vals:+${vals+$vals;}}2mDIM\e[m"
|
||||
echo -e -n " \e[${vals:+${vals+$vals;}}3mITA\e[m"
|
||||
echo -e -n " \e[${vals:+${vals+$vals;}}4mUND\e[m"
|
||||
echo -e -n " \e[${vals:+${vals+$vals;}}5mBLI\e[m"
|
||||
done
|
||||
echo; echo
|
||||
done
|
75
colours.sh
Executable file
75
colours.sh
Executable file
@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Print out escape sequences usable for coloured text on tty.
|
||||
# shellcheck disable=2016
|
||||
printf 'Colour escapes are %s\n' '\e[${value};...;${value}m'
|
||||
printf 'Values 30..37 are \e[33mforeground colours\e[m\n'
|
||||
printf 'Values 40..47 are \e[43mbackground colours\e[m\n'
|
||||
printf 'Value 1 gives a \e[1mbold look\e[m\n'
|
||||
printf 'Value 2 gives a \e[2mdim look\e[m\n'
|
||||
printf 'Value 3 gives a \e[3mitalic look\e[m\n'
|
||||
printf 'Value 4 gives a \e[4munderlined look\e[m\n'
|
||||
printf 'Value 5 gives a \e[5mblinking look\e[m\n\n'
|
||||
|
||||
# foreground colours
|
||||
for fgc in {30..37}; do
|
||||
# background colours
|
||||
for bgc in {40..47}; do
|
||||
fgc=${fgc#37} # white
|
||||
bgc=${bgc#40} # black
|
||||
|
||||
vals="${fgc:+$fgc};${bgc}"
|
||||
vals=${vals%%;}
|
||||
|
||||
seq0="${vals:+\e[${vals}m}"
|
||||
printf " %-9s" "${seq0:-(default)}"
|
||||
echo -en " ${seq0}TEXT\e[m"
|
||||
echo -en " \e[${vals:+${vals+$vals}};1mBOLD\e[m"
|
||||
echo -en " \e[${vals:+${vals+$vals}};2mDIM\e[m"
|
||||
echo -en " \e[${vals:+${vals+$vals}};3mITA\e[m"
|
||||
echo -en " \e[${vals:+${vals+$vals}};4mUND\e[m"
|
||||
echo -en " \e[${vals:+${vals+$vals}};5mBLI\e[m"
|
||||
done
|
||||
echo; echo
|
||||
done
|
||||
|
||||
rainbowColor() {
|
||||
local h=$(($1 / 43))
|
||||
local f=$(($1 - 43 * h))
|
||||
local t=$((f * 255 / 43))
|
||||
local q=$((255 - t))
|
||||
|
||||
if [ $h -eq 0 ]
|
||||
then
|
||||
echo "255 $t 0"
|
||||
elif [ $h -eq 1 ]
|
||||
then
|
||||
echo "$q 255 0"
|
||||
elif [ $h -eq 2 ]
|
||||
then
|
||||
echo "0 255 $t"
|
||||
elif [ $h -eq 3 ]
|
||||
then
|
||||
echo "0 $q 255"
|
||||
elif [ $h -eq 4 ]
|
||||
then
|
||||
echo "$t 0 255"
|
||||
elif [ $h -eq 5 ]
|
||||
then
|
||||
echo "255 0 $q"
|
||||
else
|
||||
# execution should never reach here
|
||||
echo '0 0 0'
|
||||
fi
|
||||
}
|
||||
|
||||
rf(){ echo "$1" 0 0; }; gf(){ echo 0 "$1" 0; }; bf(){ echo 0 0 "$1"; }
|
||||
for f in rf gf bf rainbowColor; do
|
||||
for s in "$(seq 0 127)" "$(seq 255 -1 128)"; do
|
||||
for i in $s; do
|
||||
# shellcheck disable=2183,2046
|
||||
printf '\x1b[48;2;%s;%s;%sm ' $($f "$i")
|
||||
done
|
||||
echo -en "\x1b[0m\n"
|
||||
done
|
||||
done
|
65
docker_build
Executable file
65
docker_build
Executable file
@ -0,0 +1,65 @@
|
||||
#!/bin/sh
|
||||
|
||||
repeat_char(){
|
||||
end="$1"
|
||||
for _ in $(seq 1 "$end") ; do
|
||||
printf '%s' "$2";
|
||||
done
|
||||
}
|
||||
|
||||
header(){
|
||||
env printf "┌$(repeat_char 40 ─)┐\n"
|
||||
env printf '│ %-38s │\n' "$1"
|
||||
env printf "└$(repeat_char 40 '─')┘\n"
|
||||
}
|
||||
|
||||
base_images_cache=''
|
||||
|
||||
pull_base_images(){
|
||||
base_images=$(echo "$1" | sed 's/ /\n/g' | rg -v "^($(printf '%s' "$base_images_cache" | sed -s 's/ /\|/g'))$" | paste -sd ' ')
|
||||
# echo "BASE: $base_images"
|
||||
# echo "CACHE: $base_images_cache"
|
||||
if [ -n "$base_images" ]; then
|
||||
base_images_cache="$base_images_cache $base_images"
|
||||
echo 'Downloading base images'
|
||||
echo "$base_images" | xargs -n1 docker pull
|
||||
fi
|
||||
}
|
||||
|
||||
build(){
|
||||
[ ! -d "$1" ] && return 0
|
||||
header "$(basename "$1")"
|
||||
pull_base_images "$(fd Dockerfile "$1" -x rg FROM | cut -d ' ' -f 2 | sort | uniq | paste -sd ' ')"
|
||||
echo 'Building...'
|
||||
if [ -z "$2" ]; then
|
||||
(cd "$1" && docker compose pull)
|
||||
(cd "$1" && docker compose build)
|
||||
else
|
||||
(cd "$1" && docker compose build "$2")
|
||||
fi
|
||||
}
|
||||
|
||||
if ! rc-service docker status > /dev/null; then
|
||||
echo 'Docker is not started, exiting'
|
||||
return 1
|
||||
fi
|
||||
|
||||
build /home/_aspil0w/git/3d-playground
|
||||
build /home/_aspil0w/git/CoverLetter
|
||||
build /home/_aspil0w/git/CurriculumVitae
|
||||
build /home/_aspil0w/git/dotfiles
|
||||
build /home/_aspil0w/git/ESP32Manager
|
||||
build /home/_aspil0w/git/haskell_playground
|
||||
build /home/_aspil0w/git/IntershipReport
|
||||
build /home/_aspil0w/git/notebook
|
||||
build /home/_aspil0w/git/portfolio no_ssl
|
||||
build /home/_aspil0w/git/portfolio_ivo no-ssl
|
||||
build /home/_aspil0w/git/SimpleGradientDescent
|
||||
build /home/_aspil0w/git/sorting_algorithms
|
||||
build /home/_aspil0w/git/VariationalAutoEncoder
|
||||
build /home/_aspil0w/git/ViolaJones
|
||||
build /home/_aspil0w/git/wgan-gp
|
||||
build /home/_aspil0w/git/WGAN-GP_Pytorch
|
||||
build /home/_aspil0w/git/workspace/Data\ analysis/Speed\ dating\ experiment
|
||||
build /home/_aspil0w/git/workspace/Miage/M2/Implementation\ de\ l\'IA
|
||||
build /usr/local/src/Ventoy
|
38
protondb.sh
Executable file
38
protondb.sh
Executable file
@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
echo 'Creating temporary working directory...'
|
||||
rm -rf /tmp/proton-ge-custom
|
||||
mkdir /tmp/proton-ge-custom
|
||||
cd /tmp/proton-ge-custom
|
||||
|
||||
echo 'Creating Steam directory if it does not exist...'
|
||||
mkdir -p ~/.steam/root/compatibilitytools.d
|
||||
|
||||
echo 'Getting ProtonGE metadata'
|
||||
METADATA=$(curl -s https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases/latest | grep browser_download_url | cut -d\" -f4)
|
||||
test -n "$METADATA"
|
||||
# If result is not empty, continue
|
||||
|
||||
echo 'Fetching tarball URL...'
|
||||
TARBALL_URL=$(echo "$METADATA" | grep .tar.gz)
|
||||
TARBALL_NAME=$(basename "$TARBALL_URL")
|
||||
VERSION_NAME=$(echo "$TARBALL_NAME" | sed 's/.tar.gz//')
|
||||
test -d ~/.steam/root/compatibilitytools.d/"$VERSION_NAME" && echo "Version $VERSION_NAME already present, aborting" && exit 0
|
||||
echo "Downloading tarball: $TARBALL_NAME..."
|
||||
curl -# -L "$TARBALL_URL" -o "$TARBALL_NAME" --no-progress-meter
|
||||
|
||||
echo 'Fetching checksum URL...'
|
||||
CHECKSUM_URL=$(echo "$METADATA" | grep .sha512sum)
|
||||
CHECKSUM_NAME=$(basename "$CHECKSUM_URL")
|
||||
echo "Downloading checksum: $CHECKSUM_NAME..."
|
||||
curl -# -L "$CHECKSUM_URL" -o "$CHECKSUM_NAME" --no-progress-meter
|
||||
|
||||
echo "Verifying tarball $TARBALL_NAME with checksum $CHECKSUM_NAME..."
|
||||
sha512sum -c "$CHECKSUM_NAME"
|
||||
# If result is ok, continue
|
||||
|
||||
echo "Extracting $TARBALL_NAME to Steam directory..."
|
||||
tar -xf "$TARBALL_NAME" -C ~/.steam/root/compatibilitytools.d/
|
||||
echo 'All done :)'
|
17
pull.sh
17
pull.sh
@ -12,23 +12,12 @@ cd ..
|
||||
for d in *; do
|
||||
cd "$d" || continue
|
||||
|
||||
#PULL_LOG=$(script -q /dev/null -c 'git pull')
|
||||
#if [ "$PULL_LOG" != "$(env printf 'Already up to date.\r\n')" ]; then
|
||||
# env printf "┌$(__r__ 40 ─)┐\n"
|
||||
# env printf "│ %-38s │\n" "$d"
|
||||
# env printf "└$(__r__ 40 '─')┘\n"
|
||||
# echo "$PULL_LOG"
|
||||
#fi
|
||||
|
||||
# git gc
|
||||
# git clean -fx
|
||||
|
||||
STATUS_LOG=$(script -q /dev/null -c 'git status -s')
|
||||
if [ -n "$STATUS_LOG" ]; then
|
||||
PULL_LOG=$(script -q /dev/null -c 'git pull')
|
||||
if [ "$PULL_LOG" != "$(env printf 'Already up to date.\r\n')" ]; then
|
||||
env printf "┌$(__r__ 40 ─)┐\n"
|
||||
env printf "│ %-38s │\n" "$d"
|
||||
env printf "└$(__r__ 40 '─')┘\n"
|
||||
echo "$STATUS_LOG"
|
||||
echo "$PULL_LOG"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
|
13
setup_unreal.sh
Executable file
13
setup_unreal.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
test -z "$REPO_PATH" && REPO_PATH="$HOME"/git
|
||||
|
||||
git clone git@github.com:EpicGames/UnrealEngine.git -b release --depth 1 "$REPO_PATH"/UnrealEngine
|
||||
cd "$REPO_PATH"/UnrealEngine
|
||||
./Setup.sh
|
||||
./GenerateProjectFiles.sh
|
||||
make
|
||||
cd Engine/Binaries/Linux
|
||||
./UnrealEditor
|
24
status.sh
Executable file
24
status.sh
Executable file
@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
|
||||
__r__(){
|
||||
end="$1"
|
||||
for _ in $(seq 1 "$end"); do
|
||||
printf '%s' "$2";
|
||||
done
|
||||
}
|
||||
|
||||
cd ..
|
||||
|
||||
for d in *; do
|
||||
cd "$d" || continue
|
||||
|
||||
STATUS_LOG=$(script -q /dev/null -c 'git status -s')
|
||||
if [ -n "$STATUS_LOG" ]; then
|
||||
env printf "┌$(__r__ 40 ─)┐\n"
|
||||
env printf "│ %-38s │\n" "$d"
|
||||
env printf "└$(__r__ 40 '─')┘\n"
|
||||
echo "$STATUS_LOG"
|
||||
fi
|
||||
|
||||
cd ..
|
||||
done
|
31
update_req.sh
Executable file
31
update_req.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
repeat_char(){
|
||||
end="$1"
|
||||
for _ in $(seq 1 "$end") ; do
|
||||
printf '%s' "$2";
|
||||
done
|
||||
}
|
||||
|
||||
header(){
|
||||
env printf "┌$(repeat_char 150 ─)┐\n"
|
||||
env printf '│ %-148s │\n' "$1"
|
||||
env printf "└$(repeat_char 150 '─')┘\n"
|
||||
}
|
||||
|
||||
VENV_PATH='./.venv'
|
||||
|
||||
python -m venv --upgrade-deps "$VENV_PATH"
|
||||
# shellcheck disable=1091
|
||||
if [ -f "$VENV_PATH"/Scripts/activate ]; then . "$VENV_PATH"/Scripts/activate
|
||||
elif [ -f "$VENV_PATH"/bin/activate ]; then . "$VENV_PATH"/bin/activate
|
||||
else exit 1; fi
|
||||
pip install --disable-pip-version pur
|
||||
fd requirements.txt ~ | while read -r filename; do
|
||||
header "$(realpath "$filename" | sed "s,$HOME,~,")"
|
||||
pur -r "$filename"
|
||||
done
|
||||
deactivate
|
||||
rm -rf "$VENV_PATH"
|
Reference in New Issue
Block a user