It's a type of Planche
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. # see if which can find the command in the PATH
  2. # defined before other aliases so they don't get
  3. # added if the command they use isn't installed
  4. cmds_exist () {
  5. for cmd in ${@}; do
  6. if ! PATH="/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" which ${1} &>/dev/null; then
  7. return 1
  8. fi
  9. done
  10. return 0
  11. }
  12. if cmds_exist sudo; then
  13. if cmds_exist apt-fast; then
  14. alias apt-fast="sudo apt-fast"
  15. if [ -z $APT_CMD ]; then APT_CMD="apt-fast"; fi
  16. fi
  17. if cmds_exist apt; then
  18. alias apt="sudo apt"
  19. if [ -z $APT_CMD ]; then APT_CMD="apt"; fi
  20. fi
  21. if cmds_exist apt-get; then
  22. alias apt-get="sudo apt-get"
  23. if [ -z $APT_CMD ]; then APT_CMD="apt-get"; fi
  24. fi
  25. alias dist-upgrade="${APT_CMD} update -qq && ${APT_CMD} dist-upgrade"
  26. alias upgrade="${APT_CMD} update -qq && ${APT_CMD} upgrade --with-new-pkgs"
  27. if cmds_exist add-apt-repository; then
  28. alias add-apt-repository="sudo add-apt-repository"
  29. fi
  30. if cmds_exist apt-key; then
  31. alias apt-recv-key="sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys"
  32. fi
  33. alias dpkg="sudo dpkg"
  34. alias cleanoldkernels="dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'$(uname -r)'/q;p' | xargs ${APT_CMD} purge"
  35. function apt-get-update-repo () {
  36. options="-o Dir::Etc::sourcelist=sources.list.d/${1}.list -o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0
  37. '"
  38. ${APT_CMD} ${options} update
  39. }
  40. alias service="sudo /usr/sbin/service"
  41. alias iwconfig="sudo /sbin/iwconfig"
  42. alias iw="sudo /sbin/iw"
  43. alias ip="sudo /sbin/ip"
  44. alias iptables="sudo /sbin/iptables"
  45. alias ip6tables="sudo /sbin/ip6tables"
  46. if cmds_exist tcpdump; then
  47. alias tcpdump="sudo /usr/sbin/tcpdump"
  48. fi
  49. if cmds_exist iftop; then
  50. alias iftop="sudo /usr/sbin/iftop"
  51. fi
  52. if cmds_exist nethogs; then
  53. alias nethogs="sudo /usr/sbin/nethogs"
  54. fi
  55. if cmds_exist iotop; then
  56. alias iotop="sudo /usr/sbin/iotop"
  57. fi
  58. if cmds_exist unbound-control; then
  59. alias unbound-control="sudo /usr/sbin/unbound-control"
  60. fi
  61. alias fsck="sudo /sbin/fsck"
  62. if cmds_exist lxc-start; then
  63. alias lxc-start="sudo /usr/bin/lxc-start"
  64. fi
  65. if cmds_exist lxc-stop; then
  66. alias lxc-stop="sudo /usr/bin/lxc-stop"
  67. fi
  68. if cmds_exist lxc-attach; then
  69. alias lxc-attach="sudo /usr/bin/lxc-attach"
  70. fi
  71. if cmds_exist lxc-ls; then
  72. alias lxc-ls="sudo /usr/bin/lxc-ls"
  73. fi
  74. if [ -f /opt/borgbackup/bin/borg ]; then
  75. alias overstock-borg="sudo BORG_REPO=/mnt/c_isilon/home/nbohman/borgbackup BORG_PASSPHRASE='aey4zah4eish9weekaizega7ooph9joo9eep3otoh4uev9eez4oof9Ko7ga3zah' /opt/borgbackup/bin/borg"
  76. fi
  77. fi
  78. if cmds_exist grc; then
  79. alias mtr="grc mtr --curses"
  80. alias ping="grc ping"
  81. alias dig="grc dig"
  82. fi
  83. if cmds_exist pigz; then
  84. alias gzip="pigz"
  85. fi
  86. if cmds_exist sfs; then
  87. alias organize_downloads="sfs ~/.config/sfs/Dowloads.yaml ~/Downloads"
  88. fi
  89. alias xz="xz -T0"
  90. if cmds_exist zfs; then
  91. function zfs_snapshots_by_size () {
  92. root_dataset=${1}
  93. zfs list -r -t snapshot -o name,used,creation ${root_dataset} | sort -k 2,2h
  94. }
  95. fi
  96. if cmds_exist lsblk; then
  97. alias lsblk="lsblk -o 'NAME,UUID,PARTUUID,SIZE,TYPE,SCHED,FSTYPE,LABEL,MOUNTPOINT'"
  98. fi
  99. if cmds_exist git; then
  100. alias git-reset-hard="git fetch origin; git reset --hard origin/master; git clean -f"
  101. fi
  102. alias ssh-remove-host-key="ssh-keygen -f "/home/natrinicle/.ssh/known_hosts" -R"
  103. alias ssh-stop-multiplex="ssh -O stop"
  104. alias extract-jpg-from-dngs="for file in *.dng; do exiftool -b -JpgFromRaw $file > $file.jpg; done"
  105. if cmds_exist pwgen; then
  106. alias genpass="pwgen -1yBn"
  107. fi
  108. if cmds_exist dig; then
  109. alias dig-short="dig +short"
  110. fi
  111. alias load="uptime | grep -Eo '([0-9]+\.[0-9]+,? ?){3}'"
  112. alias pip="/usr/bin/env pip"
  113. alias pip3="/usr/bin/env pip3"
  114. scp_home_rc () {
  115. scp ${@:2} .bashrc ${1}:~
  116. scp ${@:2} .bash_aliases ${1}:~
  117. scp ${@:2} .vimrc ${1}:~
  118. }
  119. # Add a path to $PATH if it's not already in there
  120. # pathmunge /path/to/add
  121. pathmunge () {
  122. if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
  123. if [ "$2" = "after" ] ; then
  124. PATH=$PATH:$1
  125. else
  126. PATH=$1:$PATH
  127. fi
  128. fi
  129. }
  130. if cmds_exist ipmitool ; then
  131. export IPMI_USER="ADMIN"
  132. export IPMI_PASS="ADMIN"
  133. # Set boot device on next boot to pxe
  134. ipmipxe() {
  135. ipmitool -I lanplus -H ${1} -U ADMIN -P ADMIN chassis bootdev pxe
  136. }
  137. # Reset a hung bmc
  138. ipmiresetbmc() {
  139. ipmitool -I lanplus -H ${1} -U ADMIN -P ADMIN mc reset cold
  140. }
  141. # Power cycle a server from it's bmc
  142. ipmipowercycle() {
  143. ipmitool -I lanplus -H ${1} -U ADMIN -P ADMIN chassis power cycle
  144. }
  145. # Ipmi wrapper with username/password for any other commands
  146. ipmi() {
  147. # ${@:2} pulls in all argv from 2 to the end of the line
  148. ipmitool -I lanplus -H ${1} -U ${IPMI_USER} -P ${IPMI_PASS} ${@:2}
  149. }
  150. fi
  151. if cmds_exist pv dd; then
  152. dd-progress() {
  153. sudo dd if=${1} ${@:3} | pv -tpreb | sudo dd of=${2} ${@:3}
  154. }
  155. fi
  156. if [ -d /sys/devices/platform/applesmc.768 ]; then
  157. fanspeed() {
  158. # Pulled from http://ubuntuforums.org/showthread.php?t=1645913&p=10246215#post10246215
  159. # Requires applesmc-dkms package and modprobe applesmc
  160. # Included in kernels >=2.6.27
  161. service mbpfan stop
  162. echo 1 | sudo tee /sys/devices/platform/applesmc.768/fan1_manual > /dev/null
  163. echo 1 | sudo tee /sys/devices/platform/applesmc.768/fan2_manual > /dev/null
  164. echo $1 | sudo tee /sys/devices/platform/applesmc.768/fan1_output > /dev/null
  165. echo $1 | sudo tee /sys/devices/platform/applesmc.768/fan2_output > /dev/null
  166. }
  167. fi
  168. extract () {
  169. if [ -f $1 ] ; then
  170. case $1 in
  171. *.tar.bz2) tar xjf $1 ;;
  172. *.tar.gz) tar xzf $1 ;;
  173. *.bz2) bunzip2 $1 ;;
  174. *.rar) unrar e $1 ;;
  175. *.gz) gunzip $1 ;;
  176. *.tar) tar xf $1 ;;
  177. *.tbz2) tar xjf $1 ;;
  178. *.tgz) tar xzf $1 ;;
  179. *.zip) unzip $1 ;;
  180. *.Z) uncompress $1 ;;
  181. *.7z) 7z x $1 ;;
  182. *) echo "'$1' cannot be extracted via extract()" ;;
  183. esac
  184. else
  185. echo "'$1' is not a valid file"
  186. fi
  187. }
  188. if cmds_exist ldapsearch; then
  189. export LDAP_USER="nate.bohman"
  190. ldapmultisearch() {
  191. if [ -z $LDAP_USER ]; then
  192. read -p "Username: " LDAP_USER
  193. export LDAP_USER
  194. fi
  195. read -s -p "${LDAP_USER}'s Password: " LDAP_PASSWORD
  196. echo ""
  197. for uid in "${@}"; do
  198. ldapsearch -x -ZZ -D "${LDAP_USER}@purestorage.com" -b "ou=PSUsers,dc=purestorage,dc=com" -h ldap.purestorage.com -w ${LDAP_PASSWORD} uid=${uid}
  199. if [ ${?} != 0 ]; then
  200. echo "ldapsearch had an error"
  201. unset LDAP_PASSWORD
  202. break
  203. fi
  204. done
  205. export LDAP_PASSWORD
  206. }
  207. ldapfindteam() {
  208. LDAP_SEARCH="$(ldapmultisearch ${1})"
  209. MANAGER_DN=$(echo "${LDAP_SEARCH}" | grep -Po "(?<=^manager: ).*$")
  210. MANAGER_NAME=$(echo "${LDAP_SEARCH}" | grep -Po "(?<=^name: ).*$")
  211. MANAGER_TITLE=$(echo "${LDAP_SEARCH}" | grep -Po "(?<=^title: ).*$")
  212. TEAM_UIDS=$(ldapsearch -x -ZZ -D "${LDAP_USER}@purestorage.com" -b "ou=PSUsers,dc=purestorage,dc=com" -h ldap.purestorage.com -w ${LDAP_PASSWORD} "manager=${MANAGER_DN}" | grep -Po "(?<=^uid: ).*")
  213. echo "Manager: ${MANAGER_NAME} - ${MANAGER_TITLE}"
  214. for character in $(echo "Manager: ${MANAGER_NAME} - ${MANAGER_TITLE}" | wc -c); do echo -e "-"; done
  215. ldapmultisearch ${TEAM_UIDS} | grep -Po "(?<=^name: ).*$"
  216. }
  217. fi
  218. if cmds_exist curl; then
  219. test_redirect() {
  220. if [ $(echo $2 | cut -d":" -f1) == "https" ]; then
  221. port=443
  222. else
  223. port=80
  224. fi
  225. domain=$(echo $2 | cut -d"/" -f3)
  226. # echo "IP $1"
  227. # echo "Port $port"
  228. # echo "Domain $domain"
  229. # echo "URL $2"
  230. echo "Testing $2 against $1:$port"
  231. curl --resolve $domain:$port:$1 $2 --progress-bar --insecure -sL -w "%{http_code} %{url_effective}\\n" -o /dev/null
  232. }
  233. fi
  234. psgrep() {
  235. ps auxw | grep "$(echo ${@} | sed 's/^\(.\)/[\1]/')"
  236. }
  237. ps_forest_pid () {
  238. ps --forest -o user,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,cmd -g $(ps -o sid= -p ${1})
  239. }
  240. psmem() {
  241. # Print the number of processes matching name given, memory per process, and total memory usage
  242. ps -C $1 -O rss | gawk '{ count ++; sum += $2 }; END {count --; print "Number of processes =",count; print "Memory usage per process =",sum/1024/count, "MB"; print "Total memory usage =", sum/1024, "MB" ;};'
  243. }
  244. lsof_proc_open_cons () {
  245. lsof -c ${1} -a -i${2}
  246. }
  247. memused() {
  248. # Get ram total, free, and used without cached/buffers then calculate the percentage used to the nearest whole number
  249. mem_total=$(cat /proc/meminfo | egrep "^MemTotal:" | egrep -o "[0-9]+")
  250. mem_free=$(echo $(cat /proc/meminfo | egrep "^MemFree:" | egrep -o "[0-9]+") + $(cat /proc/meminfo | egrep "^Cached:" | egrep -o "[0-9]+") | bc)
  251. mem_used=$(echo ${mem_total} - ${mem_free} | bc)
  252. percent_used=$(awk "BEGIN { pc=${mem_used}/${mem_total}*100; i=int(pc); print (pc-i<0.5)?i:i+1 }")
  253. # Output as used/total (percent%)
  254. echo -e "${mem_used}/${mem_total} (${percent_used}%)"
  255. }
  256. swapused() {
  257. # Get swap total, free, and used then calculate the percentage used to the nearest whole number
  258. swap_total=$(cat /proc/meminfo | egrep "^SwapTotal:" | egrep -o "[0-9]+")
  259. swap_free=$(cat /proc/meminfo | egrep "^SwapFree:" | egrep -o "[0-9]+")
  260. swap_used=$(echo ${swap_total} - ${swap_free} | bc)
  261. percent_used=$(awk "BEGIN { pc=${swap_used}/${swap_total}*100; i=int(pc); print (pc-i<0.5)?i:i+1 }")
  262. # Output as used/total (percent%)
  263. echo -e "${swap_used}/${swap_total} (${percent_used}%)"
  264. }
  265. suspend_process_soft() {
  266. for pid in $(psgrep $1 | awk '{print $2}'); do
  267. kill -TSTP ${pid}
  268. done
  269. }
  270. suspend_process_hard() {
  271. for pid in $(psgrep $1 | awk '{print $2}'); do
  272. kill -STOP ${pid}
  273. done
  274. }
  275. unsuspend_process() {
  276. for pid in $(psgrep $1 | grep -P " Tl? " | awk '{print $2}'); do
  277. kill -CONT ${pid}
  278. done
  279. }
  280. zram_stat() {
  281. for i in /sys/block/zram*; do
  282. if [ -f $i/compr_data_size ] && [ -f $i/orig_data_size ]; then
  283. compr=$(< $i/compr_data_size)
  284. orig=$(< $i/orig_data_size)
  285. ratio=0
  286. if [ $compr -gt 0 ]; then
  287. ratio=$(echo "scale=2; $orig*100/$compr" | bc -q)
  288. fi
  289. echo -e "/dev/${i/*\/}:\t$ratio% ($orig -> $compr)"
  290. fi
  291. done
  292. }
  293. ksm_stat() {
  294. # offered = pages_sharing + pages_shared + pages_unshared + pages_volatile;
  295. # saved = pages_sharing - pages_shared;
  296. # savings (ksm_ratios) = saved / offered;
  297. page_size=$(getconf PAGE_SIZE)
  298. pages_shared=$(cat /sys/kernel/mm/ksm/pages_shared)
  299. pages_sharing=$(cat /sys/kernel/mm/ksm/pages_sharing)
  300. pages_unshared=$(cat /sys/kernel/mm/ksm/pages_unshared)
  301. pages_volatile=$(cat /sys/kernel/mm/ksm/pages_volatile)
  302. offered=$(echo "${pages_sharing} + ${pages_shared} + ${pages_unshared} + ${pages_volatile}" | bc -l)
  303. offered_bytes=$(echo "${offered} * ${page_size}" | bc -l)
  304. offered_human="$(echo "${offered_bytes}" | numfmt --to=iec-i)B"
  305. saved=$(echo "${pages_sharing} - ${pages_shared}" | bc -l)
  306. saved_bytes=$(echo "${saved} * ${page_size}" | bc -l)
  307. saved_human="$(echo "${saved_bytes}" | numfmt --to=iec-i)B"
  308. saved_percent="0.00"
  309. if [ ${offered} -gt 0 ]; then
  310. saved_percent=$(python -c "print(round(float($(echo "${saved} / ${offered} * 100" | bc -l)), 2))")
  311. fi
  312. echo -e "${saved_human}/${offered_human} (${saved_percent}%)"
  313. }
  314. if cmds_exist dkms; then
  315. if cmds_exist sudo; then
  316. DKMS_CMD="sudo dkms"
  317. else
  318. DKMS_CMD="dkms"
  319. fi
  320. dkms-buildall() {
  321. $DKMS_CMD status | sed s/,//g | awk '{print "-m",$1,"-v",$2}' | while read line; do ls /var/lib/initramfs-tools | xargs -n 1 $DKMS_CMD install $line -k; done
  322. }
  323. fi
  324. if cmds_exist sudo; then
  325. function check_open_files () {
  326. alert_percent=${1:-0.75}
  327. for running_pid in $(sudo ps aux | awk '{print $2}' | tail -n+2); do
  328. if sudo test -d /proc/${running_pid}/fd && sudo test -f /proc/${running_pid}/limits; then
  329. open_files=$(sudo ls -l /proc/${running_pid}/fd | wc -l)
  330. open_limit=$(sudo grep "open files" /proc/${running_pid}/limits | awk '{print $4}')
  331. alert_limit=$(echo "((${open_limit} * ${alert_percent}) + 0.5) / 1" | bc)
  332. if [ ${open_files} -gt ${alert_limit} ]; then
  333. echo "PID ${running_pid} has ${open_files} open files with a limit of ${open_limit} max"
  334. fi
  335. fi
  336. done
  337. }
  338. fi
  339. if cmds_exist sudo wg; then
  340. alias wg="sudo /usr/bin/wg"
  341. fi
  342. if cmds_exist sudo wg-quick; then
  343. alias wg-quick="sudo /usr/bin/wg-quick"
  344. fi
  345. if cmds_exist nc; then
  346. function port_open_check () {
  347. nc -zv ${@}
  348. }
  349. fi
  350. if cmds_exist youtube-dl; then
  351. alias youtube-dl-best="youtube-dl -f bestvideo+bestaudio"
  352. fi
  353. function dedup_text () {
  354. # Can use inline or with a filename
  355. # echo -e "Test\nTest\nTest\nTest2\nTest" | dedup_text
  356. # dedup_text /var/log/badly_duplicated_log > /var/log/deduplicated_log
  357. # Stolen from https://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix
  358. # seen is an associative-array that Awk will pass every line of the file to.
  359. # If a line isn't in the array then seen[$0] will evaluate to false.
  360. # The ! is a logical NOT operator and will invert the false to true.
  361. # Awk will print the lines where the expression evaluates to true.
  362. # The ++ increments seen so that seen[$0] == 1 after the first time a
  363. # line is found and then seen[$0] == 2, and so on.
  364. # Awk evaluates everything but 0 and "" (empty string) to true.
  365. # If a duplicate line is placed in seen then !seen[$0] will evaluate to
  366. # false and the line will not be written to the output.
  367. awk '!seen[$0]++'
  368. }
  369. function escape_string () {
  370. # string=${@}
  371. # echo ${string//\\/\\\\}
  372. printf "%q" "${@}"
  373. }
  374. function round () {
  375. round_float=${1}
  376. round_places=${2:-2}
  377. python -c "print(round(float(${round_float}), ${round_places}))"
  378. }
  379. function percent_change () {
  380. old_number=${1}
  381. new_number=${2}
  382. if [ $(echo "${new_number} < ${old_number}" | bc -l) -eq 1 ]; then
  383. percent_decrease=$(round $(echo "((${old_number} - ${new_number}) / ${old_number}) * 100" | bc -l) 2)
  384. echo "${old_number} -> ${new_number} is a ${percent_decrease}% decrease"
  385. else
  386. percent_increase=$(round $(echo "((${new_number} - ${old_number}) / ${old_number}) * 100" | bc -l) 2)
  387. echo "${old_number} -> ${new_number} is a ${percent_increase}% increase"
  388. fi
  389. }
  390. # add thefuck function
  391. #eval $(thefuck --alias)
  392. function fuck () {
  393. TF_PREVIOUS=$(fc -ln -1);
  394. TF_CMD=$(
  395. TF_ALIAS=fuck
  396. TF_SHELL_ALIASES=$(alias)
  397. PYTHONIOENCODING=utf-8
  398. thefuck $TF_PREVIOUS THEFUCK_ARGUMENT_PLACEHOLDER $@
  399. ) && eval $TF_CMD;
  400. history -s $TF_CMD;
  401. }
  402. if cmds_exist ffmpeg; then
  403. convert_video_to_webm () {
  404. filename=${1}
  405. filename_wo_ext=$(echo ${filename} | rev | cut -d"." -f2- | rev)
  406. # First pass
  407. ffmpeg -i ${filename} -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 21 -threads 8 -speed 4 -tile-columns 6 -frame-parallel 1 -an -f webm -y /dev/null
  408. # Second pass
  409. ffmpeg -i ${filename} -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 21 -threads 8 -speed 2 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 96k -f webm ${filename_wo_ext}.webm
  410. }
  411. stabilize_video () {
  412. filename=${1}
  413. filename_wo_ext=$(echo ${filename} | rev | cut -d"." -f2- | rev)
  414. filename_ext=$(echo ${filename} | rev | cut -d"." -f1 | rev)
  415. shakiness=${2:-5}
  416. accuracy=${3:-15}
  417. smoothing=${4:-30}
  418. # First pass
  419. ffmpeg -i ${filename} -vf vidstabdetect=shakiness=${shakiness}:accuracy=${accuracy} -f null -
  420. # Second pass
  421. ffmpeg -i ${filename} -vf vidstabtransform=smoothing=${smoothing}:input="transforms.trf" ${filename_wo_ext}.stabilized.${filename_ext}
  422. }
  423. if cmds_exist flac; then
  424. convert_flac_to_mp3 () {
  425. filename=${1}
  426. filename_wo_ext=$(echo ${filename} | rev | cut -d"." -f2- | rev)
  427. flac --silent --decode --stdout "${filename}" | ffmpeg -i - -map 0:a:0 -b:a 320k -v 0 -f mp3 "${filename_wo_ext}.mp3"
  428. }
  429. fi
  430. fi
  431. # Nuitka converts Python source into C
  432. if cmds_exist nuitka; then
  433. # Convert and compile all .py files in current directory to modules
  434. function nuitka_compile_all_as_modules() {
  435. for py_file in *.py; do
  436. # Ignore things like __init__.py that tend to break
  437. if echo ${py_file} | grep -qv "^__"; then
  438. nuitka --module ${py_file} --recurse-none --show-progress
  439. fi
  440. done
  441. }
  442. # Undo Nuitka module conversion and compilation
  443. function nuitka_remove_all_compiled_modules() {
  444. rm -r *.build
  445. rm *.so
  446. rm *.pyi
  447. }
  448. fi