![]() |
1
52
这似乎在bash和korn之间是可移植的:
类似于此的行或类似于作业的行
|
![]() |
2
134
如果您的bash版本知道bash_源数组变量,请尝试如下操作:
|
![]() |
3
79
强大的解决方案
单衬垫 请遵循下面的说明;交叉shell版本很复杂,但它应该能够可靠地工作:
说明: 猛击
注:该技术改编自
user5754163's answer
因为它比原来的解决方案更强大,
KSH
特殊变量
不像巴什,
ZSH
警告:在命令替换中,zsh附加
仅使用POSIX功能
如果你愿意做出某些假设,你可以
做一个
合理,但不是傻瓜的猜测
至于脚本的来源,基于
知道二进制文件名
可能正在执行脚本的shell
.
中的“如何处理源调用”部分 this answer 我讨论的边缘案例 不能 仅在细节上使用POSIX功能处理。
这个
依靠的标准行为
因此,最安全的方法是 将上述健壮的、特定于shell的方法与 回退解决方案 所有剩余外壳。
帽子的尖端
Stéphane Desneux
和
his answer
为了灵感(将我的跨壳陈述表达转化为
〔1〕
user1902689
发现
|
![]() |
4
66
在阅读了@denniswilliamson的答案后,有一些问题,请参阅以下内容: 因为这个问题代表 ksh 和 bash ,在这个答案中还有另一部分涉及 KSH …见下文。 简单的 猛击 方式
让我们尝试一下(因为那个bash可以;-):
我用
请注意,在流程停留期间,流程编号不会更改。 来源的 :
为什么不使用
|
![]() |
5
30
这个
正如wirawan purwanto所建议的,最有力的方法是检查
然后:
这相当于检查
(在bash-4.2及更高版本中,您可以使用更简单的形式
但是,你的问题是”
我有一个脚本,我不希望它在源代码中调用“exit”
“。共同点
如果脚本是源代码,那么
如果正在执行脚本,则
可悲的是,这不适用于
更新的
你怎么了
可以
在当代版本的
这不像bash版本那么健壮,必须调用
(您也可能对
this code
在使用
这里的标准答案是:
http://mywiki.wooledge.org/BashFAQ/109
还提供
笔记:
|
![]() |
6
18
编者按:这个答案的解决方案很有效,但是
DR
尝试执行
把它放在一个文件中,然后调用它,比如test.sh:
直接执行:
来源:
对我来说,这在zsh和bash中有效。 解释
这个
您不需要看到该错误消息,因此可以将输出重定向到dev/null:
现在检查退出代码。0表示正常(未发生错误),1表示发生错误:
您还希望执行
现在,您可以看到子shell的退出代码,应该是1,因为子shell中出现了错误:
|
![]() |
7
6
在阅读了所有其他答案之后,我为自己提出了以下解决方案:
这适用于所有脚本,其中
从开始
此脚本配方具有以下属性:
因此,除了一些不太可能发生的角落案件,
AS
为什么我认为这是一个很好的解决挑战的一般方法
如果您有可以通过多个shell获得的东西,那么它必须是兼容的。但是(阅读其他答案)
因为没有可移植的方法来检测
通过强制脚本必须由
这个 解决除以下情况以外的所有情况 在这种情况下,脚本不能直接运行:
然而,我不能想到任何真正的原因,在您需要的地方,也能够源代码完全相同的脚本并行!通常可以包装它,这样脚本总是源代码。然后执行
注释如果没有其他答案的帮助,这个答案是不可能的!甚至是错误的——这让我把它贴了出来。 |
![]() |
8
5
我会给出一个具体的回答。Korn Shell,对不起。假设您的脚本名是
现在尝试以多种方式执行它:
所以这是无一例外的,它不是用易碎的
只有两个警告:
1)调用
2)函数
|
![]() |
9
4
我建议对 Dennis' very helpful answer 为了使它更轻便,我希望:
因为
|
![]() |
10
3
这在后面的脚本中起作用,不依赖于变量:
或
|
![]() |
11
2
例如,如果用户设置了
我找到的最好方法是
不幸的是,这种方法在zsh中不适用,因为
为了解决这个问题,我把
|
![]() |
12
1
我跟随 mklement0 compact expression . 这很好,但我注意到,当调用ksh时,它可能会失败:
(它认为它是源代码,而不是因为它执行了子外壳) 但是这个表达式可以检测到:
另外,即使表达式是紧凑的,语法也不能与所有shell兼容。 所以我以下面的代码结束,它适用于bash、zsh、dash和ksh
请随意添加异域贝壳支持:) |
![]() |
13
0
我认为在ksh和bash中没有任何可移植的方法来实现这一点。在bash中,您可以使用
|
![]() |
14
0
我需要一个在bash.version>=3的[mac,linux]上工作的一行程序,这些答案都不符合要求。
|
![]() |
15
0
直奔主题: 必须计算变量 “0美元” 等于外壳的名称。
通过源
:
很难有一个 100%便携式 检测脚本是否来源。 关于我的经验 (使用shell脚本编写7年) ,唯一安全的方法(不依赖环境变量 PID 等等,这是不安全的,因为它是 变量 你应该:
这两个选项都不能自动缩放,但这是更安全的方法。
例如:
通过ssh会话源代码脚本时,变量返回的值 “0美元” (使用时) 来源 是 -巴什 .
或
|
![]() |
16
0
最后我检查了一下
使用时
测试:
|
![]() |
Jerome · 用于检查成功响应的脚本,而不仅仅是200[已关闭] 5 月前 |
![]() |
NullVoxPopuli · 重命名文件夹的最快方法是什么?[关闭] 5 月前 |
![]() |
YorSubs · Linux中遍历目录的时间不同方法[关闭] 6 月前 |
![]() |
Plankt0n · Shell,执行一个需要逐一遍历多个值的命令 6 月前 |
![]() |
Andres Mora · 如何根据文件名条件删除文件夹中的图像? 6 月前 |