首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在获取脚本并在KornShell上执行脚本时行为的差异

在获取脚本并在KornShell上执行脚本时行为的差异
EN

Stack Overflow用户
提问于 2012-12-17 01:59:38
回答 2查看 928关注 0票数 0

我注意到,在源文件和执行脚本方面唯一的区别是,在后面的情况下,父环境仍然不受影响。

考虑下面的示例脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SETUP_DIR=`dirname $0`
echo $SETUP_DIR
echo $0
echo $1

上面的脚本只是获取正在运行的脚本的目录名。在尝试获取它时,上面的脚本失败了,出现了以下错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ . test.sh foo
dirname: invalid option -- k
Try `dirname --help' for more information.

-ksh
foo

在我看来,原因是在获取脚本时,当脚本在父环境shell中运行时,shell名称作为第一个参数传递,在本例中是它的-ksh

dirname -ksh失败是因为-k,这是dirname的无效选项

奇怪的是,在sh或bash中运行时,这个问题并不存在。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sh
sh-3.2$ . test.sh foo
.
sh
foo
sh-3.2$ bash
bash-3.2$ . test.sh foo
.
bash
foo
bash-3.2$
  • 所以我想知道,这是KornShell (ksh)中已知的有文档记录的行为吗?如何解决这一问题?
  • 我的第二个一般性问题是,为什么dirname 'sh'返回当前目录.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-17 02:17:47

所以我想知道,这是玉米壳中已知的一种行为吗?如何解决这一问题?

/bin/login以登录shell的形式启动ksh时,它的$0将以-作为前缀,因此$0将是-ksh而不是ksh/bin/ksh登录是为了向shell表示它是作为登录shell启动的。,因为这通常会影响配置文件加载。

ksh手册记录了它遵守本公约的情况:

如果shell由exec(2)调用,且参数0 ($0)的第一个字符是-,则假定shell是登录shell,并从.

连字符前缀没有出现在bash中,我假设bash正在编辑命令行,以防止它在进程列表中可见。

因此,dirname $0dirname -ksh,dirname试图将其解析为传递ksh选项。

您可以通过使用dirname显式终止--解析选项来解决这一问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dirname -- "$0"

我的第二个一般性问题是,为什么dirname 'sh‘返回当前目录。

dirname试图提供帮助并返回一个可用的路径,即使在您所提供的路径中没有目录部分时也是如此。因为您的"$0“只有一个部分,所以它假设它相对于当前的工作目录,即sh == ./sh,并返回.

这是根据dogbane的回答记录下来的

票数 1
EN

Stack Overflow用户

发布于 2012-12-17 02:11:31

回答你的第二个问题,来自man dirname

删除其尾部/component的打印名称;如果名称不包含/'s,输出‘。(意思是当前目录)。

这就是在运行.时获得dirname sh的原因。

我无法在ksh中复制您的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13911886

复制
相关文章
Windows系统安全|Windows中获取用户密码
Windows系统使用两种方法对用户的密码进行哈希处理,它们分别是 LAN Manager(LM)哈希和 NT LAN Manager(NTLM)哈希。所谓哈希(hash),就是使用一种加密函数对其进行加密。这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。
谢公子
2022/01/19
2.9K0
Windows系统安全|Windows中获取用户密码
如何在小程序中获取用户信息
在以前的文章中,我们介绍了小程序的登录鉴权功能,方便开发者去获取用户的appid和session_key以便确认用户的身份。但是,仅仅通过appid和session_key不能去获取用户的信息。那么,这篇文章中,我们将介绍如何在小程序中获取用户的昵称、头像、性别、城市等信息。
it大叔
2019/01/25
6.7K0
如何在小程序中获取用户信息
PHP 获取用户行为参考代码 [IP/OS/URL/Broswer]
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/80015381
泥豆芽儿 MT
2018/09/11
7670
PHP 获取用户行为参考代码 [IP/OS/URL/Broswer]
如何在 Linux 中查找文件所有者?
在 Linux 系统中,每个文件和目录都有一个所有者(owner)和一个所属组(group)。所有者通常是创建该文件或目录的用户,而所属组通常是文件或目录所属的组。在某些情况下,您可能需要查找特定文件或目录的所有者。以下是在 Linux 中查找文件所有者的几种方法:
网络技术联盟站
2023/04/24
4.3K0
如何在 Linux 中查找文件所有者?
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息。最后由我用java实现linux上exe文件的版本号读取功能。下面是详细代码:
业余草
2019/01/21
6K0
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
如何在Selenium自动化Chrome浏览器中模拟用户行为和交互?
Selenium是一个用于自动化Web应用程序测试的工具,它可以模拟真实的用户在浏览器中进行各种操作,如点击、输入、滚动等。Selenium支持多种浏览器,如Chrome、Firefox、Edge等,但是每种浏览器都需要相应的驱动程序才能与Selenium进行通信。本文将介绍如何在Selenium中使用Chrome浏览器,并且设置代理服务器来避免被目标网站识别。
jackcode
2023/07/26
8900
CSDN用户行为分析和用户行为数据爬取
爬虫随机从CSDN博客取得800条用户行为数据,包含用户名、原创博客数、评论数、浏览量,试着从博客数,评论数,浏览量三个方面分析csdn的博主们的形象。
逝兮诚
2019/10/30
1.6K0
如何在Windows中运行bash
当微软宣布,将在Windows10上面支持bash时,所有的Unix命令行用户都为之雀跃了。上周三,微软发布了一个测试版本,开始支持了这项功能。 为了运行bash,首先要进行几步操作。首先,需要获得Windows10的build 14316。 安装内测版本之后,用户需要切换到开发者模式,从设置>更新(Settings > Updates),安全>开发者(Security > For Developers)打开新的设置页面,选择“Windows Subsystem for Linux (Beta)”,重启
CSDN技术头条
2018/02/11
3.8K0
如何在Windows中运行bash
浅谈用户行为分析
关于用户行为分析,很多互联网公司都有相关的需求,虽然业务不同,但是关于用户行为分析的方法和技术实现都是基本相同的。在此分享一下自己的一些心得。
数据社
2020/05/25
4.1K1
用户行为分析(Python)
电商、互联网、金融这三驾马车是对数据分析应用最为广泛的行业,同时也占据了就业市场上绝大多数的数据分析岗位,只因日常业务产生的海量数据蕴含着无尽的价值。 本次就通过电商角度,选取阿里天池项目中的淘宝App用户行为数据利用Python进行数据分析。
用户8949263
2022/04/08
4.7K0
用户行为分析(Python)
Flink在用户行为分析中的应用(一)
传统的企业营销大体是营销人员通过查询画像标签库去圈选人群,这种方案往往无法抓住那些"转瞬即逝的机会"
隐约喜欢萌萌哒
2022/09/03
1.2K0
Pulumi 如何在 Windows 环境中设置
没有安装文件, Pulumi 没有安装文件,所以你不能按照下载后安装的方式来进行配置。
HoneyMoose
2021/05/21
2K0
Pulumi 如何在 Windows 环境中设置
如何在Linux中搭建Windows环境
众所周知,搭建网站最好用是Linux系统,但是有一些Windows软件没法运行在Linux服务器上,就很痛苦
雾海梦曦
2022/11/14
1.5K0
如何在Linux中搭建Windows环境
多维用户行为模型
多维用户行为模型核心思想是在数据仓库的DWD和DWS层回答 "用户(User) 在什么时间(When),什么地点(Where), 通过何种方式(How), 对谁(Who,可能是feed,也可能是user), 做了什么(What或者Event)",一般是基于ODS层的用户维度表,用户行为日志明细表数据,在DWD加工而成,然后直接服务上层应用(建视图的方式)或者根据需求配合产品维度表在DWS汇总面向业务应用。常见的是用户行为分析的漏斗转化,桑吉图显示, 用户统计标签加工等。
平常心
2020/10/24
1.5K0
如何使用“行为模型”做用户行为养成
用户可能会习惯性的使用一款产品,或者在使用一款产品时会产生习惯性的行为。造成这种情况的原因可以有很多,比如不断的刷朋友圈生怕错过什么信息、比如刷抖音熬夜停不下来、比如每天都要开黑一局…
晓吾
2022/01/21
1.8K0
如何使用“行为模型”做用户行为养成
Flink用户画像用户画像行为特征
我们要使用的几个组件为Hadoop 2.6,HBase 1.0.0,MySQL 8,zookeeper 3.4.5,kafka 2.1.0,Flink 1.13,Canal 1.1.5。为了方便,这里都使用伪集群和单机安装。
算法之名
2021/11/10
8.8K0
如何在gin中获取响应体内容?
实现思路: 对gin的responseWriter进行包装, 每次写往请求方写响应数据的时候,将响应数据返回出去。step1: 定义一个新的CustomResponseWriter,通过组合方式持有一个gin.ResponseWriter和response body缓存。type CustomResponseWriter struct { gin.ResponseWriter body *bytes.Buffer}func (w CustomResponseWriter) Write(b []byt
Johns
2021/04/10
11.6K0
如何在gin中获取响应体内容?
如何在Bash中获取数组长度?
在Bash脚本中,数组是一种常用的数据结构,用于存储多个值。在处理数组时,经常需要知道数组的长度,即数组中元素的个数。本文将详细介绍如何在Bash中获取数组长度的方法,以帮助您更好地处理数组操作。
网络技术联盟站
2023/06/17
1.3K0
如何在Bash中获取数组长度?
点击加载更多

相似问题

如何在windows中获取所有者的用户in?

20

如何在windows中获取当前用户?

20

如何在Windows SAS中获取sas文件的所有者信息?

11

Windows中的C#获取文件所有者

11

如何在Windows7上获取gethostid行为?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文