teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/03/12 15:55

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,3 +1,21 @@
1
1
  [【 source 】コマンド/【 . 】コマンド――シェルの設定を即座に反映させる:Linux基本コマンドTips(169) - @IT](https://www.atmarkit.co.jp/ait/articles/1712/21/news015.html)
2
2
 
3
- source を使ってみてください。
3
+ source を使ってみてください。
4
+
5
+ ## 追記
6
+
7
+ ちなみに質問に挙げられている a.ps1 を普通に PowerShell で実行しても funchello を使うことはできません。PowerShell の場合も Bash と同じく `. .\a.ps1` のように `.` を使う必要があります。これをドットソースと呼びますが、こうすることでスクリプト中の変数や関数を現在の環境にエクスポートすることができます。
8
+
9
+ 特定の関数だけエクスポートするには、次のように global スコープを付けます。
10
+
11
+ ```PowerShell
12
+ function global:funchello {
13
+ echo "Hello"
14
+ }
15
+ ```
16
+
17
+ スタートアップに使われる $PROFILE は例外で、グローバルスコープで実行されるので、ここに書かれた関数や変数はデフォルトでエクスポートされます。
18
+
19
+ PowerShell のスコープについては次が理解しやすいと思います。
20
+
21
+ [PowerShell のスコープ完全に理解した - 鷲ノ巣](https://tech.blog.aerie.jp/entry/powershell-advent-calendar-2018-18)