shell 来自bash脚本的OS系统调用

ui7jx7zq  于 2023-06-24  发布在  Shell
关注(0)|答案(2)|浏览(143)

是否可以从shell脚本调用操作系统调用,如openclose等?我试过谷歌搜索,但它把我带向了错误的方向,使用system()命令。有人能帮忙吗?

vs91vp4v

vs91vp4v1#

许多系统调用是可以访问的,但只能通过本机shell机制,而不能直接指定确切的参数。例如:

exec 4>outfile

电话:

open("outfile", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 4)

(with 3被下一个可用描述符替换),以及

exec 4<&-

电话:

close(4)

一些shell,比如bash,允许通过可加载模块添加额外的内置程序(参见enable内置程序,用于加载此类模块);如果你真的需要上游没有提供的功能,你可以用这种方式实现它。

6tqwzwtp

6tqwzwtp2#

这取决于系统。例如,AIX有一个syscall command用于

syscall [ -n ] Name [ Argument1 ... ArgumentN ] [  ; Name [ Argument1 ... ArgumentN ] ] ...

Plan9也有一个similar command

syscall [ -o ] entry [ arg ...  ]

在Linux上没有这样的命令,但有mauri870/syscall,它是
将plan9 syscall命令移植到Linux的努力
比如说,

$ ./syscall write 1 Hello$'\n'World$'\n' 12
Hello
World
$ ./syscall -o read 0 buf 5
xyz
xyz
$ ./syscall -ov getcwd buf 100
Syscall return: 23
/home/user/src/syscall

另一个端口是oliwer/syscall

syscall [-<n>] name [args...] [, name [args...]]...

示例用法:

syscall open /my/file 1 0755 , write \$0 hello \#hello , close \$0
syscall open /dev/random 0 , echo \$0

相关问题