おれさまラボ

実際に手を動かして理解を深めるブログ。

Bash:readlink コマンドで引数で指定したパスの絶対パスを取得する

readlinkというコマンドを見かけたので、メモ。もともとは、シンボリックリンクのリンク先を確認できるコマンドらしい。

構文

readlink -f <ファイルパス>

実行結果

[root@7545c727c36b log]# pwd
/var/log
[root@7545c727c36b log]# readlink -f .
/var/log
[root@7545c727c36b log]# readlink -f ../../etc/passwd
/etc/passwd

使い所はいまいちわかってないのだが、シンボリックリンクがうまく機能していなかった場合には1を返すようなので、$?で実行結果を判定し、シンボリックリンクが機能しているかいないかの確認に使えるかもしれない。

参考

シェルスクリプトでの絶対パス取得 - Qiita

readlink コマンド | コマンドの使い方(Linux) | hydroculのメモ

Powershell: Powershellから別のプロセスを起動する

構文

Start-Process -FilePath 'C:\Program Files (x86)\Hidemaru\Hidemaru.exe' -ArgumentList $fullPath -Wait

Powershellスクリプトから別のプロセス(今回だと秀丸エディタ)を起動する場合、Start-Processを利用します。

  • -FilePathを使って実行ファイルの場所を指定します。
  • -ArgumentListを使って、プロセス起動時の引数を管理します。
  • -Waitを使うことで、新しいプロセスが終了するまでPowershellスクリプトも起動したままになります。

参考

Start-Process

Powershell: ファイル内の文字列を置き換える

構文

$data = Get-Content ./test_bef.txt -Encoding UTF8
$data = $data | ForEach-Object { $_ -replace "置き換え前の文字列","置き換え後の文字列" }
$data | Out-File ./test_aft.txt -Encoding utf8
  1. Get-Content でファイルの内容を読み込みます。
  2. 読み込んだ文字列それぞれに対して、置き換えを行います。
  3. 変数に格納された置き換え後の情報を新しいファイルに出力します。

ファイルを開いたり、新しいファイルに書き出したりする時には -Encoding をつけて文字コードを揃えないと文字化けしますので注意です。

Powershell: スクリプト自身が存在するディレクトリを取得する

構文

$PSScriptRoot

$PSScriptRootは、スクリプトの親ディレクトリを格納している特殊変数です。

サンプルスクリプト

$scriptDir = $PSScriptRoot
Write-Host $scriptDir

出力結果

PS C:\Users\Naoto\Documents\00.lab> pwd

Path
----
C:\Users\Naoto\Documents\00.lab


PS C:\Users\Naoto\Documents\00.lab> .\test.ps1
C:\Users\Naoto\Documents\00.lab

参考

about_Automatic_Variables