私にはこのようなことが起こるとは全く考えていませんでしたが、ここにあります。¯\_(ツ)_/¯
最初にソースコードを見ずに、間違ったディレクトリ内のリポジトリでビルドスクリプトを実行しました。スクリプトは次のとおりですScripts/BuildLocalWheelLinux.sh
。
cd ../Dependencies/cpython
mkdir debug
cd debug
../configure --with-pydebug --enable-shared
make
cd ../../..
cd ..
mkdir -p cmake-build-local
cd cmake-build-local
rm -rf *
cmake .. -DMVDIST_ONLY=True -DMVPY_VERSION=0 -DMVDPG_VERSION=local_build
make -j
cd ..
cd Distribution
python3 BuildPythonWheel.py ../cmake-build-local/[redacted]/core.so 0
python3 -m ensurepip
python3 -m pip install --upgrade pip
[more pip install stuff]
python3 -m setup bdist_wheel --plat-name manylinux1_x86_64 --dist-dir ../dist
cd ..
cd Scripts
危険な部分は次のとおりです。
mkdir -p cmake-build-local
cd cmake-build-local
rm -rf *
ところで、とても考えてみると本当にダメなことがないようでした。
このスクリプトを実行する方法はですcd Scripts; ./BuildLocalWheelLinux.sh
。最初に実行したときに最後の行にエラーが表示されました(後でわかるように)。急いで「多分ドキュメントが古いかもしれないので、プロジェクトルートで実行してみようかと思いました。だから走りました。./Scripts/BuildLocalWheelLinux.sh
突然vscodesテーマとズームレベルが変更され、zsh端末設定がリセットされました。私は何が起こっているのかを理解し、Ctrl + Cを押しました。
ファイルはいくつか残っていますが、明確なパターンはありません。
$ ls -la
total 216
drwx------ 27 felix felix 4096 May 12 18:08 .
drwxr-xr-x 3 root root 4096 Apr 15 16:39 ..
-rw------- 1 felix felix 12752 Apr 19 11:07 .bash_history
-rw-r--r-- 1 felix felix 3980 Apr 15 13:40 .bashrc
drwxrwxrwx 7 felix felix 4096 May 12 18:25 .cache
drwx------ 8 felix felix 4096 May 12 18:26 .config
drwx------ 3 root root 4096 Apr 13 21:40 .dbus
drwx------ 2 felix felix 4096 Apr 30 12:18 .docker
drwxr-xr-x 8 felix felix 4096 Apr 15 13:40 .dotfiles
-rw------- 1 felix felix 8980 Apr 13 18:10 examples.desktop
-rw-r--r-- 1 felix felix 196 Apr 19 15:19 .gitconfig
-rw-r--r-- 1 felix felix 55 Apr 16 13:56 .gitconfig.old
-rw-r--r-- 1 felix felix 1040 Apr 15 13:40 .gitmodules
drwx------ 3 felix felix 4096 May 6 10:10 .gnupg
-rw-r--r-- 1 felix felix 1848 May 5 14:24 heartbeat.tcl
-rw------- 1 felix felix 1610 Apr 13 20:36 .ICEauthority
drwxr-xr-x 5 felix felix 4096 Apr 21 16:39 .ipython
drwxr-xr-x 2 felix felix 4096 May 4 09:35 .jupyter
-rw------- 1 felix felix 161 Apr 27 14:23 .lesshst
drwx------ 3 felix felix 4096 May 12 18:08 .local
-rw-r--r-- 1 felix felix 140 Apr 29 17:54 minicom.log
drwx------ 5 felix felix 4096 Apr 13 18:25 .mozilla
drwxr-xr-x 2 felix felix 4096 Apr 13 18:10 Music
drwxr-xr-x 6 felix felix 4096 May 12 17:16 Nextcloud
-rw-r--r-- 1 felix felix 52 Apr 16 11:43 .nix-channels
-rw------- 1 felix felix 1681 Apr 20 10:33 nohup.out
drwx------ 3 felix felix 4096 Apr 15 11:16 .pki
-rw------- 1 felix felix 946 Apr 16 11:43 .profile
drwxr-xr-x 2 felix felix 4096 Apr 13 18:10 Public
drwxr-xr-x 2 felix felix 4096 May 12 18:08 .pylint.d
-rw------- 1 felix felix 1984 May 12 18:06 .pythonhist
-rw-r--r-- 1 felix felix 2443 Apr 19 13:40 README.md
drwxr-xr-x 13 felix felix 4096 May 12 18:08 repos
drwxr-xr-x 6 felix felix 4096 Apr 19 11:08 snap
drwx------ 3 felix felix 4096 May 5 15:33 .ssh
drwxr-xr-x 5 felix felix 4096 Apr 26 17:39 .stm32cubeide
drwxr-xr-x 5 felix felix 4096 May 5 15:52 .stm32cubemx
drwxr-xr-x 2 felix felix 4096 Apr 23 11:44 .stmcube
drwxr-xr-x 2 felix felix 4096 Apr 13 18:10 Templates
drwxr-xr-x 3 felix felix 4096 Apr 19 11:57 test
drwxr-xr-x 2 felix felix 4096 Apr 13 18:10 Videos
-rw------- 1 felix felix 14313 May 12 10:45 .viminfo
-rw-r--r-- 1 felix felix 816 Apr 15 13:40 .vimrc
drwxr-xr-x 3 felix felix 4096 Apr 16 12:08 .vscode
-rw-r--r-- 1 felix felix 2321 Apr 19 18:47 weird_bug.txt
-rw-r--r-- 1 felix felix 162 Apr 15 13:40 .xprofile
.config
PicturesやDesktopなどのいくつかの標準XDGディレクトリは消えていますが、.bashrcはまだ存在しています。.nix-channels
それでも存在するが、.nix-defexpr
核兵器によって破壊された。
したがって、これは2つの質問を提起します。
- 何が間違っていますか?今後このようなことが発生しないように、このビルドスクリプトを修正して宣伝したいと思います。
- ファイルはどの順序で削除されますか?明らかにアルファベット順ではありませんが、
*
アルファベット順に拡張されているので、ここでは他のことが起こっているようです。
ベストアンサー1
何が間違っていますか?
たとえば、ホームディレクトリから始める/home/felix
か、/home/felix/src
またはで始めます/home/felix/Downloads/src
。
cd ../Dependencies/cpython
何もないので失敗します../Dependencies
。
mkdir debug cd debug
debug
これで、スタートアップディレクトリのサブディレクトリにあります。
../configure --with-pydebug --enable-shared make
../configure
またはこれがないため、何もしませんmake
。
cd ../../.. cd ..
最初にディレクトリの深さが3レベル以下の場合、cd debug
4番目のレベルに達すると、現在のディレクトリはルートディレクトリになります。 4つのディレクトリレベルで起動した場合、現在のディレクトリは現在です/home
。
mkdir -p cmake-build-local
/
または書き込み権限がないため、この操作は失敗します/home
。
cd cmake-build-local
ディレクトリがないため失敗しますcmake-build-local
。
今私たちは...
ファイルはどの順序で削除されますか?
rm -rf *
これは、現在のディレクトリ(/
または)のすべてのファイルを再帰的に削除しようとします/home
。ホームディレクトリはアルファベット順に列挙されますが、下のファイルはディレクトリ巡回順序に関係なく列挙されます。同じ順序ですls --sort=none
(rm
何らかの理由で別の順序を使用することを決定しない限り)。この順序は通常バックアップでは維持されず、ディレクトリ内のファイルが作成または削除されたときに変更されることがあります。
スクリプトを変更する方法
set -e
まず、ほとんどすべてのシェルスクリプトは上部近くに配置する必要があります。set -e
コマンドが失敗すると、スクリプトは中断されます。 (終了状態が0でないとコマンドは失敗します。)set -e
機能しない状況があるため、万病痛歯磨きではありません。しかし、これはあなたが期待できる最小値であり、ここでは正しいことを行います。
(スクリプトは次から始める必要があります。シェルボーン#!/bin/sh
またはのように使用するシェルを表す行#!/bin/bash
。しかし、それは問題を解決するのに役立ちません。 )
rm -rf *
、または同様の変形rm -rf $foo.*
($foo
結果が空の場合はどうなりますか?)は壊れやすいです。代わりにここ
mkdir -p cmake-build-local
cd cmake-build-local
rm -rf *
ディレクトリを削除して再作成する方がより安定しています。 (これはディレクトリの権限を保持しませんが、ここでは問題ではありません。)
rm -rf cmake-build-local
mkdir cmake-build-local
cd cmake-build-local
make clean
別のアプローチは、間違ったファイルを削除するのにはより強力ですが、欠落しているファイルを削除するにはより脆弱です。rm
既知のビルドターゲットと既知の拡張子(可能な限り)を使用してコマンドを実行し、ビルドされていることがわかっているファイルのみをrm *.o
削除します。