Yanıtlar:
Şüphe durumunda, kaynak kodunu okuyun. =)
Bash 4.3, shell.c
satır 830, fonksiyondaparse_shell_options()
:
/* A single `-' signals the end of options. From the 4.3 BSD sh.
An option `--' means the same thing; this is the standard
getopt(3) meaning. */
if (arg_string[0] == '-' &&
(arg_string[1] == '\0' ||
(arg_string[1] == '-' && arg_string[2] == '\0')))
return (next_arg);
Başka bir deyişle, başka seçenek olmadığını-
söylüyor . Komut satırında başka kelimeler olsa, kelimesi a ile başlasa bile, dosya adı olarak kabul edilirdi .-
Örneğinizde, elbette, bu -
tamamen gereksizdir, çünkü onu takip eden hiçbir şey yoktur. Başka bir deyişle, bash -
tam olarak eşdeğerdirbash
.
Bash komutlarını alır
bash -
Bash'e komutlarını standart girişten okumasını söyleyen bir yanılgıdır . Örnekte, Bash'in komutlarını stdin'den okuyacağı doğru olsa da ,-
komut satırında bir satır olup olmamasına bakılmaksızın bunu yapardı , çünkü yukarıda belirtildiği gibi bash -
aynıydı bash
.
Bunun -
stdin anlamına gelmediğini göstermek için , şunları göz önünde bulundurun:
cat
Komutu bir yorumlamak için tasarlanmıştır -
stdin'i olarak. Örneğin:
$ echo xxx | cat /etc/hosts - /etc/shells
127.0.0.1 localhost
xxx
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
/usr/bin/screen
/bin/tcsh
/usr/bin/tcsh
/usr/bin/tmux
/bin/ksh93
Bunun tersine, Bash yürütmek alamayan /bin/date
sonra /bin/hostname
bu deneyerek:
$ echo date | bash - hostname
/bin/hostname: /bin/hostname: cannot execute binary file
Aksine, /bin/hostname
bir demet ikili gobbledygook olduğu için başarısız olan bir kabuk betiği dosyası olarak yorumlamaya çalışır .
İkisini de date +%s
kullanarak yürütemezsiniz bash -
.
$ date +%s
1448696965
$ echo date | bash -
Sat Nov 28 07:49:31 UTC 2015
$ echo date | bash - +%s
bash: +%s: No such file or directory
Onun xargs bash
yerine yazabilir misin ? No. curl | xargs bash
, bash'ı komut dosyasının içeriğiyle komut satırı argümanları olarak çağırır. İçeriğin ilk sözcüğü ilk argüman olur ve muhtemelen bir komut dosyası dosya adı olarak yanlış anlaşılır.
An argument of - is equivalent to --.
xargs
istiyosanız, (yeterince küçük bir giriş betiğinin sınırlı senaryosunda) ile çalışırdı | xargs bash -c
; ama gerçekten, bu yararlı ya da deyimsel bir kullanım değildir xargs
.