相关疑难解决方法(0)

sh和bash之间的区别

在编写shell程序时,我们经常使用/bin/sh/bin/bash.我经常使用bash,但我不知道它们之间有什么区别.

bash和之间的主要区别是sh什么?

我们究竟需要意识到在编程时bashsh

unix bash shell sh

1194
推荐指数
11
解决办法
46万
查看次数

为什么#!/ usr/bin/env bash优于#!/ bin/bash?

我在很多地方看到过,包括对这个网站的推荐(什么是首选的Bash shebang?),#!/usr/bin/env bash优先使用#!/bin/bash.我还看过一个进取的个人建议使用#!/bin/bash错误的和bash的功能会这样做会丢失.

总而言之,我在严格控制的测试环境中使用bash,其中每个循环驱动器基本上都是单个主驱动器的克隆.我理解可移植性论点,虽然它不一定适用于我的情况.是否有任何其他理由更喜欢#!/usr/bin/env bash替代品,并且假设可移植性是一个问题,是否有任何理由使用它可能会破坏功能?

bash shebang

185
推荐指数
4
解决办法
6万
查看次数

如何在bash脚本中获取不同用户的$ HOME目录?

我需要以不同的用户身份执行bash脚本的一部分,并在该用户的$HOME目录中执行.但是,我不确定如何确定这个变量.切换到该用户并调用$HOME不提供正确的位置:

# running script as root, but switching to a different user...
su - $different_user
echo $HOME
# returns /root/ but should be /home/myuser
Run Code Online (Sandbox Code Playgroud)

更新:

似乎问题在于我尝试在脚本中切换用户的方式:

$different_user=deploy

# create user
useradd -m -s /bin/bash $different_user

echo "Current user: `whoami`"
# Current user: root

echo "Switching user to $different_user"
# Switching user to deploy

su - $different_user
echo "Current user: `whoami`"
# Current user: root
echo "Current user: `id`"
# Current user: uid=0(root) gid=0(root) groups=0(root)

sudo su …
Run Code Online (Sandbox Code Playgroud)

bash

58
推荐指数
4
解决办法
13万
查看次数

在bash中使用`!#`有什么用?

我不是在谈论UNIX shebang意图给出解释器的路径.事实上,shebang已经很难成功地谷歌这个问题了...

我在谈论bash扩张:

  • !! 检索前一个命令(类似于向上箭头,但更有用)
  • !$ 检索最后一个命令的最后一个单词
  • !# 似乎检索当前行

实际上有用的是!#什么?

  • echo !# 扩展到 echo echo
  • echo echo !# 扩展到 echo echo echo echo
  • ls !#扩展到ls ls.

所有这些看起来都是毫无意义的.我所知道的关于!#命令的是我从使用它中学到的东西 - 我不确定我是否知道它的真正功能.

bash shell

8
推荐指数
1
解决办法
298
查看次数

GCC与多种架构兼容的最高指令集

我是一个具有不同体系结构的机器组成的集群上运行的作业: gcc -march=native -Q --help=target | grep -- '-march=' | cut -f3给我的其中之一:broadwellhaswellivybridgesandybridgeskylake

可执行文件必须是相同的,所以我不能使用,-march=native但是同时架构具有共同点(我认为它们都支持AVX?)。

I am aware that gcc (contrary to Intel icc) does not allow for multiple archictures in a single executable. What I would like to know is if there is a way to ask gcc for the highest set of instructions compatible with all the architectures listed above.

gcc version: 8.1.1

c gcc cpu-architecture

5
推荐指数
1
解决办法
419
查看次数

推荐的POSIX sh shebang是什么

我读过,如果您想以便携式方式使用Bash,则应该使用shebang:

#!/usr/bin/env bash

但是现在我想知道:当我想明确声明我不依赖Bash而是编写了POSIX兼容脚本时,我应该使用:

#!/bin/sh

还是#!/usr/bin/env sh在这里更可取?

shell posix sh

5
推荐指数
1
解决办法
667
查看次数

用户目录中的Apache CGI"标题之前的脚本输出结束"

我知道有关于这个主题的一些问题,但似乎都没有解决我的问题.看到这个这个这个.

我在Linux,Fedora21上,我正在尝试启用每个用户目录的CGI脚本.我遵循了这些指示,但没有成功.

我收到错误:

[cgi:error] End of script output before headers: test.cgi
Run Code Online (Sandbox Code Playgroud)

test.cgi 是一个可执行的sh文件,包含一个非常简单的脚本:

#!/usr/bin/sh

echo "Content-type: text/plain"
echo ""
echo "Hello"
Run Code Online (Sandbox Code Playgroud)

它有可执行标志,并且没有shell的问题.我也试过Python:同样的结果.

我也禁用了selinux.

我也尝试将debug级别设置为Apache的ErrorLog,但我得到的只是在上面的错误之前被"授予"权限.

