
このスクリーンショットは基本的にそれを説明しています
https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b
ターミナル内で新しいタブを開いたり、他の作業を行うためのエイリアス、さらにはデバッグ シェル スクリプトを実行するためのエイリアスを設定しましたが、スクリプトはdebug.sh
単にエイリアス を使用してnewtab
新しいタブを開こうとします。これは と入力すると機能しますnewtab
が、.sh 内または他の実行可能ファイルからの他のエイリアスでも機能しません。これを修正するにはどうすればよいですか?
私が気づいたことの一つは、私はexport
「」とalias
「」をすべて「」に入れており/etc/bashrc
、他のものを入れていないこと、そしてどこにも言及され~/.bash_profile
ていないことです。/etc/bashrc
正しくやっているでしょうか?
答え1
エイリアスの展開は、対話型シェルからのみ実行され、スクリプト内では実行されないため、debug
は に展開されますnewtab
がnewtab
、スクリプトから呼び出されるため、 自体は展開されません。
エイリアスの代わりにエクスポートされた関数を使用すると、次のように動作します:-
debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab
スクリプトはサブシェルで実行されるため、エクスポートは必要ですが、引用した特定のインスタンスでは、newtab
関数である必要があるのはそれだけです。
関数は、どこでもエイリアスの代わりに使用できますが、実行文字列の末尾に追加のパラメータを追加するなど、エイリアスでは実行できない非常に単純な要件など、さらに多くのことができます。実際、関数はスクリプトで実行できることはすべて実行できますが、スクリプトとは異なり、現在のシェルで実行されるため、スクリプト.
またはsource
コマンドで実行する必要がある環境と現在のディレクトリを変更できます。