当前位置: 技术问答>linux和unix
路径问题
来源: 互联网 发布时间:2015-12-02
本文导语: 脚本如何取得本身的全路径 | 内嵌 shell命令pwd,例如: 在编译的时间应该使用Makefile文件: ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELDIR ?=/lib/modules/$(shell uname -...
脚本如何取得本身的全路径
|
内嵌 shell命令pwd,例如:
在编译的时间应该使用Makefile文件:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
其中的 PWD := $(shell pwd)
当然也得看你的脚本种类,这里只是给你一个提示
在编译的时间应该使用Makefile文件:
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
其中的 PWD := $(shell pwd)
当然也得看你的脚本种类,这里只是给你一个提示
|
绝对路径好办,
echo $(dirname $(cat /proc/$$/cmdline))
就可以了, 但是相对路径会带入shell本身, 这个不好办
echo $(dirname $(cat /proc/$$/cmdline))
就可以了, 但是相对路径会带入shell本身, 这个不好办
|
忘了加上bang头
#!/bin/sh
shell=/bin/sh
cmd=
cmdline=$(cat /proc/$$/cmdline)
pwd_cmdline=${cmdline#*$shell}
if [ $(echo $pwd_cmdline|cut -c 0-1) != '/' ]; then
cwd=$(dirname $PWD"/"$pwd_cmdline)
else
cwd=$(dirname $pwd_cmdline)
fi
echo $cwd
#!/bin/sh
shell=/bin/sh
cmd=
cmdline=$(cat /proc/$$/cmdline)
pwd_cmdline=${cmdline#*$shell}
if [ $(echo $pwd_cmdline|cut -c 0-1) != '/' ]; then
cwd=$(dirname $PWD"/"$pwd_cmdline)
else
cwd=$(dirname $pwd_cmdline)
fi
echo $cwd
|
又改了改
口胡,终于改好了。
不过方法很dirty, 需要一个声明一个变量表示当前shell
shell=/bin/sh
cmd=
cmdline=$(cat /proc/$$/cmdline)
pwd_cmdline=${cmdline#*$shell}
if [ $(echo $pwd_cmdline|cut -c 0-1) != '/' ]; then
cwd=$(dirname $PWD"/"$pwd_cmdline)
else
cwd=$(dirname $pwd_cmdline)
fi
echo $cwd
如果你要改为#/bin/bash的话, 那么shell变量也要改为/bin/bash
口胡,终于改好了。
不过方法很dirty, 需要一个声明一个变量表示当前shell
shell=/bin/sh
cmd=
cmdline=$(cat /proc/$$/cmdline)
pwd_cmdline=${cmdline#*$shell}
if [ $(echo $pwd_cmdline|cut -c 0-1) != '/' ]; then
cwd=$(dirname $PWD"/"$pwd_cmdline)
else
cwd=$(dirname $pwd_cmdline)
fi
echo $cwd
如果你要改为#/bin/bash的话, 那么shell变量也要改为/bin/bash
|
哎, 是你复制的时候丢掉最后的换行符, 在最后加上回车就行了
下面是个修正版
#!/bin/bash
shell=/bin/bash
cmdline=$(cat /proc/$$/cmdline)
pwd_cmdline=${cmdline#*$shell}
if [ $(echo $pwd_cmdline|cut -c 0-1) != '/' ]; then
cwd=$(dirname $PWD"/"$pwd_cmdline)"/"
else
cwd=$(dirname $pwd_cmdline)"/"
fi
echo $cwd
下面是个修正版
#!/bin/bash
shell=/bin/bash
cmdline=$(cat /proc/$$/cmdline)
pwd_cmdline=${cmdline#*$shell}
if [ $(echo $pwd_cmdline|cut -c 0-1) != '/' ]; then
cwd=$(dirname $PWD"/"$pwd_cmdline)"/"
else
cwd=$(dirname $pwd_cmdline)"/"
fi
echo $cwd