如何获取其中的目录路径的Bash脚本位于,里面那个脚本?
例如,假设我想使用Bash脚本作为另一个应用程序的启动器.我想将工作目录更改为Bash脚本所在的目录,因此我可以对该目录中的文件进行操作,如下所示:
$ ./application
我经常在几台不同的计算机和几种不同的操作系统上工作,这些操作系统是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) 在我的剧本中我有:
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} \"
仍然无法正常工作.有任何想法吗?
在以下脚本中,我收到一个错误:
语法错误:意外的文件结束
这个错误是什么我可以恢复它?它指向调用函数的行.
#!/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) 我在接受采访时被问到,如何通过提供可运行的C代码来识别平台?
代码必须在两个平台上都可以运行(即没有用于检查的特殊头文件函数)?
我需要运行带有自定义类路径的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方式有更简单的方法吗?
问题如标题所述。
总而言之,我试图让我的 bash 脚本和 Vim 在 VS Code 的集成终端中运行时表现出不同的行为。
我设法找到了其他几个堆栈溢出问题,但它们与操作系统的检测有关:
-如何检查是否在 Cygwin、Mac 或 Linux 中运行?
-如何从 Bash 脚本中检测操作系统?
如何使用bash脚本查找操作系统?我找到了这个答案:从Bash脚本中检测操作系统.目前尚不清楚它是否适用于Mac OS X.
我想在Mac OS X上找到它与不同的Linux操作系统相比.