LinuxでVRChatのログをtailしようと思ふたら「そんなファイル無ぇよ」って怒られたのでmkdirの-pしゃまに直して貰つた話


![スクリーンショット_2021-10-06_23-53-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/982908/01de214f-9823-a489-43ca-b01b3026c254.png)
# Prerequisites 〜前提〜
LinuxVR勢の我は、VRChatを起動し로그を見張りたい度に毎回`/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*`と打ち込むのが面倒だったため、`~/VRChat/`内に眞心たっぷりのお手製`tail.sh`を置きてをり、`vrc`と云ふ`alias`で`bash ~/VRChat/tail.sh`を實行可能にしてゐる。

ところが以前語ったVRChat最新の[`Build 1132`についてきたLinuxVR勢特有の버그](https://github.com/ValveSoftware/Proton/issues/1199#issuecomment-922604841)のせいで、VRChatを別目錄へ再安裝するハメとなる。つまり元〻`/media/storage/SteamLibrary/steamapps/compatdata/438100`にあったVRChatを卸載し、代はりに`/home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100`へと安裝する󷲰となった。
これで，`/home/kawanerio/.steam/debian-installation/steamapps/common/VRChat/VRChat_Data/Plugins/x86_64/OVRLipSync.dll`さへ触れなければ，起動時に衝突しない。しかしこれに因りて面倒亊が一つ増𛀁る：

```:vrc
VRChat/tail: 1 行: cd: /media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/: そのようなファイルやディレクトリはありません
```

さう、`~/VRChat/tail.sh`が削除された`/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*`を參照してゐるのだっ。これでは使ひ物にならないので、お手製の`tail.sh`にちと手を加へる󷲰にする。具體的には`/home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*`と`/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*`の兩方を監視させる。

```~/VRChat/tail.sh
HOMEVRCLOGFILEALL=/home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*
MEDIAVRCLOGFILEALL=/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*

tail -f $HOMEVRCLOGFILEALL && tail -f $MEDIAVRCLOGFILEALL
```

いざ`vrc`を實行する。
が...

```:vrc
tail: '/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
tail: ファイルが全く残っていません
```

どうも`tail`は一つでも目錄が存在しなければ誤謬(에러)を起こすやうだ。折角再安裝した許りのVRChatをまたStorageに戻したくないし...

そんな时に`mkdir`樣の言葉を思ひ出した。
> `mkdir`「ディレクトリがなければ作ればいいじゃない」

さうか、さうなのか。目錄がなければ我が文件目錄を作成すればいいのか（逆轉的發想）。
VRChatを再移動させる时にsteamから文句を言はれさうだが、その時はその時に消去すれば良い。

と言ふ事で早速`mkdir /media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/`を實行する。

```:mkdir&#x20;/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/
mkdir: ディレクトリ `/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/' を作成できません: そのようなファイルやディレクトリはありません
```

な、なんだってー。目錄が存在しないから斯くして`mkdir`を使用してゐるのに、一つ／＼手作業で作成しないといけないのかー。
そんな思ひに耽りてゐたが次の瞬間、そこに`mkdir`の`-p`しゃまが我の前に舞ひ降りた。
> `mkdir -p`「`mkdir`だけじゃダメ、効率がわるいわ。そこに`-p`オプションをつければ、どんなディレクトリも一発で作れるわよ」

なんということだ。これは目から鱗。どうも`mkdir`に`-p`しゃまの力を使へば、一發で存在しない目錄上にも文件目錄を作成できるやうだ。
我は`mkdir -p  /media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/`を實行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/982908/6f7bae2a-960e-457f-4d5c-9497619caf48.png)
そしてこのあと色〻やって最終的に`tail.sh`の中身はこのやうに成りた：

```~/VRChat/tail.sh
#!/media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/
# にゃーん

# この스크립트は自分のhomeにあるVRChatの로그と/media/storage/の
# SteamLibraryに置きてるVRChatの로그両方を監視する。

tail -f ~/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output* /media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output*
```

# 實行結果

`vrc`

```
==> /home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output_log_01-44-07.txt <==

2021.10.08 01:44:45 Log        -  HTTPFormUseage:UrlEncoded


2021.10.08 01:44:47 Log        -  VRCApplication: OnApplicationQuit at 40.96387


2021.10.08 01:44:47 Log        -  UserInterface destroyed



==> /home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output_log_02-18-41.txt <==
2021.10.05 06:39:47 Error      -  [Behaviour] Error posting visit:
Response was null.
Network is unreachable
{"userId":"usr_d865c0d5-dfb7-4167-9329-8324fa94cee2","worldId":"wrld_d1940c70-f3ea-4231-8167-a5ac4b8db669:82912~hidden(usr_0bedb9af-7bc0-4da2-873a-ee5d45733f8c)~region(jp)~nonce(ADB49DC43A40EF5EE09B8D54967911B77023EF786B02ADA7)"}


2021.10.05 06:39:47 Error      -  [Behaviour] Response was null.
Network is unreachable



==> /home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output_log_20-08-42.txt <==

2021.10.04 20:08:57 Log        -  [Behaviour] OnPlayerPropertiesUpdate


2021.10.04 20:09:14 Log        -  HTTPFormUseage:UrlEncoded


2021.10.04 20:10:00 Log        -  [Behaviour] Room metadata is unchanged, skipping update.



==> /home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output_log_20-12-21.txt <==

2021.10.04 23:54:07 Error      -  [Always] Websocket exploded! An error has occurred in closing the connection. : WebSocketSharp.ErrorEventArgs


2021.10.04 23:54:08 Log        -  VRCApplication: OnApplicationQuit at 13307.51


2021.10.04 23:54:08 Log        -  UserInterface destroyed



==> /home/kawanerio/.steam/debian-installation/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output_log_23-55-55.txt <==
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00000] in <00000000000000000000000000000000>:0 
  at ǅǅǅǄǅǅǅǅǄǄǄǄǄǅǄǅǅǄǅǅǄǅǅǄǅǄǄǄǄǅǄǄǄǅǄǅǅǅǄǄǄǄǄǅǅǅǅ+ǄǅǄǅǄǅǄǄǅǄǄǄǄǅǅǅǄǅǄǄǄǄǅǄǅǄǄǄǅǅǄǅǄǅǅǄǅǄǄǄǅǄǄǄǄǅǅ[EventType,EventEqualityComparerType].Invoke (System.Collections.Generic.IEnumerable`1[T] ǅǅǄǅǄǄǅǄǄǅǄǄǄǅǅǄǅǅǄǅǄǅǅǅǄǅǄǅǄǄǅǄǄǅǅǅǄǄǅǅǅǅǄǄǄǅǅ) [0x00000] in <00000000000000000000000000000000>:0  
Network Reachability: Reachable via Local Area Network.


2021.10.05 02:18:02 Error      -  Couldn't fetch current user record - Response was null.
Network is unreachable



==> /media/storage/SteamLibrary/steamapps/compatdata/438100/pfx/drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat/output <==
```

# 感想
結果、VRChatがHomeに安裝されてゐようがStorageから卸載されてゐようが無事しっぽの命令を實行することが出徠た。次回は動畫再生の出徠ないLinuxVR勢にも動畫內容がわかるやう、`vrc`と`grep`との併用で월드の動畫플레이어の링크を取得する方法でも書こうと思ふ。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/982908/6d55040c-cb8a-2590-de2d-167173c7cacb.png)

# 用語參照

<dl>
  <dt>󷲰</dt>
  <dd>こと（合字かな）</dd>
  <dt>로그</dt>
  <dd>ログ, log</dd>
  <dt>버그</dt>
  <dd>バグ, bug</dd>
  <dt>링크</dt>
  <dd>リンク, link</dd>
  <dt>目錄</dt>
  <dd>もくろく, directory</dd>
  <dt>安裝</dt>
  <dd>あんさう, install</dd>
  <dt>卸載</dt>
  <dd>しゃさい, uninstall</dd>
  <dt>文件</dt>
  <dd>ぶんけん, file</dd>
  <dt>衝突</dt>
  <dd>しょうとつ, crash</dd>
  <dt>誤謬</dt>
  <dd>ごびゅう, error</dd>
  <dt>에러</dt>
  <dd>エラー, error</dd>
  <dt>命令</dt>
  <dd>めいれい, command</dd>
  <dt>實行</dt>
  <dd>じっかう, execute</dd>
  <dt>動畫플레이어</dt>
  <dd>どうがプレイヤー, video player</dd>
</dl>