一部のパスがエクスポートされない場合、/etc/profile
および$HOME/.profile
を変更する小さな自動セットアップスクリプトを作成しています。次に、これらを自動的にリロードします。
source
がこれを行うことを読んだので、端末を起動して次のように入力しました。
source /etc/profile
source ~/.profile
ターミナルからは、エラーは出力されませんでした。
ただし、これら2つのコマンドをBashスクリプト内に配置すると、source: not found
になります。
#!/bin/sh
が指定されている場合でも、スクリプトがBashによって実行されていることをどのようにして確認できますか(明らかに、保証されません)。/bin/sh
はbash
ではありません。 bash
を使用してスクリプトを実行するには、スクリプトの最初の行として#!/bin/bash
と記述します。
source: not found
が見つからないため、エラー/etc/profile
は削除されません。 source
が見つからないため、削除されました。 source
はBash組み込み関数であり、bash
を使用してスクリプトを実行しないでください。なぜ見つからないのかは明らかです。スクリプトの#!
行を変更すると、機能します。
1。
#!/bin/sh
が指定されている場合でも、スクリプトがBashによって実行されていることを確認するにはどうすればよいでしょう(明らかに、保証しません)?
sh
Shell(あなたの場合 #!/ bin/shと#!/ bin/bashの違いは何ですか? を参照)用に記述されたスクリプトが実行されることを確認するBash、次のコマンドを実行するだけです:
bash script_name
したがって、このエラーはもう発生しません。
2。これらの2つのソースが紛れもなくそこにある場合、それらが見つからないと言うのはなぜですか?
これらのソースファイルが存在しないとは言いません。 source
コマンドが見つからないということです。 #!/bin/sh
行でスクリプトを開始するため、スクリプトはsh
ではなくbash
を使用して実行されるため、これは正常です。どうして普通なの? source
コマンドはBashビルトインですが、sh
ビルトインではないためです。 sh
のファイルを取得するには、.
(ドット)を使用する必要があります。例:
. /etc/profile
. ~/.profile
別の方法は、 chaoshis answer で述べたように、Shebang行を#!/bin/bash
に変更することです。
こちらをご覧ください SO question :
/bin/sh
は通常、シェルを模倣しようとする他のシェルです。多くのディストリビューションはsh
に/bin/bash
を使用しており、ソースをサポートしています。ただし、Ubuntuでは、ソースをサポートしない/bin/dash
が使用されます。スクリプトを編集できない場合は、スクリプトを実行するシェルを変更してみてください。