Câu hỏi 'Nguồn' làm gì?


$ whatis source
source: nothing appropriate.
$ man source
No manual entry for source
$ source
bash: source: filename argument required
source: usage: source filename [arguments]

Nó tồn tại, và nó là runnable. Tại sao không có bất kỳ tài liệu nào về nó trong Ubuntu? Nó làm gì? Làm thế nào tôi có thể cài đặt tài liệu về nó?


489
2017-09-24 10:35


gốc


có liên quan: superuser.com/questions/176783/… - lesmana
bạn quên $ type source  source is a shell built-in - bnjmn
Vỏ của tôi đã trả về cái này $ whatis source  source (1) - bash built-in commands, see bash(1). Cũng thế, man source đưa tôi đến BASH_BUILTINS(1) trang người đàn ông. Đây là trên Fedora btw, không có ý tưởng tại sao những gói debian là un- (hoặc xấu) -documented. - arielnmz
@lesmana, liên kết tuyệt vời. Cái đó câu trả lời được liên kết là câu trả lời kỹ lưỡng hơn cho câu hỏi này. - Scott
Hãy thử "nguồn trợ giúp" - Jasser


Các câu trả lời:


source là một lệnh bash shell được xây dựng sẵn để thực hiện nội dung của tệp được truyền dưới dạng đối số, trong vỏ hiện tại. Nó có một từ đồng nghĩa trong . (giai đoạn).

Cú pháp

. filename [arguments]

source filename [arguments]

398
2017-09-24 10:47



Là source một lệnh bash cụ thể hoặc làm shell khác có nó quá? (Tôi yêu cầu nhận thẻ ngay trên câu hỏi ...) - Jonik
Afaik, source đã có mặt trong vỏ Bourne và do đó có thể xuất hiện trong tất cả các hậu duệ của nó. en.wikipedia.org/wiki/Bourne_shell. Tôi biết rằng không phải tất cả các vỏ đều có source lệnh, ít chắc chắn về vỏ nào chứa nó. - nagul
@nagul, source không có trong vỏ Bourne, nó là một phần mở rộng của GNU mà sau này đã xuất hiện. Cú pháp gốc và vẫn di động (POSIX) là sử dụng lệnh "dấu chấm", tức là . thay thế. Tôi personnaly không bao giờ sử dụng source do thực tế nó dài hơn để nhập và không có giá trị gia tăng. Tôi đoán mục đích chính của nó là làm cho kịch bản dễ đọc hơn đối với người mới. - jlliagre
@jlliagre cá nhân của tôi "giải thích tại sao có nguồn" là source không chỉ mô tả nhiều hơn, nhưng nó trông giống như một cái gì đó khác hơn là một lỗi đánh máy. Tôi đã có người bỏ qua khoảng thời gian / chấm khi tôi gửi lệnh công nghệ trong email. - Rich Homolka
Một cách sử dụng phổ biến cho lệnh này là cho một kịch bản lệnh shell để source trong "tệp cấu hình" chứa hầu hết các bài tập biến. Các bài tập biến sau đó kiểm soát mọi thứ phần còn lại của tập lệnh. Tất nhiên, một tập lệnh tốt sẽ đặt các biến thành các giá trị mặc định hợp lý trước sourcehoặc ít nhất hãy kiểm tra các giá trị hợp lệ. - LawrenceC


Hãy cẩn thận! ./ và source là không giống lắm.

  • ./script chạy tập lệnh dưới dạng tệp thi hành, khởi chạy vỏ mới để chạy nó
  • source script đọc và thực hiện lệnh từ tên tệp trong vỏ hiện tại môi trường

Chú thích: ./script không phải là . script, nhưng . script == source script

https://askubuntu.com/questions/182012/is-there-a-difference-between-and-source-in-bash-after-all?lq=1


227
2017-07-11 13:24



Bạn đang trộn lên ./command và. kịch bản. source-command giống như lệnh. Sử dụng ./meh nói chạy tập lệnh / nhị phân có tên meh trong thư mục hiện tại và không liên quan gì đến nguồn /. -chỉ huy. Như được giải thích trong câu trả lời trong liên kết của bạn. - Joakim Elofsson
@JoakimElofsson Nó được đề cập trong liên kết, nhưng tôi sẽ sửa đổi câu trả lời để tránh missunderstand. Xin vui lòng sửa lại. - damphat
Câu trả lời hay nhất. Cảm ơn! - JedatKinports
Điều quan trọng là câu trả lời được chấp nhận cũng chỉ vào câu trả lời này, bởi vì trong một khoảnh khắc, tôi nghĩ rằng ./ == source == . - Daniel F


Nó rất hữu ích để biết lệnh 'type':

> type source
source is a shell builtin

bất cứ khi nào một cái gì đó là một vỏ được xây dựng, đó là thời gian để làm man bash.


82
2018-01-09 15:45



Luôn biết điều gì đó mới khi đọc man )
Bạn cũng có thể dùng help {builtin-name}, I E. help source. - LawrenceC
help không hoạt động ở mọi nơi (ít nhất là trong zsh). type làm. - kumar_harsh
Để khuếch đại: nếu bạn đang sử dụng bash, và nếu bạn biết (có lẽ thông qua 'type') nó là một lệnh tích hợp, sau đó 'help' sẽ đưa bạn trực tiếp đến đoạn tài liệu mà bạn muốn mà không cần thông qua 4,184 dòng ' người đàn ông bash 'văn bản. - Ron Burk


