当前位置: 技术问答>linux和unix
关于sh和输出重定向
来源: 互联网 发布时间:2015-06-11
本文导语: 请问: 1。sh和shell有区别吗?为什么在linux下面有时要写sh ... 而有时直接写命令? 2。所谓输出重定向是什么意思?是不是无论什么程序,只要在屏幕上有输出信息的,都可以通过重定向把原先在屏幕上的内容输入...
请问:
1。sh和shell有区别吗?为什么在linux下面有时要写sh ... 而有时直接写命令?
2。所谓输出重定向是什么意思?是不是无论什么程序,只要在屏幕上有输出信息的,都可以通过重定向把原先在屏幕上的内容输入到特定的文件中?
3。关于2,比如javac xxx.java > txtout.txt可以吗?为什么信息还是在屏幕上而没有输入文件?有没有办法实现?
1。sh和shell有区别吗?为什么在linux下面有时要写sh ... 而有时直接写命令?
2。所谓输出重定向是什么意思?是不是无论什么程序,只要在屏幕上有输出信息的,都可以通过重定向把原先在屏幕上的内容输入到特定的文件中?
3。关于2,比如javac xxx.java > txtout.txt可以吗?为什么信息还是在屏幕上而没有输入文件?有没有办法实现?
|
1.sh通常是/bin/sh,而shell是一个称呼,不特指具体类型的shell
./sh 的格式来运行的时候是指定用/bin/sh来执行exec,通常是针对exec中没有指定shell的时候用;而直接运行 ./要不exec是一个二进制文件,不依赖于shell,或者exec的第一行用#!/bin/ksh的形式指定了运行它的shell
2.通常情况下,1(标准输入)和2(错误输出)都是指向控制台的,用>或者>>可以把他们定向到文件中去。
3.javac xxx.java > txtout.txt已经把你的标准输出定向到文件txtout.txt了,这个时候的屏幕输出是错误信息。你可以 javac xxx.java >txtout.txt 2>&1就可以把所有的输出都写道文件txtout.txt了
./sh 的格式来运行的时候是指定用/bin/sh来执行exec,通常是针对exec中没有指定shell的时候用;而直接运行 ./要不exec是一个二进制文件,不依赖于shell,或者exec的第一行用#!/bin/ksh的形式指定了运行它的shell
2.通常情况下,1(标准输入)和2(错误输出)都是指向控制台的,用>或者>>可以把他们定向到文件中去。
3.javac xxx.java > txtout.txt已经把你的标准输出定向到文件txtout.txt了,这个时候的屏幕输出是错误信息。你可以 javac xxx.java >txtout.txt 2>&1就可以把所有的输出都写道文件txtout.txt了
|
对于第一个问题:
在dos/windows里面,当前目录被作为默认目录之一,也就是说你输入a.exe的时候系统会先搜索当前的目录;在linux里面,当前目录一般不作为默认目录(当然你也可以设置成默认目录),因此你在执行一个文件a.sh的时候必须使用./a.sh来指定搜索目录。
而作为 sh a.sh ,a.sh作为命令参数,而sh命令中这个位置的参数将自动添加当前目录。
因此 sh a.sh 和 ./a.sh 在实际应用上应当是等价的。
至于./a.sh或者/some_place/a.sh为什么会使用sh作为解释器,这是由linux的文件识别方式决定的。一般linux下的脚本文件都在第一行说明脚本的解释器,而在dos/windows下使用后缀名来说明文件的运行器。
在dos/windows里面,当前目录被作为默认目录之一,也就是说你输入a.exe的时候系统会先搜索当前的目录;在linux里面,当前目录一般不作为默认目录(当然你也可以设置成默认目录),因此你在执行一个文件a.sh的时候必须使用./a.sh来指定搜索目录。
而作为 sh a.sh ,a.sh作为命令参数,而sh命令中这个位置的参数将自动添加当前目录。
因此 sh a.sh 和 ./a.sh 在实际应用上应当是等价的。
至于./a.sh或者/some_place/a.sh为什么会使用sh作为解释器,这是由linux的文件识别方式决定的。一般linux下的脚本文件都在第一行说明脚本的解释器,而在dos/windows下使用后缀名来说明文件的运行器。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。