ShellJS – Các lệnh shell Unix cho Node.js
ShellJS là một phiên bản có thể di động (Windows/Linux/macOS) của các lệnh shell Unix trên cơ sở API Node.js. Bạn có thể sử dụng nó để loại bỏ sự phụ thuộc của tập lệnh shell của bạn vào Unix trong khi vẫn giữ nguyên các lệnh quen thuộc và mạnh mẽ của nó. Bạn cũng có thể cài đặt nó toàn cầu để bạn có thể chạy nó từ bên ngoài các dự án Node – nói lời tạm biệt với những tập lệnh Bash khó hiểu!
ShellJS tự hào được thử nghiệm trên mọi phiên bản Node từ v8
trở lên!
Dự án này đã được kiểm tra đơn vị và kiểm tra trên các dự án như:
- Firebug – Trình gỡ lỗi nổi tiếng của Firefox
- JSHint & ESLint – các công cụ linter JavaScript phổ biến
- Zepto – Thư viện JavaScript tương thích với jQuery cho trình duyệt hiện đại
- Yeoman – Ngăn xếp ứng dụng web và công cụ phát triển
- Deployd.com – PaaS mã nguồn mở cho việc tạo nhanh backend API
- Và many more.
Nếu bạn có phản hồi, đề xuất hoặc cần sự trợ giúp, hãy thoải mái đăng bài trong issue tracker của chúng tôi.
Bạn nghĩ rằng ShellJS là phần mềm tốt? Hãy kiểm tra một số dự án liên quan trong Wiki page của chúng tôi!
Nâng cấp từ phiên bản cũ? Hãy kiểm tra trang breaking changes của chúng tôi để xem những thay đổi cần chú ý khi nâng cấp.
Sử dụng dòng lệnh
Nếu bạn chỉ muốn sử dụng các lệnh UNIX đa nền tảng, hãy kiểm tra dự án mới của chúng tôi shelljs/shx, một tiện ích để tiết lộ shelljs
cho dòng lệnh.
Ví dụ:
$ shx mkdir -p foo
$ shx touch foo/bar.txt
$ shx rm -rf foo
API Plugin
ShellJS hiện hỗ trợ các plugin của bên thứ ba! Bạn có thể tìm hiểu thêm về việc sử dụng plugin và viết các lệnh ShellJS riêng của bạn trong the wiki.
Lưu ý nhanh về tài liệu
Để xem tài liệu về tất cả các tính năng mới nhất, hãy kiểm tra README của chúng tôi. Để đọc tài liệu phù hợp với phiên bản mới nhất, hãy kiểm tra the npm page.
Cài đặt
Thông qua npm:
$ npm install [-g] shelljs
Ví dụ
var shell = require('shelljs');
if (!shell.which('git')) {
shell.echo('Sorry, this script requires git');
shell.exit(1);
}
// Copy files to release dir
shell.rm('-rf', 'out/Release');
shell.cp('-R', 'stuff/', 'out/Release');
// Replace macros in each .js file
shell.cd('lib');
shell.ls('*.js').forEach(function (file) {
shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file);
});
shell.cd('..');
// Run external tool synchronously
if (shell.exec('git commit -am "Auto-commit"').code !== 0) {
shell.echo('Error: Git commit failed');
shell.exit(1);
}
Lựa chọn loại trừ
Nếu bạn cần truyền một tham số giống như một tùy chọn, bạn có thể làm như sau:
shell.grep('--', '-v', 'path/to/file'); // Search for "-v", no grep options
shell.cp('-R', '-dir', 'outdir'); // If already using an option, you're done
Toàn cầu so với Cục bộ
Chúng tôi không khuyến nghị sử dụng việc nhập toàn cầu cho ShellJS (tức là require('shelljs/global')
). Mặc dù vẫn được hỗ trợ cho sự tiện lợi, nhưng điều này làm ô nhiễm không gian toàn cầu và nên chỉ được sử dụng cẩn thận.
Thay vào đó, chúng tôi khuyến nghị việc nhập cục bộ (tiêu chuẩn cho gói npm):
var shell = require('shelljs');
shell.echo('hello world');
Hoặc, chúng tôi cũng hỗ trợ nhập như một mô-đun với:
import shell from 'shelljs';
shell.echo('hello world');
Tham khảo lệnh
Tất cả các lệnh chạy đồng bộ, trừ khi có quy định khác. Tất cả các lệnh chấp nhận các ký tự bash glob thông thường (*
, ?
, vv.), tương thích với node glob module.
Đối với các lệnh và tính năng ít phổ biến hơn, vui lòng kiểm tra wiki page của chúng tôi.
cat([tùy chọn,] tệp [, tệp …])
cat([tùy chọn,] mảng_tệp)
Tùy chọn có sẵn:
-n
: đánh số tất cả các dòng đầu ra
Ví dụ:
var str = cat('file*.txt');
var str = cat('file1', 'file2');
var str = cat(['file1', 'file2']); // same as above
Trả về một ShellString chứa tệp được cho, hoặc một chuỗi ghép nối chứa các tệp nếu có nhiều hơn một tệp được cho (một ký tự xuống dòng mới được thêm vào giữa mỗi tệp).
cd([dir])
Chuyển đổi đến thư mục dir
trong suốt kịch bản. Chuyển đến thư mục gốc nếu không có đối số nào được cung cấp. Trả về một ShellString để chỉ ra thành công hoặc thất bại.
chmod([tùy chọn,] octal_mode || octal_string, tệp)
chmod([tùy chọn,] symbolic_mode, tệp)
Tùy chọn có sẵn:
-v
: hiển thị thông tin chẩn đoán cho mỗi tệp được xử lý-c
: tương tự như chế độ verbose, nhưng báo cáo chỉ khi có sự thay đổi-R
: thay đổi tệp và thư mục theo cách đệ quy
Ví dụ:
chmod(755, '/Users/brandon');
chmod('755', '/Users/brandon'); // same as above
chmod('u+x', '/Users/brandon');
chmod('-R', 'a-w', '/Users/brandon');
Thay đổi quyền truy cập của một tệp hoặc thư mục bằng cách chỉ định quyền tuyệt đối theo hệ thập phân hoặc thể hiện sự thay đổi bằng biểu tượng. Lệnh này cố gắng mô phỏng hành vi POSIX càng nhiều càng tốt. Các trường hợp nổi bật:
- Trong chế độ biểu tượng,
a-r
và-r
là giống nhau. Không xem xét đếnumask
. - Không có tùy chọn “quiet,” vì hành vi mặc định là chạy im lặng.
- Hệ điều hành Windows sử dụng mô hình quyền khác biệt so với POSIX.
chmod()
làm tốt nhất có thể trên Windows, nhưng có giới hạn về cách đặt quyền tệp tin. Lưu ý rằng WSL (Windows Subsystem for Linux) tuân theo POSIX, vì vậy tính tương thích đa nền tảng không nên là vấn đề ở đó.
Trả về một ShellString chỉ định thành công hoặc thất bại.
cp([tùy chọn,] nguồn [, nguồn …], đích)
cp([tùy chọn,] mảng nguồn, đích)
Tùy chọn có sẵn:
-f
: bắt buộc (hành vi mặc định)-n
: không ghi đè-u
: chỉ sao chép nếunguồn
mới hơnđích
-r
,-R
: đệ quy-L
: theo dấu liên kết tượng trưng-P
: không theo dấu liên kết tượng trưng-p
: bảo tồn chế độ tệp tin, chủ sở hữu và thời gian
Ví dụ:
cp('file1', 'dir1');
cp('-R', 'path/to/dir/', '~/newCopy/');
cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
Sao chép tệp tin. Trả về một ShellString chỉ định thành công hoặc thất bại.
pushd([tùy chọn,] [thư mục | ‘-N’ | ‘+N’])
Tùy chọn có sẵn:
-n
: Ẩn sự thay đổi thư mục bình thường khi thêm thư mục vào ngăn xếp, chỉ thao tác trên ngăn xếp.-q
: Ẩn đầu ra ra màn hình.
Tham số:
dir
: Đặt thư mục làm thư mục làm việc hiện tại và sau đó thực hiện tương đương củacd dir
.+N
: Đưa thư mục thứ N (đếm từ bên trái của danh sách được in bởi dirs, bắt đầu từ số không) lên đầu danh sách bằng cách xoay ngăn xếp.-N
: Đưa thư mục thứ N (đếm từ bên phải của danh sách được in bởi dirs, bắt đầu từ số không) lên đầu danh sách bằng cách xoay ngăn xếp.
Ví dụ:
// process.cwd() === '/usr'
pushd('/etc'); // Returns /etc /usr
pushd('+1'); // Returns /usr /etc
Lưu thư mục làm việc hiện tại ở đầu ngăn xếp thư mục và sau đó cd
đến dir
. Khi không có đối số, pushd
đổi chỗ hai thư mục đầu tiên. Trả về một mảng các đường dẫn trong ngăn xếp.
popd([tùy chọn,] [‘-N’ | ‘+N’])
Tùy chọn có sẵn:
-n
: Ẩn sự thay đổi thư mục bình thường khi loại bỏ thư mục khỏi ngăn xếp, chỉ thao tác trên ngăn xếp.-q
: Ẩn đầu ra ra màn hình.
Tham số:
+N
: Loại bỏ thư mục thứ N (đếm từ bên trái của danh sách được in bởi dirs), bắt đầu từ số không.-N
: Loại bỏ thư mục thứ N (đếm từ bên phải của danh sách được in bởi dirs), bắt đầu từ số không.
Ví dụ:
echo(process.cwd()); // '/usr'
pushd('/etc'); // '/etc /usr'
echo(process.cwd()); // '/etc'
popd(); // '/usr'
echo(process.cwd()); // '/usr'
Khi không có đối số được cung cấp, popd
loại bỏ thư mục đầu tiên khỏi ngăn xếp và thực hiện cd
đến thư mục mới ở đầu ngăn xếp. Các phần tử được đánh số từ 0, bắt đầu từ thư mục đầu tiên được liệt kê bằng dirs (tức là popd
tương đương với popd +0
). Trả về một mảng các đường dẫn trong ngăn xếp.
dirs([tùy chọn | ‘+N’ | ‘-N’])
Tùy chọn có sẵn:
-c
: Xoá ngăn xếp thư mục bằng cách xóa tất cả các phần tử.-q
: Ẩn đầu ra ra màn hình.
Tham số:
+N
: Hiển thị thư mục thứ N (đếm từ bên trái của danh sách được in bởi dirs khi được gọi mà không có tùy chọn), bắt đầu từ số không.-N
: Hiển thị thư mục thứ N (đếm từ bên phải của danh sách được in bởi dirs khi được gọi mà không có tùy chọn), bắt đầu từ số không.
Hiển thị danh sách các thư mục được ghi nhớ hiện tại. Trả về một mảng các đường dẫn trong ngăn xếp hoặc một đường dẫn duy nhất nếu đã chỉ định +N
hoặc -N
.
Xem thêm: pushd
, popd
echo([tùy chọn,] chuỗi [, chuỗi …])
Tùy chọn có sẵn:
-e
: diễn giải các ký tự thoát ngược (mặc định)-n
: loại bỏ ký tự xuống dòng ở cuối đầu ra
Ví dụ:
echo('hello world');
var str = echo('hello world');
echo('-n', 'no newline at end');
In chuỗi
ra stdout và trả về một ShellString.
exec(lệnh [, tùy chọn] [, gọi lại])
Tùy chọn có sẵn:
async
: Thực thi bất đồng bộ. Nếu có một hàm gọi lại được cung cấp, nó sẽ được đặt thànhtrue
, bất kể giá trị được truyền (mặc định:false
).fatal
: Thoát khi có lỗi (mặc định:false
).silent
: Không hiển thị đầu ra của chương trình ra màn hình (mặc định:false
).encoding
: Mã hóa ký tự để sử dụng. Ảnh hưởng đến các giá trị được trả về cho stdout và stderr, và những gì được ghi vào stdout và stderr khi không ở chế độ im lặng (mặc định:'utf8'
).- và bất kỳ tùy chọn nào có sẵn cho child_process.exec() của Node.js
Ví dụ:
var version = exec('node --version', {silent:true}).stdout;
var child = exec('some_long_running_process', {async:true});
child.stdout.on('data', function(data) {
/* ... do something with data ... */
});
exec('some_long_running_process', function(code, stdout, stderr) {
console.log('Exit code:', code);
console.log('Program output:', stdout);
console.log('Program stderr:', stderr);
});
Thực thi lệnh
được cung cấp đồng bộ , trừ khi có chỉ định khác. Khi ở chế độ đồng bộ, điều này trả về một ShellString. Nếu không, nó sẽ trả về đối tượng tiến trình con, và hàm gọi lại callback
nhận các đối số (code, stdout, stderr)
.
Không thấy hành vi bạn muốn? exec()
mặc định chạy thông qua sh
(hoặc cmd.exe
trên Windows), khác với bash
. Nếu bạn cần hành vi riêng của bash, hãy thử tùy chọn {shell: 'đường/dẫn/tới/bash'}
.
Ghi chú về bảo mật: do shell.exec()
thực thi một chuỗi tùy ý trong hệ thống shell, việc kiểm tra đúng cách dữ liệu nhập từ người dùng để tránh tiêm lệnh (command injection) là quan trọng. Để biết thêm thông tin, hãy tham khảo Security Guidelines.
find(path [, path …])
find(path_array)
Ví dụ:
find('src', 'lib');
find(['src', 'lib']); // same as above
find('.').filter(function(file) { return file.match(/\.js$/); });
Trả về một ShellString (có thuộc tính giống mảng) của tất cả các tệp (bất kể sâu) trong các đường dẫn đã cho.
Sự khác biệt chính so với ls('-R', đường/dẫn)
là tên tệp kết quả bao gồm các thư mục cơ sở (ví dụ: lib/resources/file1
thay vì chỉ file1
).
grep([tùy chọn,] regex_filter, tệp [, tệp …])
grep([tùy chọn,] regex_filter, mảng_tệp)
Tùy chọn có sẵn:
-v
: Đảo ngượcregex_filter
(chỉ in ra các dòng không khớp).-l
: Chỉ in ra tên tệp của các tệp khớp.-i
: Bỏ qua kiểu chữ.-n
: In ra số dòng.
Ví dụ:
grep('-v', 'GLOBAL_VARIABLE', '*.js');
grep('GLOBAL_VARIABLE', '*.js');
Đọc chuỗi đầu vào từ các tệp đã cho và trả về một ShellString chứa tất cả các dòng của tệp khớp với regex_filter
đã cho.
head([{‘-n’: },] tệp [, tệp …])
head([{‘-n’: },] mảng_tệp)
Tùy chọn có sẵn:
-n <số>
: Hiển thị<số>
dòng đầu tiên của các tệp
Ví dụ:
var str = head({'-n': 1}, 'file*.txt');
var str = head('file1', 'file2');
var str = head(['file1', 'file2']); // same as above
Đọc phần đầu của một tệp
. Trả về một ShellString.
ln([tùy chọn,] nguồn, đích)
Tùy chọn có sẵn:
-s
: symlink-f
: force
Ví dụ:
ln('file', 'newlink');
ln('-sf', 'file', 'existing');
Liên kết nguồn
tới đích
. Sử dụng -f
để bắt buộc liên kết, nếu đích
đã tồn tại. Trả về một ShellString chỉ định thành công hoặc thất bại.
ls([tùy chọn,] [đường/dẫn, …])
ls([tùy chọn,] mảng_đường/dẫn)
Tùy chọn có sẵn:
-R
: đệ quy-A
: tất cả các tệp (bao gồm tệp bắt đầu bằng.
, ngoại trừ.
và..
)-L
: theo dấu liên kết tượng trưng (symlinks)-d
: liệt kê chính các thư mục, không phải nội dung của chúng-l
: cung cấp thông tin chi tiết hơn cho mỗi tệp. Cụ thể, mỗi tệp được biểu diễn bằng một đối tượng có cấu trúc với các trường riêng biệt cho siêu dữ liệu tệp (xem fs.Stats). Giá trị trả về cũng ghi đè.toString()
để giống định dạng xuất củals -l
để dễ đọc cho con người, nhưng việc sử dụng chương trình nên dựa trên định dạng đối tượng ổn định hơn là biểu diễn của.toString()
.
Ví dụ:
ls('projs/*.js');
ls('projs/**/*.js'); // Find all js files recursively in projs
ls('-R', '/users/me', '/tmp');
ls('-R', ['/users/me', '/tmp']); // same as above
ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...}
Trả về một ShellString (có thuộc tính giống mảng) của tất cả các tệp trong đường dẫn đã cho
, hoặc các tệp trong thư mục hiện tại nếu không có đường/dẫn
nào được cung cấp.
mkdir([tùy chọn,] thư_mục [, thư_mục …])
mkdir([tùy chọn,] mảng_thư_mục)
Tùy chọn có sẵn:
-p
: đường dẫn đầy đủ (và tạo các thư mục trung gian, nếu cần)
Ví dụ:
mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
Tạo thư mục. Trả về một ShellString chỉ định thành công hoặc thất bại.
mv([tùy chọn ,] nguồn [, nguồn …], đích’)
mv([tùy chọn ,] mảng_nguồn, đích’)
Tùy chọn có sẵn:
-f
: bắt buộc (hành vi mặc định)-n
: không ghi đè lên
Ví dụ:
mv('-n', 'file', 'dir/');
mv('file1', 'file2', 'dir/');
mv(['file1', 'file2'], 'dir/'); // same as above
Di chuyển tệp nguồn
tới đích
. Trả về một ShellString chỉ định thành công hoặc thất bại.
pwd()
Trả về thư mục hiện tại dưới dạng một ShellString.
rm([tùy chọn,] tệp [, tệp …])
rm([tùy chọn,] mảng_tệp)
Tùy chọn có sẵn:
-f
: bắt buộc-r, -R
: đệ quy
Ví dụ:
rm('-rf', '/tmp/*');
rm('some_file.txt', 'another_file.txt');
rm(['some_file.txt', 'another_file.txt']); // same as above
Xóa các tệp tin. Trả về một ShellString cho biết thành công hoặc thất bại.
sed([tùy chọn,] search_regex, thay_thế, tệp [, tệp …])
sed([tùy chọn,] search_regex, thay_thế, mảng_tệp)
Tùy chọn có sẵn:
-i
: Thay thế nội dung củatệp
tại chỗ. Lưu ý rằng không có bản sao lưu được tạo ra!
Ví dụ:
sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
Đọc một chuỗi đầu vào từ các tệp
, từng dòng, và thực hiện replace()
JavaScript trên mỗi dòng từ chuỗi đầu vào bằng search_regex
và chuỗi hoặc hàm replacement
đã cho. Trả về ShellString mới sau khi thay thế.
Chú ý:
Giống như sed
unix, ShellJS sed
hỗ trợ nhóm capture. Nhóm capture được chỉ định bằng cú pháp $n
:
sed(/(\w+)\s(\w+)/, '$2, $1', 'file.txt');
Ngoài ra, giống như sed
unix, ShellJS sed
thực hiện thay thế trên mỗi dòng từ tệp đầu vào (chia thành ‘\n’) một cách riêng lẻ, vì vậy search_regex
mà trải rộng qua nhiều dòng (hoặc bao gồm ‘\n’) sẽ không khớp với bất kỳ thứ gì và không có gì được thay thế.
set(tùy chọn)
Tùy chọn có sẵn:
+/-e
: thoát khi gặp lỗi (config.fatal
)+/-v
: verbose: hiển thị tất cả các lệnh (config.verbose
)+/-f
: tắt mở rộng tên tệp (globbing)
Ví dụ:
set('-e'); // exit upon first error
set('+e'); // this undoes a "set('-e')"
Đặt biến cấu hình toàn cục.
sort([tùy chọn,] tệp [, tệp …])
sort([tùy chọn,] mảng_tệp)
Tùy chọn có sẵn:
-r
: Đảo ngược kết quả-n
: So sánh theo giá trị số
Ví dụ:
sort('foo.txt', 'bar.txt');
sort('-r', 'foo.txt');
Trả về nội dung của các tệp
, được sắp xếp từng dòng như một ShellString. Sắp xếp nhiều tệp sẽ kết hợp nội dung của chúng (giống như unix sort
).
tail([{‘-n’: },] tệp [, tệp …])
tail([{‘-n’: },] mảng_tệp)
Tùy chọn có sẵn:
-n <số>
: Hiển thị<số>
dòng cuối cùng của cáctệp
Ví dụ:
var str = tail({'-n': 1}, 'file*.txt');
var str = tail('file1', 'file2');
var str = tail(['file1', 'file2']); // same as above
Đọc cuối của một tệp
. Trả về một ShellString.
tempdir()
Ví dụ:
var tmp = tempdir(); // "/tmp" for most *nix platforms
Tìm kiếm và trả về chuỗi chứa thư mục tạm thời có thể ghi, phụ thuộc vào nền tảng. Theo sau Python’s tempfile algorithm.
test(expression)
Các biểu thức cơ bản có sẵn:
'-b', 'đường_dẫn'
: đúng nếu đường dẫn là thiết bị khối'-c', 'đường_dẫn'
: đúng nếu đường dẫn là thiết bị ký tự'-d', 'đường_dẫn'
: đúng nếu đường dẫn là thư mục'-e', 'đường_dẫn'
: đúng nếu đường dẫn tồn tại'-f', 'đường_dẫn'
: đúng nếu đường dẫn là tệp thường'-L', 'đường_dẫn'
: đúng nếu đường dẫn là liên kết tượng trưng'-p', 'đường_dẫn'
: đúng nếu đường dẫn là ống (FIFO)'-S', 'đường_dẫn'
: đúng nếu đường dẫn là socket
Ví dụ:
if (test('-d', path)) { /* do something with dir */ };
if (!test('-f', path)) continue; // skip if it's not a regular file
Đánh giá biểu_thức
bằng cách sử dụng các biểu_thức cơ bản có sẵn và trả về giá trị boolean tương ứng.
ShellString.prototype.to(tệp)
Ví dụ:
cat('input.txt').to('output.txt');
Tương tự như toán tử định hướng >
trong Unix, nhưng hoạt động với ShellStrings
(như những cái được trả về bởi cat
, grep
, v.v.). Giống như định hướng Unix,_to()_
sẽ ghi đè lên bất kỳ tệp nào đã tồn tại! Trả về cùng một ShellString mà nó đã thực hiện, để hỗ trợ chuỗi.
ShellString.prototype.toEnd(tệp)
Ví dụ:
cat('input.txt').toEnd('output.txt');
Tương tự như toán tử định hướng và thêm >>
trong Unix, nhưng hoạt động với ShellStrings
(như những cái được trả về bởi cat
, grep
, v.v.). Trả về cùng một ShellString mà nó đã thực hiện, để hỗ trợ chuỗi.
touch([tùy chọn,] tệp [, tệp …])
touch([tùy chọn,] mảng_tệp)
Tùy chọn có sẵn:
-a
: Thay đổi chỉ thời gian truy cập-c
: Không tạo bất kỳ tệp nào-m
: Thay đổi chỉ thời gian sửa đổi{'-d': someDate}
,{date: someDate}
: Sử dụng một thể hiệnDate
(ví dụ:someDate
) thay vì thời gian hiện tại{'-r': tệp}
,{reference: tệp}
: Sử dụng thời gian củatệp
thay vì thời gian hiện tại
Ví dụ:
touch('source.js');
touch('-c', 'path/to/file.js');
touch({ '-r': 'referenceFile.txt' }, 'path/to/file.js');
touch({ '-d': new Date('December 17, 1995 03:24:00'), '-m': true }, 'path/to/file.js');
touch({ date: new Date('December 17, 1995 03:24:00') }, 'path/to/file.js');
Cập nhật thời gian truy cập và thời gian sửa đổi của mỗi tệp đến thời gian hiện tại. Đối số tệp mà không tồn tại sẽ được tạo ra trống, trừ khi có -c
. Đây là một phiên bản triển khai một phần của touch(1). Trả về một ShellString cho biết thành công hoặc thất bại.
uniq([tùy chọn,] [đầu_vào, [đầu_ra]])
Tùy chọn có sẵn:
-i
: Bỏ qua phân biệt chữ hoa/thường khi so sánh-c
: Tiền tố các dòng bằng số lượng xuất hiện-d
: Chỉ in các dòng trùng lặp, một cho mỗi nhóm các dòng giống nhau
Ví dụ:
uniq('foo.txt');
uniq('-i', 'foo.txt');
uniq('-cd', 'foo.txt', 'bar.txt');
Lọc các dòng trùng lặp liền kề từ đầu_vào
. Trả về một ShellString.
which(lệnh)
Ví dụ:
var nodeExec = which('node');
Tìm kiếm lệnh
trong PATH
của hệ thống. Trên Windows, điều này sử dụng biến PATHEXT
để thêm phần mở rộng nếu nó chưa thực thi. Trả về một ShellString chứa đường dẫn tuyệt đối đến lệnh
.
exit(mã)
Thoát khỏi tiến trình hiện tại với mã thoát mã
đã cho.
error()
Kiểm tra xem có lỗi xảy ra trong lệnh cuối cùng hay không. Trả về một giá trị đúng nếu có lỗi xảy ra hoặc giá trị sai nếu không có lỗi.
Lưu ý: Đừng dựa vào giá trị trả về là một thông báo lỗi. Nếu bạn cần thông báo lỗi cuối cùng, hãy sử dụng thuộc tính .stderr
từ giá trị trả về của lệnh cuối cùng thay vào đó.
errorCode()
Trả về mã lỗi từ lệnh cuối cùng.
ShellString(str)
Ví dụ:
var foo = new ShellString('hello world');
Đây là một loại dữ liệu đặc biệt được trả về bởi hầu hết các phương thức ShellJS, nó bao bọc một giá trị chuỗi (hoặc mảng). Đối tượng này có tất cả các phương thức của chuỗi (hoặc mảng), nhưng cũng có các phương thức mở rộng: .to()
, .toEnd()
, và tất cả các phương thức có thể được kết nối với ống (ví dụ: .cat()
, .grep()
, v.v.). Điều này có thể dễ dàng chuyển đổi thành một chuỗi bằng cách gọi .toString()
.
Loại này cũng tiết lộ đầu ra stdout, stderr và mã trạng thái trả về của lệnh tương ứng thông qua các thuộc tính .stdout
(chuỗi), .stderr
(chuỗi), và .code
(số) tương ứng.
env[‘VAR_NAME’]
Đối tượng chứa các biến môi trường (cả lấy và đặt giá trị). Lối tắt đến process.env
.
Ống (Pipes)
Ví dụ:
grep('foo', 'file1.txt', 'file2.txt').sed(/o/g, 'a').to('output.txt');
echo('files with o\'s in the name:\n' + ls().grep('o'));
cat('test.js').exec('node'); // pipe to exec() call
Các lệnh có thể gửi đầu ra của họ đến một lệnh khác theo kiểu ống. sed
, grep
, cat
, exec
, to
, và toEnd
có thể xuất hiện ở phía bên phải của ống. Các ống có thể được chuỗi kết nối.
Cấu hình
config.silent
Ví dụ:
var sh = require('shelljs');
var silentState = sh.config.silent; // save old silent state
sh.config.silent = true;
/* ... */
sh.config.silent = silentState; // restore old silent state
Làm im lặng tất cả đầu ra của lệnh nếu true
, ngoại trừ cho cuộc gọi echo()
. Giá trị mặc định là false
.
config.fatal
Ví dụ:
require('shelljs/global');
config.fatal = true; // or set('-e');
cp('this_file_does_not_exist', '/dev/null'); // throws Error here
/* more commands... */
Nếu true
, kịch bản sẽ ném một lỗi Javascript khi bất kỳ lệnh shell.js nào gặp lỗi. Giá trị mặc định là false
. Điều này tương tự như set -e
trong Bash.
config.verbose
Ví dụ:
config.verbose = true; // or set('-v');
cd('dir/');
rm('-rf', 'foo.txt', 'bar.txt');
exec('echo hello');
Sẽ in ra mỗi lệnh như sau:
cd dir/
rm -rf foo.txt bar.txt
exec echo hello
config.globOptions
Ví dụ:
config.globOptions = {nodir: true};
Sử dụng giá trị này cho cuộc gọi đến glob.sync()
thay vì các tùy chọn mặc định.
config.reset()
Ví dụ:
var shell = require('shelljs');
// Make changes to shell.config, and do stuff...
/* ... */
shell.config.reset(); // reset to original state
// Do more stuff, but with original settings
/* ... */
Đặt lại shell.config
về các giá trị mặc định:
{
fatal: false,
globOptions: {},
maxdepth: 255,
noglob: false,
silent: false,
verbose: false,
}
Thông tin Tải về:
Tác giả: shelljs
Mã nguồn: https://github.com/shelljs/shelljs
Giấy phép: BSD-3-Clause license