在 Bash /bin/kill 中执行未找到
Exec in Bash /bin/kill not found
我正在将一个刚刚使用 sh 的脚本迁移到 bash,该脚本最初看起来像这样:
#!/bin/sh
... a bunch of setup ...
exec "$@"
当我 运行 脚本通过:
./my_script kill -l
我得到可用信号列表:
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
但是,我想使用 bash 信号名称,所以我想我可以简单地:
#!/bin/bash
exec bash -l "$@"
现在的问题是无法识别kill:
/bin/kill: /bin/kill: cannot execute binary file
我的脚本实际上只是另一个进程的包装器,我需要确保 kill -SIGTERM
的信号可以发送给它。
您需要添加 -c
选项。否则(请参阅 bash
手册页的 ARGUMENTS 部分)“...假定第一个参数是包含 shell 命令的文件的名称。”
即:
exec bash -lc "$*"
你告诉 bash 给 运行 一个文件,它期望是一个 bash 脚本,但结果却是一个二进制可执行文件。
而不是这个:
#!/bin/bash
exec bash -l "$@"
使用这个:
#!/bin/bash
exec bash -c ""
是否有特定原因需要将 -l
到 运行 bash 作为 "login" shell 选项?如果不只是使用选项 -c
到 运行 字符串参数。
更新为使用 </code> 而不是 <code>$@
因为它更适合@chepner 评论的字符串参数。
这还要求您将参数作为字符串发送,而不是对二进制文件的引用。
而不是这个:
./my_script kill -l
这样做:
./my_script "kill -l"
我正在将一个刚刚使用 sh 的脚本迁移到 bash,该脚本最初看起来像这样:
#!/bin/sh
... a bunch of setup ...
exec "$@"
当我 运行 脚本通过:
./my_script kill -l
我得到可用信号列表:
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS
但是,我想使用 bash 信号名称,所以我想我可以简单地:
#!/bin/bash
exec bash -l "$@"
现在的问题是无法识别kill:
/bin/kill: /bin/kill: cannot execute binary file
我的脚本实际上只是另一个进程的包装器,我需要确保 kill -SIGTERM
的信号可以发送给它。
您需要添加 -c
选项。否则(请参阅 bash
手册页的 ARGUMENTS 部分)“...假定第一个参数是包含 shell 命令的文件的名称。”
即:
exec bash -lc "$*"
你告诉 bash 给 运行 一个文件,它期望是一个 bash 脚本,但结果却是一个二进制可执行文件。
而不是这个:
#!/bin/bash
exec bash -l "$@"
使用这个:
#!/bin/bash
exec bash -c ""
是否有特定原因需要将 -l
到 运行 bash 作为 "login" shell 选项?如果不只是使用选项 -c
到 运行 字符串参数。
更新为使用 </code> 而不是 <code>$@
因为它更适合@chepner 评论的字符串参数。
这还要求您将参数作为字符串发送,而不是对二进制文件的引用。
而不是这个:
./my_script kill -l
这样做:
./my_script "kill -l"