我有一个定义它的脚本#!/bin/bash,我想检查这个脚本是否兼容#!/bin/sh.
有办法吗?
我有一个要在Centos 7中获取的文件。如果这样做,它可以正常工作:
$ source set_puregev_env
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其放在shell脚本中,它将无法正常工作。
$ sh xRUN
xRUN: line 3: source: set_puregev_env: file not found
Run Code Online (Sandbox Code Playgroud)
这是我的shell脚本:xRUN
#!/bin/bash
source set_puregev_env
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我可能做错了什么,或者想念吗?
我编写了一个脚本来查找所有正在运行的具有特定名称的docker容器,当我直接将它输入到我的终端时它可以工作但是只要我把它放到Makefile就会抛出一个错误
/ bin/sh:1:错误的替换
这是makefile中的脚本:
remote: FORCE
docker ps -q --filter name=$$(tmp=$${PWD##*/} && printf "%s_workspace" "$${tmp//./}")
Run Code Online (Sandbox Code Playgroud)
为了澄清name =正在做什么之后,它正在尝试获取当前文件夹名称并删除所有.并将其附加到我的容器名称即工作空间.
当我在容器内时,会发生以下情况:
pip uninstall -y -r <(pip freeze)
然而,当我尝试在 Dockerfile 中执行相同操作时,如下所示:
RUN pip uninstall -y -r <(pip freeze)
我得到:
------
> [ 7/10] RUN pip uninstall -y -r <(pip freeze):
#11 0.182 /bin/sh: 1: Syntax error: "(" unexpected
------
executor failed running [/bin/sh -c pip uninstall -y -r <(pip freeze)]: exit code: 2
Run Code Online (Sandbox Code Playgroud)
我如何重写这个命令才能让它满意?
我正在使用这个解决方法。然而仍然对一句话答案感兴趣
RUN pip freeze > to_delete.txt
RUN pip uninstall -y -r to_delete.txt
Run Code Online (Sandbox Code Playgroud) s='id;some text here with possible ; inside'
IFS=';' read -r id string <<< "$s"
echo "$id"
Run Code Online (Sandbox Code Playgroud)
restore.sh: 2: restore.sh: Syntax error: redirection unexpected
Run Code Online (Sandbox Code Playgroud)
bash版本 GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
我已经为UNIX和Windows编写了近3年的脚本.我一直对这两个术语感到困惑,有一段时间我认为bash脚本是windows cmd脚本,而shell脚本是UNIX脚本,但我知道这是不对的.那么这两个术语有什么区别:BASH和Shell脚本?
我道歉,因为这必须是其他人提出的问题,但似乎谷歌证明.我正在试图弄清楚调用了什么shell,因为我遇到了一个不一致的问题.如果我sudo,我的脚本不起作用,但是如果我的话,它确实有用sudo bash.然而,当我sudo echo $0,它说bash.
cpu=$(cat /proc/cpuinfo | grep Revision | cut -d' ' -f 2-);
if [[ "a22082" = $cpu || "a02082" = $cpu ]]; then
echo 'do stuff';
fi
Run Code Online (Sandbox Code Playgroud)
如果我用#!/ bin/sh指定命令解释器,它仍然会失败,但更具体的是#!/ bin/bash.
我(现在)知道这[[是特定的bash但是尽管响应它似乎并不像sudo的默认shell是bash.
我想在bash脚本中执行psql语句并将结果输出到文件.我下面的代码按预期工作:
#!/bin/bash
query="select * from mytable;"
psql <<EOF > output.txt
\timing
$query
EOF
Run Code Online (Sandbox Code Playgroud)
我想运行该psql命令块5次并将结果附加到output.txt.如果我只复制并粘贴它4次,它工作正常,但当我尝试将其放入for循环时,我得到错误.有没有办法做到这一点?
这是我厌倦的循环:
#!/bin/bash
query="select * from mytable;"
for (( i=0; i<5; i++ ))
do
psql <<EOF > output.txt
\timing
$query
EOF
done
Run Code Online (Sandbox Code Playgroud)
如果我将决赛EOF一直移到左边,它只执行一次,好像循环不存在一样.
在获得源代码后调用perl的bash包装函数 .bash_profile
system ('source ~/.bash_profile; osascript -e \'quit app "Chromium"\'');
尽管包装函数被调用并执行得很好,但是我从一个不相关的bash函数中抛出了一个错误:
/Users/me/.bashrc: line 9: syntax error near unexpected token `<'
/Users/me/.bashrc: line 9: ` done < <(find -L "$1" -type f -not -name *.swp -print0 | LC_COLLATE=C sort -dz)'
Run Code Online (Sandbox Code Playgroud)
这是.bashrc文件中的问题功能:
source_dir() {
while IFS= read -r -d $'\0' file; do
source_file "$file"
done < <(find -L "$1" -type f -not -name *.swp -print0 | LC_COLLATE=C sort -dz)
}
Run Code Online (Sandbox Code Playgroud)
仅当通过Perl脚本加载它时,此bash函数直接采购它时不会引发错误。我很好奇为什么。
我正在运行bash版本5.0.2。
执行代码的以下部分时,出现错误:语法错误:需要操作数(错误标记为“/(60*60*24)”)
# \function convertsecs2dhms
# \brief convert seconds to days hour min sec
#####################################################################################################################
function convertsecs2dhms()
{
((d=${1}/(60*60*24)))
((h=(${1}%(60*60*24))/(60*60)))
((m=(${1}%(60*60))/60))
((s=${1}%60))
printValue=`printf "%02d days %02d hours %02d minutes %02d seconds \n" $d $h $m $s`
printInfo "$printValue"
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
# \function convertsecs2dhms
# \brief convert seconds to days hour min sec
#####################################################################################################################
function convertsecs2dhms()
{
((d=${1}/(60*60*24)))
((h=(${1}%(60*60*24))/(60*60)))
((m=(${1}%(60*60))/60))
((s=${1}%60))
printValue=`printf "%02d days %02d hours %02d minutes %02d seconds \n" $d $h $m $s`
printInfo "$printValue"
}
Run Code Online (Sandbox Code Playgroud) 这两个命令有什么区别?
cat test.txtbash -c "cat test.txt"我已经阅读了文档,但没有任何示例来理解它。
我有一段简单的代码,当我自己运行时,它可以工作,虽然它从文件中调用时不起作用.
代码如下:
for files in *; do echo ${files::10}; done
Run Code Online (Sandbox Code Playgroud)
当我尝试将其放入文件(例如MyScript.sh)时,我运行以下命令:
sh MyScript.sh
Run Code Online (Sandbox Code Playgroud)
我收到以下错误"MyScript.sh:2:MyScript.sh:Bad substitution"
为什么会这样?怎么解决这个问题?
我目前被困在如何执行以下操作上:
我有一个settings看起来像这样的文件:
USER_ID=12
ROLE=admin
STARTED=10/20/2010
...
Run Code Online (Sandbox Code Playgroud)
我需要访问角色并将角色映射到下面脚本中的变量之一。在我将使用该变量调用打开具有正确名称的文档之后。
测试文件
#!/bin/sh
ADMIN=master_doc
STAFF=staff_doc
GUEST=welcome_doc
echo "accessing role type"
cd /setting
#open `settings` file to access role?
#call correct service
#chmod 555 master_doc.service
Run Code Online (Sandbox Code Playgroud)
有没有办法像javascript一样使用bash插入字符串?另外,我猜我需要遍历设置文件才能访问角色?