奇妙なbashスクリプトの動作

奇妙なbashスクリプトの動作

私はバイナリが同じで同じ権限を持ち、私のドライブで一意であり、sudoersまだ1つはrootのuidテストに合格し、もう1つはパスしない2つのbashスクリプトを持っています。./bin フォルダーの最初の項目を呼び出すと、2 番目の項目のように動作します。

スクリプト(同期化 - サミュエル):

#!/usr/bin/env bash

echo "[$0]"
whoami

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root"
    exit 1
fi

id -u
exit

出力:

samuel@xeon:~$ sync-samuel
[sudo] password for samuel: 
[/home/samuel/bin/sync-samuel]
root
0
samuel@xeon:~$ sync-samuel2
[/home/samuel/bin/sync-samuel2]
samuel
This script must be run as root
samuel@xeon:~$ cd bin
samuel@xeon:~/bin$ ./sync-samuel
[./sync-samuel]
samuel
This script must be run as root

権限:

-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:36 sync-samuel
-rwxr-xr-x 1 samuel samuel  435 Feb  1 22:37 sync-samuel2

文書:

samuel@xeon:~/bin$ file sync-samuel
sync-samuel: a /usr/bin/env bash script, ASCII text executable
samuel@xeon:~/bin$ file sync-samuel2
sync-samuel2: a /usr/bin/env bash script, ASCII text executable

この動作を引き起こす要因が何であるか、またはこれら2つのファイルの拡張属性を表示する方法を知っている人はいますか?私はbash 4.3.11(1)リリースでLubuntu 14.04 LTSを使用しています。

編集者:G-Manは男です!最初のものもエイリアスです。

samuel@xeon:~/bin$ type sync-samuel2
sync-samuel2 is hashed (/home/samuel/bin/sync-samuel2)
samuel@xeon:~/bin$ type sync-samuel
sync-samuel is aliased to `sudo /home/samuel/bin/sync-samuel'

ベストアンサー1

実行中でなく、スクリプト自体が呼び出されていない場合でも、プロンプトが表示されるように出力されsync-samuelます。これは意味がありません。入力すると、質問に表示されているスクリプト以外のものを実行しているようです。sudosudosudosync-samuelsync-samuel

これはsync-samuel実際にはエイリアスまたはsudo sync-samuelそれに似ている可能性があります。もう1つの可能性は、sync-samuel 別のディレクトリに別のコピーがあり、シェルが見ているコピーの代わりにそれを見つけて実行することです。この問題を診断するには、次のコマンドを実行します。

type sync-samuel sync-samuel2

typeシェルが各コマンドを解釈する方法を示す組み込みコマンドです。 2つのファイルに対してかなり異なる応答がある場合(別名でsync-samuelはなくsync-samuel2)、同じ処理を受け取るように進める方法(sync-samuel2別名も定義)がわかります。

おすすめ記事