非対話型/非ログインシェルのエイリアスをどのように定義しますか?

非対話型/非ログインシェルのエイリアスをどのように定義しますか?

シェルがに設定されているユーザー(zabbix)があります/sbin/nologin。ユーザーの家は/var/lib/zabbixalias curl='curl -k'がに接続することです~zabbix/.bashrc。しかし、テスト目的で質問を発行するとうまくいかず、 sudo -u zabbix curl https://HOST-WITH-INVALID-ISSUER-CERTIFICATEnullを返します。

実際、コマンドはcurl https://HOST-WITH-INVALID-ISSUER-CERTIFICATEzabbix-server<-->zabbix-agent の相互作用を介してリモートで実行されます。

答え1

.curlrcエイリアスの代わりに~zabbix。これには、curlコマンドの実行時にコマンドに追加するコマンドラインパラメータが含まれています。

# --insecure being the more readable synonym for -k
$ echo "insecure" >> ~zabbix/.curlrc

答え2

デフォルトでは、非対話型シェルはエイリアスを拡張しません。shopt -s expand_aliasesエイリアスを定義する前に、これを明示的に実行する必要があります。また、通常は対話型シェルを介してのみ取得できるため、明示的に取得する必要が~/.bashrcあるかもしれません。

つまり、関数はエイリアスの優れた代替手段であり、機能するために半分のあいまいな設定は必要ありません。次のようになります。

curl() { command curl -k "$@"; }

繰り返しウサギの洞窟に陥らないようにcommand検索コマンドが組み込まれています。$PATHシェルが初期化されたときに取得したファイルでそれを定義します。

関連情報