bash
では、単に_exec -a
_を使用します。どうすればbusyboxでこれを行うことができますか?それも可能ですか、それともexec(3)
を直接呼び出すために独自のCプログラムを作成する必要がありますか?
あなたはbusyboxのどのバージョンを持っていますか? https://git.busybox.net/busybox/tree/Shell/ash.c によると、exec
を探し回ると、9352行目あたりで次のコードに遭遇する可能性があります。 exec [-a customname] ...
をサポートしているようです
execcmd(int argc UNUSED_PARAM, char **argv)
{
optionarg = NULL;
while (nextopt("a:") != '\0')
/* nextopt() sets optionarg to "-a ARGV0" */;
argv = argptr;
if (argv[0]) {
char *prog;
iflag = 0; /* exit on error */
mflag = 0;
optschanged();
/* We should set up signals for "exec CMD"
* the same way as for "CMD" without "exec".
* But optschanged->setinteractive->setsignal
* still thought we are a root Shell. Therefore, for example,
* SIGQUIT is still set to IGN. Fix it:
*/
shlvl++;
setsignal(SIGQUIT);
/*setsignal(SIGTERM); - unnecessary because of iflag=0 */
/*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
/*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
prog = argv[0];
if (optionarg)
argv[0] = optionarg;
shellexec(prog, argv, pathval(), 0);
exec -a
はBusybox1.27 以降サポートされています。他の方法でそれを実現する方法については、 ターゲットアプリケーションの0番目の引数を設定するPOSIXの方法はありますか? の回答も参照してください。