一連の実行可能スクリプトを.commanddir(これも実行可能です)に配置し、そのディレクトリを.bash_profileにソースするだけで済みます。これは可能ですか?これを1つのファイルで機能させることができます。ただし、2番目のファイルを追加する場合、2番目のファイルのコマンドはシェルで使用できません。
私の.bashprofile
source ~/.commands/*
私の.commandsフォルダー
-rwxr-xr-x 1 christopherreece staff 108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x 1 christopherreece staff 23 Dec 14 09:04 short
ショートの内容
echo 'a short program'
server_utils.shのコンテスト
function upfile {
scp $1 [email protected]:~/
}
シェルの入力と出力。
$ hello
hello
$ short
-bash: short: command not found
承認された回答:
1つのsource
ではそれを行うことはできません 。最初の引数はファイル名として使用され、他の引数は位置パラメーター$1
として表示されます。 、$2
…ソーススクリプト内。
$ cat test.src
echo hello $1
$ source test.src there
hello there
しかし、ループでそれを行うことができます:
for f in ~/commands/*.src; do
source "$f"
done
(余談ですが、特定の拡張子を持つファイルのみを含むようなものがあると、バックアップファイルの末尾に~
を残すエディターを使用する場合に非常に便利です。 。その場合、バックアップコピーが誤ってアクティブになることはありません。)
ただし、プレーンコマンド(echo
など)を含むソーススクリプトがある場合は注意してください。 上記またはshort
)、スクリプトがsource
のときに実行されます d。ソーシングシェルでは関数を生成しません。
$ cat test2.src
echo "shows when sourced"
func() {
echo "shows when function used"
}
$ source test2.src
shows when sourced
$ func
shows when function used
代わりに実行可能スクリプトが必要な場合は、コマンドとして名前を付けたときにスクリプトが実行される種類のスクリプトをPATH
のどこかに配置します。 (~/bin
を使用することをお勧めします そのため)、実行権限を付与し、スクリプトの先頭に適切なハッシュバンを配置します(#!/bin/sh
または#!/bin/bash
または何でも)