我不知道这个问题是否真的适合这个论坛,可能不是,但不过我们走了;
在unix程序上运行无效命令后;我熟悉了;
Usage: PROGRAM [OPTION]... [FILE]...
当我正在审查一个程序的过程中,当我这样做的时候,脑子里浮现出一种想法。即可以轻松实现C ++程序,以根据可执行文件的名称(即argv
中的第一个参数)更改行为。
我完全不知道为什么这会有用,我知道argv[0]
可能很有用,但是有没有人见过一个程序,它做了这个(改变名字改变的行为)并通过做所以?
答案 0 :(得分:3)
是的,这是常规的(但是为了意识到可以做到这一点做得很好)。例如:
$ (cd /usr/bin; ls -li | grep -w vim)
2704450 lrwxr-xr-x 1 root wheel 3 Oct 31 2013 ex -> vim
2704451 lrwxr-xr-x 1 root wheel 3 Oct 31 2013 rview -> vim
2704452 lrwxr-xr-x 1 root wheel 3 Oct 31 2013 rvim -> vim
2378579 lrwxr-xr-x 1 root wheel 3 Oct 31 2013 vi -> vim
2704453 lrwxr-xr-x 1 root wheel 3 Oct 31 2013 view -> vim
2343880 -rwxr-xr-x 1 root wheel 1472736 Oct 31 2013 vim
2704454 lrwxr-xr-x 1 root wheel 3 Oct 31 2013 vimdiff -> vim
$
因此,vim
可执行文件也可以作为vimdiff
或view
或vi
或ex
调用,它的行为会有所不同,具体取决于它是怎样的调用。在某些系统上,这些将是硬链接而不是符号链接(数据来自Mac OS X 10.9.2 Mavericks),因此您需要grep
来获取inode号而不是vim
。< / p>
另一个例子:
与bash
调用时相比,调用sh
时Bash的运行方式不同。传统上,shell在其名称(-
,-sh
等)前面使用短划线-bash
进行调用时会识别,并在您执行此操作时充当登录shell:
$ ps
PID TTY TIME CMD
39301 ttys000 0:01.30 -bash
46766 ttys001 0:00.24 -bash
$