我还配置了/etc/httpd/conf.d/userdir.conf文件

<Directory "/home/*/public_html">
    AllowOverride All
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require all granted
</Directory>

<Directory /home/*/public_html/cgi-bin/>
    Options ExecCGI FollowSymLinks
    SetHandler cgi-script
    AddHandler cgi-script .cgi .exe .pl .py .vbs
    Require all granted
    AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)

并重新启动服务器.没有成功.一切看起来都很好,我无法理解......有什么不对?

编辑:

我忘了添加该问题只针对每用户目录:如果我将相同的脚本移动到/var/www/cgi-bin目录,它按预期工作.

编辑2:

shell确实存在:

$ ls /usr/bin/sh …
Run Code Online (Sandbox Code Playgroud)

linux apache cgi

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

如何在 Makefile 中设置 pipefail

考虑这个 Makfile:

all: 
    test 1 -eq 2 | cat
    echo 'done'
Run Code Online (Sandbox Code Playgroud)

它将被执行而不会出错。

我听说set -o pipefail我可以这样使用:

all: 
    set -o pipefail;     \
    test 1 -eq 2 | cat;  \
    echo 'done'
Run Code Online (Sandbox Code Playgroud)

除了它不起作用之外,这篇文章是非常痛苦的。

另一种解决方案是使用临时文件。我想避免它。

我可以使用什么其他解决方案?

error-handling makefile pipe

4
推荐指数
2
解决办法
2338
查看次数

如何在 MacOS 中使用 bash 打开和关闭应用程序

我想从 bash shell(.sh 使用 #!/usr/bin/bash)打开一个应用程序(.app),该应用程序位于 /Applications 中的文件夹中。我该如何打开它?
如果我可以打开它,我可以关闭它吗?如果是,怎么办?

macos bash

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

在非登录 shell 中执行的 shebang 中执行 bash 脚本的正确语法是什么

背景:我试图通过节点脚本顶部的 shebang 在非登录 shell 中正确nvm设置。node

\n

节点脚本的 shebang 是login shell

\n
#!/usr/bin/env node   \n
Run Code Online (Sandbox Code Playgroud)\n

这不起作用,non-login shell所以我想做相当于:

\n
#!/usr/bin/env [[ -s $HOME/.nvm/nvm.sh ]] && source "$HOME/.nvm/nvm.sh" && node\n
Run Code Online (Sandbox Code Playgroud)\n

但我无法获得正确的语法(请参阅下面的错误)。我尝试了多种方法,包括引用脚本或尝试运行它bash -c。但每次我都会遇到解析错误。

\n

完整的脚本是:

\n
#!/usr/bin/env node\n\nconst semver = require('semver');\nconsole.log("Hello World! You're using " + process.version)\n
Run Code Online (Sandbox Code Playgroud)\n

错误:

\n

在登录 shell 中(我不需要它)

\n
\xe2\x9d\xaf bin/nodesample.js\nenv: [[: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n

在非登录外壳中我想找到解决方案

\n
env: [[: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n …

bash shell nvm

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

如何从shell一个接一个地运行多个python脚本

我想从 shell 运行多个 Python 脚本。我用pythonDim.sh脚本来做同样的事情。

#!/usr/bin/python
/home/path_to_script/dimAO.py
/home/path_to_script/dimA1.py
/home/path_to_script/dimA2.py
/home/path_to_script/dimA3.py
Run Code Online (Sandbox Code Playgroud)

但它不起作用。怎么写shell脚本?

python shell python-3.x

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

从带有空格的路径中获取文件夹的名称

我是 bash 的新手,我想知道如何从路径打印最后一个文件夹名称。

mypath="/Users/ckull/Desktop/Winchester stuff/a b c/some other folder/"
dir="$(basename $mypath)"
echo "looking in $dir"
Run Code Online (Sandbox Code Playgroud)

其中dir是路径中的最后一个目录。它应该打印为

some other folder
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

Winchester
stuff
a
b
c
some
other
folder
Run Code Online (Sandbox Code Playgroud)

我知道空格会导致问题;) 我是否需要将结果通过管道传输到字符串然后替换换行符?或者也许有更好的方法......

directory bash path basename

0
推荐指数
1
解决办法
123
查看次数

为什么我们在 Bash 脚本中使用 #!/bin/bash?

在 bash 脚本的开头使用#!/bin/bash 有什么意义?我们可以在没有#!/bin/bash 的情况下编写 bash 脚本吗?

bash shell

-2
推荐指数
1
解决办法
8037
查看次数

标签 统计

bash ×8

shell ×6

sh ×2

apache ×1

basename ×1

c ×1

cgi ×1

cpu-architecture ×1

directory ×1

error-handling ×1

gcc ×1

linux ×1

macos ×1

makefile ×1

nvm ×1

path ×1

pipe ×1

posix ×1

python ×1

python-3.x ×1

shebang ×1

unix ×1