Bashスクリプトでaliasを導入する方法
エイリアスの使用
日々の開発では、運用・保守の効率化を図るために、コマンドに短い名前を定義するエイリアス(コマンドエイリアス)を使用しています。例えば
// Create a donut
//void gltMakeTorus(GLTriangleBatch& torusBatch, GLfloat majorRadius, GLfloat minorRadius, GLint numMajor, GLint numMinor);
//parameter 1: GLTriangleBatch container helper class
//parameter 2: outer edge radius
//parameter 3: inner edge radius
//parameters 4, 5: number of subdivision units for the major and minor radii
gltMakeTorus(torusBatch, 1.0f, 0.3f, 52, 26);
Copy the code
に以下を追加します。
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
//parameter 1: GLT_SHADER_DEFAULT_LIGHT default light shader
//parameter 2: model view matrix
//parameter 3: projection matrix
//parameter 4: basic color value
shaderManager.UseStockShader(GLT_SHADER_DEFAULT_LIGHT, transformPipeline.GetModelViewMatrix(), transformPipeline.GetProjectionMatrix GetProjectionMatrix (), vRed);
torusBatch.Draw();
Copy the code
実行
//Enable surface culling (default is backside culling)
glEnable(GL_CULL_FACE);
//turn off surface rejection (default is backside rejection)
glDisable(GL_CULL_FACE);
//User can choose which face to cull :GL_FRONT,GL_BACK,GL_FRONT_AND_BACK ,default GL_BACK
glCullFace(GL_BACK);
// user specifies which side of the winding sequence is the front (you can specify clockwise as the front, but it is not recommended) GL_CW(clockwise) GL_CCW(counterclockwise)
glFrontFace(GL_CCW);
Copy the code
その後、エイリアスの定義が現在のターミナル環境に読み込まれ、その定義にアクセスするために
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glCullFace(GL_BACK);
//Cancel after drawing to ensure the independence of single rendering
glDisable(GL_CULL_FACE);
Copy the code
を表示することができます。
//Enable depth testing
glEnable(GL_DEPTH_TEST);
//unable the depth test
glDisable(GL_DEPTH_TEST);
Copy the code
コマンドラインからaliasを実行しても、期待通りの効果が得られます。
/** Enable polygon offset
* List of parameters.
GL_POLYGON_OFFSET_POINT : corresponds to the rasterization mode: GL_POINT
GL_POLYGON_OFFSET_LINE : corresponds to the rasterization mode: GL_LINE
GL_POLYGON_OFFSET_FILL : Corresponds to the rasterization mode: GL_FILL
*/
glEnable(GL_POLYGON_OFFSET_FILL);
// turn off polygon offset
glDisable(GL_POLYGON_OFFSET_FILL);
Copy the code
Bashスクリプトでaliasを導入する際の問題点
しかし、このような場合にも
void glPolygonOffset(Glfloat factor,Glfloat units);
Applies the equation for calculating the total offset on a segment:
Depth Offset = (DZ * factor) + (r * units);
DZ: Depth value (Z value)
r: the smallest value that causes the depth buffer to change
Copy the code
をBashスクリプトに組み込むことで、コマンドを簡略化することができます。たとえば
スクリプトファイル test.sh
glDisable(GL_POLYGON_OFFSET_FILL);
Copy code
test.shを実行すると、エラーが表示されます。
//Enable blending
glEnable(GL_BLEND);
Copy code
これは、BashではデフォルトでBashスクリプトにエイリアスを導入できないためで、Bashの公式ドキュメントでは、実際には
Target color: the color value already stored in the color buffer
Source color: The color value that enters the color buffer as the result of the current render command
When blending is enabled, the way the source and destination colors are combined is controlled by the blending equation. By default
By default, the blending equation looks like this:
Cf = (Cs * S) + (Cd * D)
Cf : the color of the final calculation parameter
Cs : source color
Cd : the target color
S : source blending factor
D :target blending factor
Copy Code
の代わりに
// S: original blending factor D: target blending factor
glBlendFunc(GLenum S,GLenum D);
Copy code
. そこで質問なのですが、せっかく頑張って書いたエイリアスを全部関数に変更することはできないのでしょうか?
幸いなことに、回避策があります。
解決方法
test.shに一行追加するだけです。
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
If the color buffer already has a color red (1.0f,0.0f,0.0f,0.0f), this is the target color Cd, and if an alpha of 0.6 blue (0.0f,0.0f,1.0f,0.6f) is used on top of this
Cd (target color) = (1.0f,0.0f,0.0f,0.0f)
Cs (source color) = (0.0f,0.0f,1.0f,0.6f)
S = source alpha value = 0.6f
D = 1 - source alpha value = 1 - 0.6f = 0.4f
Mixing equation: Cf = (Cs * S) + (Cd * D)
Equals = (Blue * 0.6f) + (Red * 0.4f)
Copy the code
新しいスクリプトファイル
#! /bin/bash
shopt -s expand_aliases
source ~/.bash_profile
ll
実行すると、うまくいくのですが、なぜでしょうか?
$ bash test.sh
total 48
-rw-rw-r-- 1 liyang liyang 62 Sep 16 09:38 test.c
-rw-rw-r-- 1 liyang liyang 68 Sep 16 09:38 foo.h
-rw-rw-r-- 1 liyang liyang 74 Sep 16 09:38 foo.c
-rwxrwxr-x 1 liyang liyang 8592 Sep 16 09:44 libfoo.so
-rw-rw-r-- 1 liyang liyang 4347 Sep 16 09:44 o23.s
-rwxrwxr-x 1 liyang liyang 9451 Sep 16 09:45 test
-rw-rw-r-- 1 liyang liyang 64 Mar 8 21:33 test.sh
キーは
shopt -s expand_aliases
フレーズ
shopt
は、シェルに関連する多くのスイッチを制御するために使用できるコマンドです。
expand_aliases
はその一つで、これをオンにすると、Bashスクリプト内のすべてのコマンド・エイリアスが
alias
がすべて展開されます。
エキスパンドエイリアス
設定された場合、エイリアスは以下の「エイリアス」「エイリアス」で説明されているように展開されます。このオプションは、対話型シェルではデフォルトで有効になっています。
概要
- aliasコマンドは、コマンド・エイリアスをカスタマイズし、操作を簡素化するのに役立ちます。
- デフォルトでは、ターミナル環境からBashスクリプトにエイリアスを導入することはできません。
-
によって
shopt -s expand_aliases
を使用すると、上記の問題を解決することができます。
参考資料
https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
Bashスクリプトでaliasを導入する方法についての説明は以上となります。Bashスクリプトにaliasを導入する方法については、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を参照してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン