本文目录导读:

Bash/Shell 脚本
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "脚本所在目录: $DIR"
或者更简洁的写法:
#!/bin/bash SCRIPT_DIR="$(dirname "$(realpath "$0")")" echo "脚本所在目录: $SCRIPT_DIR"
Python 脚本
import os
import sys
# 方法1:使用 __file__
script_dir = os.path.dirname(os.path.abspath(__file__))
print(f"脚本所在目录: {script_dir}")
# 方法2:使用 sys.argv[0]
script_path = os.path.abspath(sys.argv[0])
script_dir = os.path.dirname(script_path)
print(f"脚本所在目录: {script_dir}")
# 方法3:使用 pathlib(Python 3.4+)
from pathlib import Path
script_dir = Path(__file__).parent.absolute()
print(f"脚本所在目录: {script_dir}")
Node.js/JavaScript 脚本
const path = require('path');
// 对于 CommonJS
const scriptDir = __dirname;
console.log(`脚本所在目录: ${scriptDir}`);
// 对于 ES Modules
// import { fileURLToPath } from 'url';
// import { dirname } from 'path';
// const __filename = fileURLToPath(import.meta.url);
// const __dirname = dirname(__filename);
// console.log(`脚本所在目录: ${__dirname}`);
Ruby 脚本
# 方法1:使用 __FILE__
script_dir = File.dirname(File.expand_path(__FILE__))
puts "脚本所在目录: #{script_dir}"
# 方法2:使用 caller
script_dir = File.dirname(caller[0].split(':')[0])
puts "脚本所在目录: #{script_dir}"
Perl 脚本
#!/usr/bin/perl use Cwd 'abs_path'; use File::Basename; my $script_dir = dirname(abs_path($0)); print "脚本所在目录: $script_dir\n";
PowerShell 脚本
# 获取脚本所在目录 $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path Write-Host "脚本所在目录: $ScriptDir" # 或者使用 PSScriptRoot(PowerShell 3.0+) Write-Host "脚本所在目录: $PSScriptRoot"
注意事项
- 软链接/符号链接:如果脚本是通过软链接调用的,上述方法可能返回链接所在目录而非脚本实际目录
- 工作目录:这些方法获取的是脚本文件本身的目录,不是当前工作目录(pwd)
- 相对路径:如果需要处理相对路径,建议先获取脚本目录再拼接
选择哪种方法取决于你的实际需求和使用的脚本语言。