相关疑难解决方法(0)

在Bash脚本中获取当前目录名称(没有完整路径)

如何在bash脚本中获取当前工作目录名称,甚至更好,只需一个终端命令.

pwd给出了当前工作目录的完整路径,例如/opt/local/bin但我只想要bin

bash shell

765
推荐指数
15
解决办法
64万
查看次数

Bash脚本获取自身完整路径的可靠方法

我有一个Bash脚本需要知道它的完整路径.我试图找到一种广泛兼容的方式来做到这一点,而不会结束相对或时髦的路径.我只需要支持Bash,而不是sh,csh等.

到目前为止我发现了什么:

  1. 地址中获取Bash脚本的源目录的接受答案是获取脚本的路径dirname $0,这很好,但可能会返回相对路径(如.),如果要更改目录中的目录,这是一个问题脚本并使路径仍指向脚本的目录.不过,dirname将成为这个难题的一部分.

  2. OS X的Bash脚本绝对路径 的接受答案(特定于OS X,但答案无论如何)都会给出一个函数,该函数将测试是否$0看起来相对,如果是,则会预先挂起$PWD.但是结果仍然可以包含相对位(虽然总体来说它是绝对的) - 例如,如果脚本t在目录中/usr/bin并且你进入/usr并且你输入bin/../bin/t它来运行它(是的,那是复杂的),你最终会得到/usr/bin/../binas脚本的目录路径.哪个有效,但......

  3. 此页面上readlink解决方案如下所示:

    # Absolute path to this script. /home/user/bin/foo.sh
    SCRIPT=$(readlink -f $0)
    # Absolute path this script is in. /home/user/bin
    SCRIPTPATH=`dirname $SCRIPT`
    
    Run Code Online (Sandbox Code Playgroud)

    但是readlink不是POSIX,显然解决方案依赖于GNU readlink,其中BSD由于某种原因无法工作(我无法访问类似BSD的系统进行检查).

所以,各种方式,但他们都有他们的警告.

什么是更好的方式?"更好"的意思是:

  • 给了我绝对的道路.
  • 即使以复杂的方式调用,也可以获得时髦的位(参见上面#2的评论).(例如,至少要对路径进行适度规范化.)
  • 仅依赖于Bash-isms或几乎肯定会出现在最流行的*nix系统(GNU/Linux,BSD和类似BSD的系统,如OS X等)上的东西.
  • 如果可能,避免调用外部程序(例如,更喜欢Bash内置程序). …

bash path

653
推荐指数
12
解决办法
42万
查看次数

我如何知道Bash脚本中的脚本文件名?

如何在脚本本身中确定Bash脚本文件的名称?

就像我的脚本在文件中一样runme.sh,那么我怎么能让它显示"你正在运行runme.sh"的消息而没有硬编码?

linux bash shell scripting

567
推荐指数
15
解决办法
41万
查看次数

双方括号[[]]比Bash中的单方括号[]更好吗?

最近在一次代码审查中,一位同事声称该[[ ]]构造比[ ]在类似的构造中更受欢迎

if [ "`id -nu`" = "$someuser" ] ; then 
     echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)

他无法提供理由.有吗?

syntax bash if-statement

514
推荐指数
8
解决办法
20万
查看次数

如何将当前工作目录设置为脚本目录?

我正在写一个bash脚本.我需要当前的工作目录始终是脚本所在的目录.

默认行为是脚本中的当前工作目录是我运行它的shell的目录,但我不想要这种行为.

bash scripting path

500
推荐指数
7
解决办法
35万
查看次数

如何获取当前正在执行的文件的路径和名称?

我有脚本调用其他脚本文件,但我需要获取当前在该进程中运行的文件的文件路径.

例如,假设我有三个文件.使用execfile:

  • script_1.py电话script_2.py.
  • 反过来,script_2.py打电话script_3.py.

我怎样才能获得的文件名和路径script_3.py,从内部代码script_3.py,而无需从传递这些信息作为参数script_2.py

(执行os.getcwd()返回原始起始脚本的文件路径而不是当前文件的.)

python scripting file

462
推荐指数
16
解决办法
51万
查看次数

Unix shell脚本找出脚本文件所在的目录?

基本上我需要使用与shell脚本文件位置相关的路径运行脚本,如何将当前目录更改为脚本文件所在的目录?

unix shell

459
推荐指数
14
解决办法
50万
查看次数

如何在Mac上获取GNU的readlink -f的行为?

在Linux上,该readlink实用程序接受一个-f跟随其他链接的选项.这似乎不适用于Mac和可能基于BSD的系统.相当于什么?

这是一些调试信息:

$ which readlink; readlink -f
/usr/bin/readlink
readlink: illegal option -f
usage: readlink [-n] [file ...]
Run Code Online (Sandbox Code Playgroud)

macos freebsd sh

341
推荐指数
13
解决办法
11万
查看次数

如何最好地包含其他脚本?

通常包含脚本的方式是"源"

例如:

main.sh:

#!/bin/bash

source incl.sh

echo "The main script"
Run Code Online (Sandbox Code Playgroud)

incl.sh:

echo "The included script"
Run Code Online (Sandbox Code Playgroud)

执行"./main.sh"的输出是:

The included script
The main script
Run Code Online (Sandbox Code Playgroud)

...现在,如果您尝试从其他位置执行该shell脚本,除非它在您的路径中,否则无法找到包含.

确保脚本可以找到包含脚本的好方法是什么,特别是如果脚本需要可移植的话?

bash

338
推荐指数
11
解决办法
31万
查看次数

如何检查是否在Cygwin,Mac或Linux中运行?

我有一个shell脚本,可以在Windows/Cygwin,Mac和Linux上使用.每个版本需要稍微不同的变量.

shell/bash脚本如何检测它是在Cygwin,Mac或Linux上运行?

bash shell cygwin cross-platform

297
推荐指数
7
解决办法
13万
查看次数

标签 统计

bash ×7

shell ×4

scripting ×3

path ×2

cross-platform ×1

cygwin ×1

file ×1

freebsd ×1

if-statement ×1

linux ×1

macos ×1

python ×1

sh ×1

syntax ×1

unix ×1