我有一个包含以下内容的脚本:
#!/bin/bash
printenv
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行它时:
env testscript.sh
bash testscript.sh
sh testscript.sh
Run Code Online (Sandbox Code Playgroud)
每次,它输出SHELL=/bin/bash. 但是,当它从 cron 运行时,它总是输出SHELL=/bin/sh. 为什么是这样?我怎样才能让cron应用shebang?
我已经检查了 cron PATH;它确实包括/bin。
当给 cat 两个 heredocs 时,它只输出第二个。
$ cat <<HERE
> adsf
> qwer
> HERE
adsf
qwer
$ cat <<HERE <<ALT
> qwer
> asdf
> HERE
> zxcv
> yuop
> ALT
zxcv
yuop
Run Code Online (Sandbox Code Playgroud)
如果给定一个heredoc和一个文件,这也适用,但我注意到如果我给它一个文件和一个heredoc(相反的顺序),它仍然只输出文件。但是,如果我给 cat 两个文件,它会正确输出这两个文件。
为什么猫会这样?
如果我运行这个:
echo "echo 'a'; echo 'b'"
Run Code Online (Sandbox Code Playgroud)
它产生一个我可以运行的字符串,它可以工作 - echoes a\nb\n。
但是,这不起作用:
$(echo "echo 'a'; echo 'b'")
Run Code Online (Sandbox Code Playgroud)
为什么不?它不适用于任何命令,而不仅仅是 echo。如何执行包含两个或多个命令的字符串?
我使用的Ubuntu Linux和,只是为了好玩,我想创建一个硬连接到一个目录(如图这里)。因为我只是为了好玩而这样做,我不是在寻找其他人编写的任何类型的预先开发的目录硬链接软件,我想知道如何自己做。那么,如何直接手动修改 inode 呢?
理想情况下,我希望答案是可以从 Bash 命令行运行的 Linux 命令,但如果无法从那里执行此操作,我也会接受有关如何在 C 中执行此操作的信息或(作为最后的手段)集会。
我查了一个操作系统的字典定义:
支持计算机基本功能的低级软件,例如调度任务和控制外围设备。
嗯,这听起来很像内核的定义。
Linux 处理所有的硬件接口;用户态程序处理其他一切。然而我一直听到人们说“Linux 是一个内核,而不是一个操作系统”。那么……什么是操作系统?为什么 Linux 不是一个?