タグ付けされた質問 「scripting」

スクリプトは、スタンドアロンの実行可能プログラムにコンパイルされるのではなく、インタープリタープログラムによって実行される一連のコマンドまたは命令です。

2
awk '!a [$ 0] ++'はどのように機能しますか?
このワンライナーは、事前ソートなしでテキスト入力から重複行を削除します。 例えば: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ インターネットで見つけた元のコードは次のとおりです。 awk '!_[$0]++' _Perlのようにawkで特別な意味を持つようになったので、これはさらに困惑しましたが、それは単なる配列の名前であることが判明しました。 これで、ワンライナーの背後にあるロジックがわかりました。 各入力行はハッシュ配列のキーとして使用されるため、完了すると、ハッシュには到着順に一意の行が含まれます。 私が学びたいのは、この表記がawkによってどのように解釈されるかです。たとえば、バング記号(!)の意味とこのコードスニペットの他の要素。 どのように機能しますか?

15
* nixのオブジェクト指向シェル
序文:私はbashが大好きで、いかなる種類の議論や聖戦を始めるつもりもありません。これは非常に素朴な質問ではありません。 この質問はスーパーユーザーに関するこの投稿に多少関係していますが、OPが彼が何を求めているのかを本当に知っているとは思いません。FreeBSD、Linux、OS X、およびWindowsのcygwinでbashを使用しています。また、最近、Windows上のPowerShellで広範な経験を積んでいます。 bashと互換性があるが、ミックスにオブジェクト指向のスクリプトのレイヤーを追加する、* nix用のシェルが既に利用可能または作業中です。私が知っている唯一のものは近くにあるPythonコンソールですが、私が知る限り、それは標準シェル環境へのアクセスを提供していません。例えば、私がいないだけでできcd ~とls、その後chmod +x fileのpythonコンソールの内部。これらのタスクを実行するには、標準のUNIXバイナリではなくpythonを使用するか、pythonコードを使用してバイナリを呼び出す必要があります。 そのようなシェルは存在しますか?

9
2つの数値の最小/最大を与えるUNIXコマンドはありますか?
から読み込む数値を制限するコマンドを探していましたstdin。 私はその目的のために小さなスクリプトを書きました(批評は歓迎します)が、この標準的なコマンド、単純な(と思う)一般的なユースケースがないのではないかと思いました。 最小 2つの数字を見つけるスクリプト: #!/bin/bash # $1 limit [ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; } read number if [ "$number" -gt "$1" ]; then echo "$1" else echo "$number" fi

4
1番目の引数を除く$ @
この方法で実行されるシェルスクリプトを作成する必要があります。 ./myscript arg1 arg2_1 arg2_2 arg2_3 ....... arg2_# スクリプト内にforループがあります for i in $@ ただし、私が知っているように、$ @には$ 1から$($#-1)までが含まれます。しかし、私のプログラムでは、$ 1は$ 2 $ 3 $ 4などとは明らかに異なります。$ 2から最後までループしたいのですが... ありがとうございました:)
36 bash  shell  scripting 

2
条件付き構造のセミコロン
なぜセミコロンを1つに配置し、別のセミコロンを配置しないのですか? 結果は同じです コード1 if [ "a" == "a" ] then echo "true" fi コード2 if [ "a" == "a" ]; then echo "true"; fi 2番目のコードのセミコロンは不要ですか? セミコロンを配置する必要がある場合
35 bash  scripting 


