相关疑难解决方法(0)

从脚本本身获取Bash脚本的源目录

如何获取其中的目录路径的Bash脚本位于,里面那个脚本?

例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:

$ ./application

directory bash

4672
推荐指数
44
解决办法
158万
查看次数

如何从Bash脚本中检测操作系统?

我想保留我.bashrc.bash_login文件的版本控制,以便我可以在我使用的所有计算机之间使用它们.问题是,我有一些特定于操作系统的别名,所以我一直在寻找一种方式来确定脚本在Mac OS X,Linux或运行Cygwin的.

Bash脚本中检测操作系统的正确方法是什么?

bash os-detection

463
推荐指数
18
解决办法
26万
查看次数

操作系统检测makefile

我经常在几台不同的计算机和几种不同的操作系统上工作,这些操作系统是Mac OS X,Linux或Solaris.对于我正在进行的项目,我从远程git存储库中提取代码.

无论我在哪个终端,我都希望能够处理我的项目.到目前为止,我已经找到了通过每次切换计算机时更改makefile来绕过操作系统更改的方法.然而,这是乏味的,并引起一堆头痛.

如何修改我的makefile,以便它检测我正在使用哪个操作系统并相应地修改语法?

这是makefile:

cc = gcc -g
CC = g++ -g
yacc=$(YACC)
lex=$(FLEX)

all: assembler

assembler: y.tab.o lex.yy.o
        $(CC) -o assembler y.tab.o lex.yy.o -ll -l y

assembler.o: assembler.c
        $(cc) -o assembler.o assembler.c

y.tab.o: assem.y
        $(yacc) -d assem.y
        $(CC) -c y.tab.c

lex.yy.o: assem.l
        $(lex) assem.l
        $(cc) -c lex.yy.c

clean:
        rm -f lex.yy.c y.tab.c y.tab.h assembler *.o *.tmp *.debug *.acts
Run Code Online (Sandbox Code Playgroud)

makefile os-agnostic os-detection

237
推荐指数
10
解决办法
15万
查看次数

从Windows上的bash脚本运行Openssl - 主题不以'/'开头

在我的剧本中我有:

openssl req \
  -x509 \
  -new \
  -nodes \
  -key certs/ca/my-root-ca.key.pem \
  -days 3652 \
  -out certs/ca/my-root-ca.crt.pem \
  -subj "/C=GB/ST=someplace/L=Provo/O=Achme/CN=${FQDN}"
Run Code Online (Sandbox Code Playgroud)

在Git Bash 3.1中在Windows上运行它给出:

Subject does not start with '/'.
Run Code Online (Sandbox Code Playgroud)

试图像这样逃避subj:-subj \"/ C = UK/ST = someplace/L = Provo/O = Achme/CN = $ {FQDN} \"

仍然无法正常工作.有任何想法吗?

windows string bash openssl

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

Shell脚本语法错误:意外的文件结束

在以下脚本中,我收到一个错误:

语法错误:意外的文件结束

这个错误是什么我可以恢复它?它指向调用函数的行.

#!/bin/sh

expected_diskusage="264"
expected_dbconn="25"
expected_httpdconn="20"
expected_cpuusage="95"
#expected_fd="100"

httpdconn=`ps -ef|grep -i httpd|grep -v grep|wc -l` #httpd connections
cpu_usage=`ps aux|awk 'NR > 0 { s +=$3 }; END {print s}'`
disk_usage=`df -h|awk {'print $2'}|head -n3|awk 'NF{s=$0}END{print s}'`
#db_connections=`mysql -uroot -pexxxxxx -s -N -e "show processlist"|wc -l`

db_connections=6
cld_alert()
{
    nwconn=$1
    cpu_usage=$2
    disk_usage=$3
    db_connections=$4
    message=$5
    `touch /tmp/alert.txt && > /tmp/alert.txt`
    date=`date`
    echo -e "$date\n" > /tmp/alert.txt
    echo -e "$message" >> /tmp/alert.txt
    path="/proc/$httpd/fd/";
    cd $path
    tfd=`ls -l|wc -l`;
    sfd=`ls -ltr|grep sock|wc -l`; …
Run Code Online (Sandbox Code Playgroud)

shell sh

43
推荐指数
6
解决办法
26万
查看次数

使用C/C++代码识别平台linux或windows

我在接受采访时被问到,如何通过提供可运行的C代码来识别平台?

代码必须在两个平台上都可以运行(即没有用于检查的特殊头文件函数)?

c c++ linux windows

9
推荐指数
2
解决办法
3134
查看次数

如何指定系统独立的类路径

我需要运行带有自定义类路径的java命令.

在Windows上我需要输入:

java -cp foo;bar
Run Code Online (Sandbox Code Playgroud)

在Linux上我需要输入:

java -cp foo:bar
Run Code Online (Sandbox Code Playgroud)

我们目前有一个包含第一个版本的.bat文件和一个包含第二个版本的.sh文件.这在大多数情况下工作正常,但在Windows上的git-bash失败,这需要带有分号分隔符的shell脚本.

是否有任何系统独立的方式来编写这样的类路径?

我会想到类似的东西

java -cp foo -cp bar
Run Code Online (Sandbox Code Playgroud)

但这不是这种方式.

目前,我看到的唯一方法是让一些shell逻辑确定操作系统并从中生成正确的命令行.

java方式有更简单的方法吗?

java command-line classpath

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

如何检查 shell 脚本/Vim 是否在 VS Code 集成终端中运行?

问题

问题如标题所述。

总而言之,我试图让我的 bash 脚本和 Vim 在 VS Code 的集成终端中运行时表现出不同的行为。

我发现的东西

我设法找到了其他几个堆栈溢出问题,但它们与操作系统的检测有关:
-如何检查是否在 Cygwin、Mac 或 Linux 中运行?
-如何从 Bash 脚本中检测操作系统?

vim bash shell zsh visual-studio-code

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

Shell脚本查找机器的操作系统

如何使用bash脚本查找操作系统?我找到了这个答案:从Bash脚本中检测操作系统.目前尚不清楚它是否适用于Mac OS X.

我想在Mac OS X上找到它与不同的Linux操作系统相比.

bash shell operating-system

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