エイリアスはシェルスクリプトから実行できませんか? Mac OS X Sierra 13.x

エイリアスはシェルスクリプトから実行できませんか? Mac OS X Sierra 13.x

このスクリーンショットは基本的にそれを説明しています

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

ターミナル内で新しいタブを開いたり、他の作業を行うためのエイリアス、さらにはデバッグ シェル スクリプトを実行するためのエイリアスを設定しましたが、スクリプトはdebug.sh単にエイリアス を使用してnewtab新しいタブを開こうとします。これは と入力すると機能しますnewtabが、.sh 内または他の実行可能ファイルからの他のエイリアスでも機能しません。これを修正するにはどうすればよいですか?

私が気づいたことの一つは、私はexport「」とalias「」をすべて「」に入れており/etc/bashrc、他のものを入れていないこと、そしてどこにも言及され~/.bash_profileていないことです。/etc/bashrc

正しくやっているでしょうか?

答え1

エイリアスの展開は、対話型シェルからのみ実行され、スクリプト内では実行されないため、debugは に展開されますnewtabnewtab、スクリプトから呼び出されるため、 自体は展開されません。

エイリアスの代わりにエクスポートされた関数を使用すると、次のように動作します:-

debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab

スクリプトはサブシェルで実行されるため、エクスポートは必要ですが、引用した特定のインスタンスでは、newtab関数である必要があるのはそれだけです。

関数は、どこでもエイリアスの代わりに使用できますが、実行文字列の末尾に追加のパラメータを追加するなど、エイリアスでは実行できない非常に単純な要件など、さらに多くのことができます。実際、関数はスクリプトで実行できることはすべて実行できますが、スクリプトとは異なり、現在のシェルで実行されるため、スクリプト.またはsourceコマンドで実行する必要がある環境と現在のディレクトリを変更できます。

関連情報