. (một khoảng thời gian) là một bash shell được xây dựng trong lệnh thực hiện các lệnh từ một tập tin được truyền dưới dạng đối số, trong trình bao hiện tại. 'nguồn' là một từ đồng nghĩa cho '.'.

Từ trang Bash man:

. filename [arguments]
source filename [arguments]
       Read  and  execute  commands  from filename in the current shell
       environment and return the exit status of the last command  exe‐
       cuted from filename.  If filename does not contain a slash, file
       names in PATH are used to find the  directory  containing  file‐
       name.   The  file  searched  for in PATH need not be executable.
       When bash is  not  in  posix  mode,  the  current  directory  is
       searched  if no file is found in PATH.  If the sourcepath option
       to the shopt builtin command is turned  off,  the  PATH  is  not
       searched.   If any arguments are supplied, they become the posi‐
       tional parameters when  filename  is  executed.   Otherwise  the
       positional  parameters  are unchanged.  The return status is the
       status of the last command exited within the  script  (0  if  no
       commands  are  executed),  and false if filename is not found or
       cannot be read.

34
2017-09-24 10:48





'nguồn' là phiên bản dài của '.' chỉ huy. Trên dấu nhắc bash người ta có thể làm:

source ~/.bashrc

để tải lại cài đặt bash (thay đổi?) của bạn cho bash hiện tại đang chạy.

Phiên bản ngắn sẽ là:

. ~/.bashrc

Trang người đàn ông:

. filename [arguments]
source filename [arguments]
    Read and execute commands from filename in the current shell environment and
    return the exit status of the last command executed from filename. If 
    filename does not contain a slash, file names in PATH are used to find the
    directory containing filename. The file searched for in PATH need not be
    executable. When bash is not in posix mode, the current directory is
    searched if no file is found in PATH. If the sourcepath option to the short
    builtin command is turned off, the PATH is not searched. If any arguments
    are supplied, they become the positional parameters when filename is
    executed. Otherwise the positional parameters are unchanged. The return 
    status is the status of the last command exited within the script (0 if no
    commands are executed), and false if filename is not found or cannot be
    read. 

20
2017-09-24 10:46



Đây sẽ là câu trả lời được chấp nhận. - Peter Mortensen


source lệnh thực thi kịch bản được cung cấp (quyền thực thi là không bắt buộc) bên trong hiện hành môi trường vỏ, trong khi ./ thực hiện cung cấp thực thi kịch bản trong một Mới vỏ.

source lệnh có một từ đồng nghĩa . filename.

Để làm cho nó rõ ràng hơn, hãy xem tập lệnh sau, đặt bí danh.

đặt bí danh

#! /bin/bash

alias myproject='cd ~/Documents/Projects/2015/NewProject'

Bây giờ chúng ta có hai lựa chọn để thực thi kịch bản này. Nhưng vơi chỉ có một tùy chọn, bí danh mong muốn cho trình bao hiện tại có thể được tạo trong hai tùy chọn này.

Lựa chọn 1: ./make_alias

Thực thi tập lệnh trước tiên.

chmod +x make_alias

Thi hành

./make_alias

Kiểm chứng

alias

Đầu ra

**nothing**

Rất tiếc! Bí danh đã biến mất với trình bao mới.

Hãy đi với tùy chọn thứ hai.

Lựa chọn 2: source make_alias

Thi hành

source make_alias

hoặc là

. make_alias

Kiểm chứng

alias

Đầu ra

alias myproject='cd ~/Documents/Projects/2015/NewProject'

Yeah Bí danh được đặt.


17
2018-03-27 13:57





Khi nghi ngờ, điều tốt nhất cần làm là sử dụng info chỉ huy:

[root@abc ~]# info source

BASH BUILTIN COMMANDS
       Unless otherwise noted, each builtin command documented in this section
       as accepting options preceded by - accepts -- to signify the end of the
       options.   The  :, true, false, and test builtins do not accept options
       and do not treat -- specially.  The exit, logout, break, continue, let,
       and  shift builtins accept and process arguments beginning with - with-
       out requiring --.  Other builtins that accept  arguments  but  are  not
       specified  as accepting options interpret arguments beginning with - as
       invalid options and require -- to prevent this interpretation.
       : [arguments]
              No effect; the command does nothing beyond  expanding  arguments
              and  performing any specified redirections.  A zero exit code is
              returned.

        .  filename [arguments]
       source filename [arguments]
              Read and execute commands from filename  in  the  current  shell
              environment  and return the exit status of the last command exe-
              cuted from filename.  If filename does not contain a slash, file
              names  in  PATH  are used to find the directory containing file-
              name.  The file searched for in PATH  need  not  be  executable.
              When  bash  is  not  in  posix  mode,  the  current directory is
              searched if no file is found in PATH.  If the sourcepath  option
              to  the  shopt  builtin  command  is turned off, the PATH is not
              searched.  If any arguments are supplied, they become the  posi-
              tional  parameters  when  filename  is  executed.  Otherwise the
              positional parameters are unchanged.  The return status  is  the
              status  of  the  last  command exited within the script (0 if no
              commands are executed), and false if filename is  not  found  or
              cannot be read.

5
2017-11-11 05:44



Bạn có thể cung cấp nhiều hơn chỉ RTFM? - Peter Mortensen


Gõ lệnh "help source" trong shell của bạn.

Bạn sẽ nhận được kết quả như sau:

source: source filename [arguments]

Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

3
2017-09-19 14:14