GNU/Linux >> Linux の 問題 >  >> Linux

複数の実行可能スクリプトを1つのディレクトリに配置し、そのディレクトリをソーシングすることで、これらのコマンドをすべて使用できるようにすることはできますか?

一連の実行可能スクリプトを.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 または何でも)


Linux
  1. 複数の sudo および su コマンドを使用して元のユーザーを見つけるにはどうすればよいですか?

  2. すべてのファイルをあるディレクトリから別のディレクトリに移動 (および上書き) する方法は?

  3. ビルド時にbazelに外部ストレージを使用させるにはどうすればよいですか?

  1. バックアップする必要がある9つのLinuxディレクトリとバックアップしない1つのLinuxディレクトリ

  2. プロセスをバックグラウンドで継続させるために、1回のキープレスでCtrl-Zとbgを実行するにはどうすればよいですか?

  3. すべての拡張属性とその方法を表示/リストできますか?

  1. 「ls-a」と入力すると、「。」の意味は何ですか。と ".."?

  2. いつソースからコンパイルしてインストールする必要がありますか?

  3. 検索を使用して特定のディレクトリを検索し、1つのディレクトリを除くその中のすべてのファイルを削除しますか?