12
cronでnotify-sendを使用する
KDE / Awesome WMでArch Linuxを使用しています。notify-send一緒に仕事をしようとし ていcronます。 DISPLAY/ XAUTHORITY変数を設定notify-sendし、「sudo -u」で実行しようとしましたが、すべて結果はありませんでした。 セッションからnotify-sendをインタラクティブに呼び出して通知を受け取ることができます。 FWIW、cronジョブは正常に実行されていますが、一時ファイルに内容をエコーし​​て確認しました。動作に失敗するのは「通知送信」だけです。 コード: [matrix@morpheus ~]$ crontab -l * * * * * /home/matrix/scripts/notify.sh [matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority echo "testing cron" >/tmp/crontest sudo -u matrix /usr/bin/notify-send "hello" echo "now tested notify-send" >>/tmp/crontest [matrix@morpheus ~]$ cat /tmp/crontest testing …

7
シバングの複数の引数
shebang行(#!)を介して実行可能ファイルに複数のオプションを渡す一般的な方法があるかどうか疑問に思っています。 私はNixOSを使用していますが、私が書くスクリプトの最初の部分は通常/usr/bin/envです。私が遭遇する問題は、その後に来るすべてがシステムによって単一のファイルまたはディレクトリとして解釈されることです。 たとえば、bashposixモードで実行されるスクリプトを書きたいとします。シバンを書く簡単な方法は次のとおりです。 #!/usr/bin/env bash --posix ただし、結果のスクリプトを実行しようとすると、次のエラーが生成されます。 /usr/bin/env: ‘bash --posix’: No such file or directory 私はこの投稿を知っていますが、より一般的でクリーンなソリューションがあるかどうか疑問に思っていました。 編集:Guileスクリプトには、マニュアルのセクション4.3.4に記載されている、目的を達成する方法があることを知っています。 #!/usr/bin/env sh exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@" !# ここでのトリックは、2番目の行(で始まるexec)がコードとして解釈されますshが、#!... !#ブロック内にあるため、コメントとして解釈されるため、Guileインタープリターによって無視されることです。 このメソッドをインタープリターに一般化することはできませんか? 2番目の編集:少し遊んだ後、から入力を読み取ることができるインタープリターのstdin場合、次のメソッドが機能するようです: #!/usr/bin/env sh sed '1,2d' "$0" | bash --verbose --posix /dev/stdin; exit; ただし、sh通訳が仕事を終えるまでプロセスは存続するため、おそらく最適ではありません。フィードバックや提案をいただければ幸いです。

1
debconfプロンプトなしでapt-getインストール
aptを使用してchefを非対話形式でインストールしたいのですが、デフォルトでは、aptをインストールすると次のプロンプトが表示されます。 インストール中にこの手順をスキップする方法や、aptインストールに値を渡す方法はありますか?私はchef-soloのみを使用しているため、実際にはサーバーコンポーネントは必要ないため、このプロンプトでReturnキーを押してください。
31 scripting  apt  debconf 

7
bashスクリプトを記述するとき、&&と同等のものは何ですか?
これが重複する質問である場合は、事前に謝罪します。ここで質問する前に、検索/確認する努力をしました。 私はこのようなワンライナーを書くのに慣れています: foocommand && foocommand2 && foocommand3 前のコマンドが「成功」した場合にのみ、後続のコマンドを実行したいという考えです。 私はやや長いスクリプトを書いていますが、このワンライナーは、誰にとっても混乱を招くコードの巨大なブロックのように見えるため、実行不可能です。 スクリプト内でコマンドの間隔を空け、それらの間にコメントを書きたいと思います。どうすればこれを行うことができますが、&&と同等のものがそこにありますか?
31 bash  centos  scripting 

4
Bashシェルスクリプトの出力の配置
私のスクリプト: date echo -e "${YELLOW}Network check${NC}\n\n" while read hostname do ping -c 1 "$hostname" > /dev/null 2>&1 && echo -e "Network $hostname : ${GREEN}Online${NC}" || echo -e "${GRAY}Network $hostname${NC} : ${RED}Offline${NC}" done < list.txt sleep 30 clear done 次のような情報を出力しています: Network 10.x.xx.xxx : Online Network 10.x.xx.xxx : Offline Network 10.x.xx.xxx : …

4
RAMに一時ファイルを作成する方法は?
出力をにパイプするスクリプトがあります|tee scriptnameYYMMDD.txt。出力が生成されるforループの各サイクルの後tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt、ログの出力がブラウザーウィンドウに表示され、最新の行が一番上に表示されるように、ファイルの内容を逆にします。 これを並行して行うスクリプトがいくつかあります。ディスクアクティビティを最小化しようとしているので|tee scriptnameYYYYMMDD.txt、RAMdiskへの出力が最適です。フォルダーにmktempファイルを作成しますが、/tmpそれはオフディスクではないようです。

6
成功するまでsshコマンドを実行する方法は?
デバイスを再起動し、ssh準備ができたら元に戻す必要がある場合があります。 コマンドが成功するまで、5秒ごとにsshコマンドを実行します。 私の最初の試み: watch -n5 ssh me@device.local && exit 1 これどうやってするの?
28 ssh  scripting  watch 

2
クリップボードからファイルに画像をコピー
クリップボードから画像を取得し、ファイルに出力することは可能ですか(Xを使用)? テキストでこれを簡単に行うことができます: $ xclip -selection c -o > file.text しかし、画像で上記を試しても何も書かれません。 私がこれをしたいのは、イメージエディターがインストールされていないため、インストールせずにこれを実行できるかどうかを考えさせられたためです。

3
スクリプトユーティリティを使用してすべてのターミナルセッションを自動的に記録する方法
私が達成したいのは、Yakuake / Konsoleを使用するたびに、ターミナルセッションを自動的にファイルに記録できるようにすることです。 セッションの開始時に次のことを行うと簡単に達成できます。 script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log しかし、私は夜明けを開始するか、新しいタブを開くたびに上記を自動的に実行したいと思います。 .bashrcを使用すると、「スクリプト」が新しいセッションを開き、次に.bashrcを読み取り、別の「スクリプト」を開始するなど、無限ループを作成するため、機能しません。 そのため、新しいタブが開かれたときに「スクリプト」を1回実行するために、なんとかしてやくあけ/コンソールのスクリプトを作成する必要があります。問題はどうやって?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.