标签: shebang

在屏幕中运行脚本

我想在分离的屏幕中运行 bash 脚本。该脚本多次调用程序,每次都需要等待太长时间。我的第一个想法是简单地打开一个屏幕,然后调用脚本,但似乎ctrl-a d在脚本运行时我无法分离 (by )。所以我做了一些研究,发现这个指令用以下内容替换了shebang:

#!/usr/bin/screen -d -m -S screenName /bin/bash
Run Code Online (Sandbox Code Playgroud)

但这也不起作用(无法识别选项)。有什么建议?

PS 我刚刚想到screen -dmS name ./script.sh这可能对我的目的有用,但我仍然很好奇如何将它合并到脚本中。谢谢你。

scripting gnu-screen shell-script shebang

29
推荐指数
3
解决办法
12万
查看次数

是否建议使用 zsh 而不是 bash 脚本?

我可以假设已经zsh安装了足够多的人来运行带有

#!/usr/bin/env zsh
Run Code Online (Sandbox Code Playgroud)

作为舍邦?

或者这会使我的脚本无法在太多系统上运行吗?

澄清:我对最终用户可能想要运行的程序/脚本感兴趣(例如在 Ubuntu、Debian、SUSE、Arch 等上)

bash zsh portability shebang

28
推荐指数
2
解决办法
3万
查看次数

为什么 .bashrc/.bash_profile 中没有 shebang?

简单查询:我刚刚意识到我从未在脚本顶部看到过shebang.bashrc,这让我认为系统在登录时使用默认shell 来获取它(${SHELL})。我正在思考为什么会出现这种情况,即使用默认 shell 以外的其他东西来运行登录脚本是否被认为是一个坏习惯。

shell profile bashrc shebang

27
推荐指数
3
解决办法
7395
查看次数

为什么不使用无路径shebang?

是否有可能有一个shebang,而不是指定解释器的路径,而是具有解释器的名称,并让shell通过$PATH找到它?

如果没有,有什么原因吗?

shell shebang

26
推荐指数
2
解决办法
4840
查看次数

在shebang之后签名?

Apache httpd 项目的“support/apxs.in”脚本中@#!. 也就是说,脚本的第一行是:

#!@perlbin@ -w
Run Code Online (Sandbox Code Playgroud)

这是 Perl 的东西还是 UNIX 内核的东西?换句话说,可以使用path/to/script/script_name.in?

如果没有,那么用#!?启动脚本的原因是什么?

scripting perl shebang

26
推荐指数
1
解决办法
3047
查看次数

'-v' 和 '-x' 参数对 bash 意味着什么?

我见过几个带有以下shebang的shell脚本:

#!/bin/bash -x -v 
Run Code Online (Sandbox Code Playgroud)

但是,如果它们完全属于,man bash则不会解释这些论点-x-v代表什么bash

那么这些-x-v(以及其他可能的论点)是什么意思?

bash shebang

25
推荐指数
1
解决办法
4万
查看次数

哪个 shell 解释器运行一个没有 shebang 的脚本?

假设我帐户的默认 shell 是 zsh,但我打开了终端并启动了 bash 并执行了一个名为 的脚本prac002.sh,哪个 shell 解释器将用于执行脚本,zsh 还是 bash?考虑以下示例:

papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf
[sudo] password for papagolf: 
papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh
# papagolf's default shell is zsh

papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash
# I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.)

papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh 
Enter username : Rex
Rex
# Which interpreter did it just use?
Run Code Online (Sandbox Code Playgroud)

**编辑:** 这是脚本的内容

papagolf@Sierra ~/My Files/My Programs/Learning/Shell …
Run Code Online (Sandbox Code Playgroud)

shell bash zsh shell-script shebang

23
推荐指数
2
解决办法
1万
查看次数

“舍邦”为什么叫“舍邦”?

“shebang”是“bang she”的意思吗?
为什么不把“hebang”改成“bang he”呢?

terminology history shebang

20
推荐指数
3
解决办法
1万
查看次数

为什么 POSIX 未指定 `#!` 语法的行为?

从POSIX 规范的Shell 命令语言页面:

如果 shell 命令文件的第一行以字符“#!”开头,则结果未指定。

为什么#!POSIX 未指定的行为?我觉得令人困惑的是,如此便携和广泛使用的东西会有未指明的行为。

shell posix shebang

18
推荐指数
2
解决办法
2490
查看次数

在脚本启动后选择解释器,例如在 hashbang 中的 if/else

有没有办法动态选择正在执行脚本的解释器?我有一个在两个不同系统上运行的脚本,我想使用的解释器位于两个系统上的不同位置。我最终不得不在每次切换时更改 hashbang 行。我想做一些与此逻辑等效的事情(我意识到这种确切的构造是不可能的):

if running on system A:
    #!/path/to/python/on/systemA
elif running on system B:
    #!/path/on/systemB

#Rest of script goes here
Run Code Online (Sandbox Code Playgroud)

或者更好的是这样,以便它尝试使用第一个解释器,如果没有找到,则使用第二个解释器:

try:
    #!/path/to/python/on/systemA
except: 
    #!path/on/systemB

#Rest of script goes here
Run Code Online (Sandbox Code Playgroud)

显然,我可以 根据我所在的位置/path/to/python/on/systemA myscript.py/path/on/systemB myscript.py根据我所在的位置来执行它 ,但我实际上有一个启动的包装脚本myscript.py,所以我想以编程方式而不是手动指定 python 解释器的路径。

shell shell-script exec shebang interpreter

17
推荐指数
3
解决办法
7263
查看次数